Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> CURL złe wyniki google
prapdm
post 27.03.2010, 17:34:35
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 27.03.2010

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


Witam

Wykorzystałem gotowy skrypt znaleziony gdzieś na internecie do sprawdzania pozycji strony na zadaną frazę.

Zwraca ze fraza strony flash znajduje się na 6 pozycji, co nie jest prawdą, bo prawidłowa pozycja to 2.
Zatem błąd tkwi w wynikach zwróconych przez curla, wie ktoś może dlaczego ?


Poniżej trochę kodu:

  1. $adres_strony = 'http://'.$_GET['strona'].'';
  2. $fraza = $_GET['fraza'];
  3. //$wyszukiwarka = $row_slowa_kluczowe['searcher'];
  4. $url = preg_replace('(^http://|/$)','',$adres_strony);
  5. $pos = 0;
  6. $done = false;
  7. $found = false;
  8. $page_limit = 50;
  9.  
  10.  
  11.  
  12. //wykonajmy skrypt sprawdzanai pozycji
  13.  
  14. for ($page = 0; $page < $page_limit; $page += 10)
  15. {
  16. $results = array();
  17.  
  18. $ch = curl_init();
  19. curl_setopt($ch, CURLOPT_URL, 'http://www.google.pl/search?hl=pl&source=hp&q='.urlencode($fraza).'&start='.$page);
  20. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  21. curl_setopt($ch, CURLOPT_REFERER, 'www.google.pl');
  22. curl_setopt($ch, CURLOPT_HTTPHEADER, array (
  23. "Host: www.google.pl",
  24. "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl-PL; rv:1.8.1.24pre) Gecko/20100228 K-Meleon/1.5.4",
  25. "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
  26. "Accept-Language: pl,en-us;q=0.7,en;q=0.3",
  27. "Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7",
  28. "Keep-Alive: 300",
  29. "Connection: keep-alive",
  30. "Referer: www.google.pl"
  31. ));
  32.  
  33.  
  34. $response = curl_exec($ch);
  35.  
  36. echo $response;
  37.  
  38. curl_close($ch);
  39.  
  40. preg_match_all("/<h3 class=r><a[^>]+href=\"([^\"]+)\"[^>]*>/", $response, $out);
  41.  
  42. foreach ($out[1] as $serp)
  43. {
  44. $serp = preg_replace('(^http://|/$)','',$serp);
  45.  
  46. if (!strstr($serp, 'google.pl'))
  47. {
  48. $pos++;
  49.  
  50. if ($serp == $url)
  51. {
  52. $done = true;
  53. $found = true;
  54. break;
  55. }
  56. else
  57. {
  58. $found = false;
  59.  
  60. if ($page == ($page_limit - 10))
  61. {
  62. break;
  63. }
  64. }
  65. }
  66. }
  67.  
  68. if ($done)
  69. {
  70. break;
  71. }
  72.  
  73. // losowy czas pomiedzy kolejnymi zapytaniami
  74. sleep(rand(15, 30));
  75. }
  76.  
  77. if ($found)
  78. {
  79. echo '<br />'.$adres_strony.' - '. $fraza. ' - <b style="color:#00CC00">pozycja - '.$pos.'</b><br />';
  80. }
  81. else if (!$found)
  82. {
  83. echo '<br />'.$adres_strony.' - '. $fraza. ' - <b style="color:#FF0000">pozycja powyżej 50</b><br />';
  84. }


Ten post edytował prapdm 27.03.2010, 21:43:51
Go to the top of the page
+Quote Post
tehaha
post 27.03.2010, 17:45:06
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


nie analizowałem Twojego skryptu, ale weź pod uwagę, że wyniki zwracane przez google są zależne od lokalizacji, tak więc przykładowo Ty możesz widzieć stronę na pozycji 6 a jakiś koleś z Krakowa będzie ją miał na pozycji 12. Możliwe że skrypt działa poprawnie ale zwraca wynik który jest wyświetlany w lokalizacji serwera, a nie Twojej
Go to the top of the page
+Quote Post
prapdm
post 27.03.2010, 21:43:17
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 27.03.2010

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


Wszystko się zgadza. Powodem różnych wyników wyszukiwania są Google Datacenter. Z różnych rejonów polski łączymy się z innymi serwerami, proste.

Można to sobie sprawdzić np tutaj http://www.iwebtool.com/google_datacenter_search

Dla mojej lokalizacji IP dla google.pl to 209.85.135.103, zatem aby mieć identyczne wyniki zmieniłem adres google.pl na IP

  1. curl_setopt($ch, CURLOPT_URL, 'http://209.85.135.103.pl/search?hl=pl&source=hp&q='.urlencode($fraza).'&start='.$page);


Generalnie powoduje to trochę kłopotów, bo klient z warszawy będzie widział co innego a klient z Wrocławia co innego. Najlepszym sposobem było by uśrednienie pozycji z paru google data centerów, albo napisanie tak skryptu aby zawsze pobierał dane z tego serwera gdzie jest najlepszy wynik (bo reszta serwerów i tak się z czasem zaktualizuje)
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: 19.07.2025 - 09:48