Ja powinienem teraz zacytować 'data center' i skomentować je za pomocą twojej emotki. Podpisz umowę z Google to będziesz miał swoje data center. Jedynym legalnym sposobem teraz jest użycie Google AJAX Search API.
Tak... Wiem co mówię. Ja też liczyłem na to że przy moim małym robocie używanym co 24h Google nawet nie zorientuje się że to jakikolwiek skrypt. Po kilkunastu godzinach dostałem nie tyle bana co ciekawego rodzaju flood-blocka który umożliwiał mi wykonywanie zapytania raz na 4 sekundy.
Funkcja używająca w/w API:
function googleSearch($q, $s) {
$endpoint = 'web';
$url = "http://ajax.googleapis.com/ajax/services/search/".$endpoint;
$referer = 'http://twojastrona.pl/';
$args = array('q' => $q, 'start' => $s, 'num' => 8);
if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';
$url .= '?'.http_build_query($args, '', '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// note that the referer *must* be set
curl_setopt($ch, CURLOPT_REFERER, $referer);
//curl_setopt($ch, CURLOPT_WRITEFUNCTION, "on_curl_write");
$body = curl_exec($ch);
curl_close($ch);
//decode and return the response
return json_decode($body);
}
Jednym zapytaniem możesz pobrać max. 8 wyników, a razem do 64 w głębokości (dalej API nie szuka). Użycie:
$wynik = googleSearch('tanie zapytanie', 0);
$wynik2 = googleSearch('tanie zapytanie', 8);
$wynik3 = googleSearch('tanie zapytanie', 16);
$wynik4 = googleSearch('tanie zapytanie', 24);
Do zmiennej $wynik i trzech podobnych zostanie pobrany OBIEKT. Jeśli nie znasz jego cech to walnij var_dump($wynik);, żeby zobaczyć jakie szczegóły masz tam zapisane. Używam tej funkcji 4 razy bo tak jak wyżej wspomniałem można pobrać tylko 8 wyników jednym zamachem, a ja w przykładzie chciałem zrobić 32.
Możesz oczywiście napisać wielowątkowego szukacza i użyć multi cURL ( http://pl.php.net/manual/pl/function.curl-multi-exec.php ) lub próbować 'z partyzanta' z normalnym Google Search.