Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pozycja strony w googlu
mhs
post 13.05.2007, 11:09:31
Post #1





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


Witam serdecznie,

istnieje jakaś możliwość wyciągnięcia z googli informacji o tym na jakiej pozycji znajduje się dana strona internetowa na określone hasło? Potrzebują przygotować skrypt, który będzie automatycznie sprawdzał co jakiś czas na jakiej pozycji w wyszukiwarce znajduje się strona na określone zapytania. Jednocześnie chciałbym rozwiązanie w pełni legalne, tzn. by nie trzeba było tego obchodzić - tylko coś na co "pozwala" Google.

Pozdrawiam,
Michał.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
siemakuba
post 13.05.2007, 11:42:37
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


Google ma API do wyszukiwarki, żeby z niego korzystać potrzebny jest jednak Google SOAP API key. Ten klucz nie jest już rozdawany, więc jedyna szansa twoja to taka, że go już masz lub ma ci kto użyczyć. (szczegóły: http://code.google.com/apis/soapsearch/reference.html)

Za pomocą tego search api dało się zrobić takie sprawdzanie o jakim piszesz. Teraz jest AJAX search api no i chyba nie za bardzo nadaje się do takiego rodzaju działania...

Zawsze możesz robić zapytanie do google.com via PHP i potem parsować wynikowy HTML - mało eleganckie i dość pewnie pracochłonne rozwiązanie, ale w ostateczności można ;)

pozdr.
Go to the top of the page
+Quote Post
mhs
post 13.05.2007, 12:07:57
Post #3





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


@siemakuba Dzięki za odpowiedź.

Niestety parsowanie wynikowych stron raczej nie wchodzi w grę ze względu na zastosowanie skryptów (znaczna ilość domen, znaczna ilość słów kluczowych). Dodatkowo jakiekolwiek zmiany w kodzie strony mogą pociągnąć za sobą konieczności aktualizacji skryptów (przerwę w działaniu usług itd.), a także pewnie samo rozwiązanie jest zbyt czasochłonne w działaniu.

Orientujesz się może jak wygląda sytuacja z innymi wyszukiwarkami typu MSN, Yahoo?

Mam jeszcze jedno pytanie. Z tego co wiem jeżeli chodzi o ilość zapytań jakie można było wykorzystać na jednym kluczu była stosunkowo mała (chyba 1000 zapytań). Czy znasz może inne ograniczenia rozwiązania wcześniej wspomnianego przez Ciebie lub też możesz potwierdzić to z czym osobiście się spotkałem?
Go to the top of the page
+Quote Post
siemakuba
post 13.05.2007, 13:31:05
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


Co do MSN czy yahoo - nie orientuję się jak to u nich wygląda, ale warto zajrzeć na ich strony i poszukać. Posiadanie API do usługi jest dość łebdwazerowe, trendi i freszi więc jest szansa, że coś tam mają. (szczególnie Yahoo).

Co do limitu w Google Search API - 1000 zapytań to limit dzienny, więc zależnie od twoich potrzeb może to być albo mało albo dużo. Jedno zapytanie = 10 wyników na dane hasło. Zakładając, że chcesz szukać interesującej cię strony w zakresie pierwszych pięciu stron wyników, poświęcisz na to max 5 zapytań. To daje dziennie możliwość takiego sprawdzenia 200 stron. Na potrzeby prywatne - to aż za wiele, na rozwiązanie, które ma być usługą - pewnie za mało. Nie da się też ukryć, że są serwisy www, które dają ci możliwość takiego sprawdzania i w jakiś sposób na pewno radzą sobie z tym ograniczeniem - może jest jakaś komercyjna opcja na Search API?

pozdr.
Go to the top of the page
+Quote Post
Diwi
post 13.05.2007, 13:47:46
Post #5





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

Ostrzeżenie: (0%)
-----


Dodatkowo wyniki poprzez Google Search API dosyć czesto różnią się od tych w normalnym wyszukiwaniu.

Ja u siebie (http://www.diwi.pl/sprawdzanie_pozycji/) wykorzystuję parsowanie wyników Google, szybkie i zawsze podaje dokładny wynik smile.gif . Jak chcesz funkcje to mogę Ci ją wysłać jak coś na PW

Pozdrawiam
Go to the top of the page
+Quote Post
mhs
post 13.05.2007, 14:26:00
Post #6





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


siemakuba Dzięki za informacje. Będę dalej szukał rozwiązań.
Go to the top of the page
+Quote Post
impuls2003
post 21.05.2007, 10:13:06
Post #7





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 15.08.2006

Ostrzeżenie: (0%)
-----


Kompletna klasa do Google
Zniknal tylko RealPageRank (Zawsze = 0).
Testy na www.pc2.pl LOGIN: DEMO HASLO: DEMO123

Klasa została wykorzystana na w/w stronie w: Słowa kluczowe, Podstrony, Adresy referencyjne.

Funkcja getrealrank wymaga PHP5, pozostałe chodza na PHP4. getrealrank mozna sobie odpuscic.

  1. <?
  2.  
  3. define("GOOGLE_MAGIC", 0xE6359A60);
  4.  
  5. class GOOGLE {
  6.  
  7. public function google_pozycja_strony($strona,$zapytanie)
  8.  {
  9.  $sLinkRegExp = '/<h2 class=r><a href="([^"]+)" class=l>/';
  10.  $sURLTpl = 'http://www.google.pl/search?hl=pl&q=%s&num=100';
  11.  $sQ = $zapytanie;
  12.  $sSite = $strona;
  13.  $rC = curl_init();
  14.  curl_setopt($rC, CURLOPT_HEADER, 0);
  15.  curl_setopt($rC, CURLOPT_RETURNTRANSFER, 1);
  16.  curl_setopt($rC, CURLOPT_VERBOSE, 1);
  17.  curl_setopt($rC, CURLOPT_REFERER, 'www.google.pl');
  18.  curl_setopt($rC, CURLOPT_URL, sprintf($sURLTpl, urlencode($sQ)));
  19.  $sData = curl_exec($rC);
  20.  curl_close($rC);
  21.  preg_match_all($sLinkRegExp, $sData, $aResults);
  22.  $aResults = array_pop($aResults);
  23.  $iPosition = '-';
  24.  foreach($aResults as $iKey => $sRow) 
  25. {
  26. if(strpos(strip_tags($sRow), 'http://' . $sSite) !== false) 
  27.  {
  28.  $iPosition = $iKey + 1;
  29.  }
  30. }
  31.  if ($iPosition != '-' && $iPosition != '0') return "<font color='#FFFF00'>Pozycja GOOGLE ".($iPosition-1)."</font>";
  32.  else return "<font color='#FFFF00'>-</font>";
  33.  }
  34.  
  35. private function zeroFill($a, $b) 
  36.  { 
  37.  $z = hexdec(80000000);
  38.  if ($z & $a) 
  39. {
  40. $a = ($a>>1);
  41. $a &= (~$z);
  42. $a |= 0x40000000;
  43. $a = ($a>>($b-1));
  44. }
  45.  else 
  46. {
  47. $a = ($a>>$b);
  48. }
  49.  return $a;
  50.  }
  51.  
  52. private function toInt32(& $x)
  53.  { 
  54.  $z = hexdec(80000000); 
  55.  $y = (int)$x; 
  56.  if($y==-$z&&$x<-$z)
  57. { 
  58. $y = (int)((-1)*$x);// this is the hack, make it positive before 
  59. $y = (-1)*$y; // switch back the sign 
  60. } 
  61.  $x = $y; 
  62.  }
  63.  
  64. private function mix($a,$b,$c) 
  65.  { 
  66.  $a -= $b; $a -= $c; $this -> toInt32($a); $a = (int)($a ^ ($this -> zeroFill($c,13))); 
  67.  $b -= $c; $b -= $a; $this -> toInt32($b); $b = (int)($b ^ ($a<<8)); 
  68.  $c -= $a; $c -= $b; $this -> toInt32($c); $c = (int)($c ^ ($this -> zeroFill($b,13))); 
  69.  $a -= $b; $a -= $c; $this -> toInt32($a); $a = (int)($a ^ ($this -> zeroFill($c,12))); 
  70.  $b -= $c; $b -= $a; $this -> toInt32($b); $b = (int)($b ^ ($a<<16)); 
  71.  $c -= $a; $c -= $b; $this -> toInt32($c); $c = (int)($c ^ ($this -> zeroFill($b,5))); 
  72.  $a -= $b; $a -= $c; $this -> toInt32($a); $a = (int)($a ^ ($this -> zeroFill($c,3))); 
  73.  $b -= $c; $b -= $a; $this -> toInt32($b); $b = (int)($b ^ ($a<<10)); 
  74.  $c -= $a; $c -= $b; $this -> toInt32($c); $c = (int)($c ^ ($this -> zeroFill($b,15))); 
  75.  return array($a,$b,$c); 
  76.  } 
  77.  
  78. private function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) 
  79.  {
  80.  if(is_null($length)) 
  81. {
  82. $length = sizeof($url);
  83. }
  84.  $a = $b = 0x9E3779B9;
  85.  $c = $init;
  86.  $k = 0;
  87.  $len = $length;
  88.  while($len >= 12) 
  89. {
  90. $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
  91. $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
  92. $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
  93. $mix = $this -> mix($a,$b,$c);
  94. $a = $mix[0];
  95. $b = $mix[1];
  96. $c = $mix[2];
  97. $k += 12;
  98. $len -= 12;
  99. }
  100.  $c += $length;
  101.  switch($len) /* all the case statements fall through */
  102. {
  103. case 11: $c+=($url[$k+10]<<24);
  104. case 10: $c+=($url[$k+9]<<16);
  105. case 9 : $c+=($url[$k+8]<<8);
  106. case 8 : $b+=($url[$k+7]<<24);
  107. case 7 : $b+=($url[$k+6]<<16);
  108. case 6 : $b+=($url[$k+5]<<8);
  109. case 5 : $b+=($url[$k+4]);
  110. case 4 : $a+=($url[$k+3]<<24);
  111. case 3 : $a+=($url[$k+2]<<16);
  112. case 2 : $a+=($url[$k+1]<<8);
  113. case 1 : $a+=($url[$k+0]);
  114. }
  115.  $mix = $this -> mix($a,$b,$c);
  116.  return $mix[2];
  117.  }
  118.  
  119. private function strord($string) 
  120.  {
  121.  for($i=0;$i<strlen($string);$i++) 
  122. {
  123. $result[$i] = ord($string{$i});
  124. }
  125.  return $result;
  126.  }
  127.  
  128. private function getrank($url, $prefix="info:", $datacenter="www.google.pl") 
  129.  {
  130.  $url = $prefix.$url;
  131.  $ch = $this -> GoogleCH($this -> strord($url));
  132.  $file = "http://$datacenter/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url";
  133.  $oldlevel = error_reporting(0);
  134.  $data = file($file);
  135.  error_reporting($oldlevel);
  136.  if(!$data || preg_match("/(.*).(.*)/i", $url)==0) return "N/A";
  137.  $rankarray = explode (":", $data[2]);
  138.  $rank = trim($rankarray[2]);
  139.  if($rank=="") return "N/A";
  140.  return $rank;
  141.  }
  142.  
  143. private function getrealrank($url, $datacenter="www.google.pl")
  144.  {
  145.  $url = "info:".$url;
  146.  $ch = $this -> GoogleCH($this -> strord($url));
  147.  $file = "http://$datacenter/search?client=navclient-auto&ch=6$ch&q=$url";
  148.  //echo $file."<br />";
  149.  $data = file($file);
  150.  $tekst = ""; foreach ($data as $row) { $tekst .= $row."n"; }
  151.  $Iterator = new SimpleXMLIterator($tekst);
  152.  $Iterator->rewind();
  153.  $infoarray = $Iterator -> RES;
  154.  $nonwwwurl = str_replace("www.", "", $url);
  155.  $urlpermutationsarray = array($url, 
  156. "http://".$url, 
  157. "http://www.".$url, $url."/", 
  158. "http://".$url."/", 
  159. "http://www.".$url."/", 
  160. $nonwwwurl, 
  161. "http://".$nonwwwurl, 
  162. "http://www.".$nonwwwurl, 
  163. $nonwwwurl."/", 
  164. "http://".$nonwwwurl."/", 
  165. "http://www.".$nonwwwurl."/"); 
  166.  
  167.  for($i=0; $i<count($infoarray); $i++)
  168. {
  169. $urlU = $infoarray -> R[$i] -> U;
  170. //echo $urlU."<br />";
  171. $urlrank = $infoarray -> R[$i] -> RK;
  172. //echo $urlrank."<br />";
  173. foreach($urlpermutationsarray as $permutation){ if(strtolower($permutation)==strtolower($urlU)) return $urlrank; }
  174. }
  175.  return "-";
  176.  }
  177.  
  178. public function bierz_page_rank ($url)
  179.  {
  180.  $z = parse_url ($url);
  181.  $zz = $z['host'].$z['path'];
  182.  $zz1 = $z['host'];
  183.  if ($zz)
  184. {
  185. $rank1 = $this -> getrank($zz);
  186. $rank2 = $this -> getrank($zz1);
  187. $rank3 = $this -> getrealrank($zz);
  188. $rank4 = $this -> getrealrank($zz1);
  189. return "<font color='#FFFF00'>Google Page Ranking:".$rank1."(".$rank3."),".$rank2."(".$rank4.")</font>";
  190. }
  191.  else return "";
  192.  }
  193.  
  194.  }
  195.  
  196. $GOOGLE = new GOOGLE;
  197.  
  198. ?>
Go to the top of the page
+Quote Post
free
post 21.05.2007, 11:22:20
Post #8





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

Ostrzeżenie: (0%)
-----


Impuls masz blad w 7 lini

Impuls masz blad w 7 lini
Go to the top of the page
+Quote Post
kubarek
post 21.05.2007, 12:35:46
Post #9





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 19.02.2007

Ostrzeżenie: (0%)
-----


nie ma błędu
pewnie używasz php4, a tam nie ma słowa kluczowego public


--------------------
// ...
Co nieco o mnie ;)
Go to the top of the page
+Quote Post
impuls2003
post 21.05.2007, 12:44:54
Post #10





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 15.08.2006

Ostrzeżenie: (0%)
-----


W zasadzie mozna funkcje "function google_pozycja_strony($strona,$zapytanie)" wyjac z klasy i stosowac oddzielnie smile.gif

Jesli np. Google zmieni wzor wyswietlania wynikow, trzeba bedzie zmienic regulke REGEXP.

Pozostałe funkcje w klasie sa stosowane tylko przy braniu PR strony.

Przy moich STAT wkrada sie czasami blad, a czasami nie ze pokazuje za duzo podstron istniejacych - musze dojsc wlasnie dlaczego. I jak URL jest w UTF8 to albo krzaczy albo nie pokazuje wcale. Jak URL jest dluzszy od 650 znaków tez nie pokazuje.

A tak na marginesie jesli komus sie przyda ta klasa, bede sie bardzo cieszyl smile.gif
Trudno bylo znalezc rozwiazanie pobierania PageRanking na maszynach - serwerach 64-bitowych.

Jesli ktos ma jakies funkcje do pobierania danych z Google, np. ilosc linkow wychodzacych BackLinks bede wdzieczny za kod.

Pozdrawiam.

P.S. Tak na marginesie. Wszystkie przydatne rzeczy dotyczace PHP wrzucam do dzialu download na PC2.pl

Jest tam m.in. klasa ktora odczytuje pliki excela, nawet Office 2003

Ten post edytował impuls2003 21.05.2007, 12:52:08
Go to the top of the page
+Quote Post
sf
post 21.05.2007, 14:23:44
Post #11





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


pozycja w google tongue.gif


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:52