Ranking google
Oststnio miałem do napisania skrypt który miał pokazywać pozycję danej strony w googlach pod daną frazę (taka prosta wyszukiwarka). Jak zwykle po googlowałem trochę i po jakimś czasie znalazłem dwa skrypty. Jeden korzystał z Curl’a a drugi z fopen. Odpaliłem pierwszy na localu i wszystko łądnie działa. Kilka przeróbek i dostosowałem go do swoich potrzeb. Oczywiście nie sprawdziłem wcześniej czy na serwerze docelowym jest dostępny Curl. No i zonk! Po krótkim kontakcie z administratorem dowiedziałem się że muszę użyć czegoś innego…
Odpalam więc drugi skrypt z wykorzystaniem fopen(“http://www.google.pl/sear…”) otrzymałem w prezencie informację, że wywołanie funkcji fopen z parametrem w formie url’a zostało zablokowane (ze względów bezpieczeństwa…), wiec koniec końców wykorzystując powyższe skrypty i używając fsockopen() wykombinowałem kawałek własnego kodu…
Kod jest dosyć prosty. Zastanawiałem się nad przerobieniem go na bajdziej rozbudowane rozwiązanie w formie obiektowej jednak na dzień dzisiejszy wystarcza mi to.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <?php // słowa kluczowe $string = 'php'; //szukana strona $site = str_replace('http://','',str_replace('www.','',trim(strip_tags('php.pl')))); //ilość przeszukanych wyników w google $searchAmount = 40; $RegExp = '/<h2 class=r><a href="([^"]+)" class=l/i'; $query = str_replace(" ","+",$string); $query = str_replace("%26","&",$query); $fp = fsockopen("www.google.com", 80, $errno, $errstr, 30); if (!$fp) { $err = "$errstr ($errno)"; } else { $out = "GET http://www.google.pl/search?hl=pl&num={$searchAmount}&q={$query}&btnG=Szukaj+w+Google&lr=HTTP1.1\r\n" ; $out .= "Host: www.google.com\r\n" ; $out .= "Connection: Close\r\n\r\n" ; fwrite($fp, $out); $data = ''; while (!feof($fp)) { $data .= fgets($fp); } fclose($fp); preg_match_all($RegExp, $data, $results); $results = array_pop($results); $iPosition = ''; foreach($results as $iKey => $sRow) { if(strpos($sRow, $site) !== false) { //wyświetlamy najwyższą pozycję $iPosition = $iKey + 1; break; } } echo $iPosition; } ?> |