2010-06-03 9 views
1

Je souhaite que CURL apparaisse sur Google pour voir le nombre de résultats renvoyés pour une recherche donnée.Utilisation de CURL avec Google

J'ai essayé ceci:

$url = "http://www.google.com/search?q=".$strSearch."&hl=en&start=0&sa=N"; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    $response = curl_exec($ch); 
    curl_close($ch); 

Mais il retourne juste une erreur Google 405 Méthode admis.

Des idées?

Merci

+0

duplication possible de [script PHP simple pour récupérer google mot-clé de recherche tion] (http://stackoverflow.com/questions/1784114/simple-php-script-to-retrieve-google-keyword-search-completion) –

+0

Ce n'est pas vraiment un doublon. L'autre question est similaire, mais la réponse est complètement différente de ce que ce PO recherche. La réponse aux autres questions n'utilise ni CURL ni l'URL de requête normale de Google. –

+0

Non pertinent. Il essaie CURL et Google normal parce que c'est ce qu'il sait. Je dis que ni CURL ni "URL de requête Google normale" ne sont nécessaires pour obtenir la valeur désirée. –

Répondre

4

Utilisez une requête GET au lieu d'une requête POST. Cela est, se débarrasser de

curl_setopt($ch, CURLOPT_POST, true); 

Ou mieux encore, utiliser leur well defined search API au lieu de l'écran-grattage.

+0

Duh! Bien sûr! Je pense que je vais m'en tenir au grattage à l'écran. – TheBounder

+0

Pourquoi resteriez-vous sur le scrappage de l'écran, qui sera fragile pour les modifications de l'interface utilisateur de la page, quand il y a une API bien définie qui a ce que vous voulez? –

+1

L'API a des limitations, telles que renvoyer uniquement les 30 premiers résultats. Scrapping Google est une chose très commune. –

4

Mise au rebut Google est une chose très facile à faire. Cependant, si vous n'avez pas besoin de plus que les 30 premiers résultats, alors le search API est préférable (comme d'autres l'ont suggéré). Sinon, voici un exemple de code. Je l'ai arraché à quelques cours que j'utilise, il n'est peut-être pas totalement fonctionnel, mais vous devriez avoir l'idée.

function queryToUrl($query, $start=null, $perPage=100, $country="US") { 
    return "http://www.google.com/search?" . $this->_helpers->url->buildQuery(array(
     // Query 
     "q"  => urlencode($query), 
     // Country (geolocation presumably) 
     "gl" => $country, 
     // Start offset 
     "start" => $start, 
     // Number of result to a page 
     "num" => $perPage 
    ), true); 
} 

// Find first 100 result for "pizza" in Canada 
$ch = curl_init(queryToUrl("pizza", 0, 100, "CA")); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_USERAGENT,  $this->getUserAgent(/*$proxyIp*/)); 
curl_setopt($ch, CURLOPT_MAXREDIRS,  4); 
curl_setopt($ch, CURLOPT_TIMEOUT,  5); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

$response = curl_exec($ch); 

Note: $this->_helpers->url->buildQuery() est identique à http_build_query sauf qu'il baissera les paramètres vides.

-4

CURLOPT_CUSTOMREQUEST => ($ post)? "POST": "GET"

-2

Avant que les données de déchirage s'il vous plaît lire https://support.google.com/websearch/answer/86640?rd=1

Contre termes google

Le trafic automatisé comprend:

Envoi des recherches à partir d'un robot, un programme informatique, un service automatisé ou recherche scraper Utilisation d'un logiciel qui envoie des recherches à Google pour voir comment un site Web ou une page Web se classe sur Google

Questions connexes