php Extract Best guess for this image result from google image search?
curl, image, php, search
Solution
You could use preg_match instead.
As you're getting the HTML back from CURL, you can then use Regex to match the text instead:
function fetch_google($terms="sample search",$numpages=1,$user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0')
{
$searched="";
for($i=0;$i<=$numpages;$i++)
{
$ch = curl_init();
$url="http://www.google.com/searchbyimage?hl=en&image_url=".urlencode($terms);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, 'http://www.google.com/');
curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,120);
curl_setopt ($ch,CURLOPT_TIMEOUT,120);
curl_setopt ($ch,CURLOPT_MAXREDIRS,10);
curl_setopt ($ch,CURLOPT_COOKIEFILE,"cookie.txt");
curl_setopt ($ch,CURLOPT_COOKIEJAR,"cookie.txt");
$searched=$searched.curl_exec ($ch);
curl_close ($ch);
}
$matches = array();
preg_match('/Best guess for this image:[^<]+<a[^>]+>([^<]+)/', $searched, $matches);
return (count($matches) > 1 ? $matches[1] : false);
}
Problem
I have a requirement where i have to reverse lookup an image on google and extract the name printed on the "Best guess for this image:" title. No i did some modifications to an existing curl code on the net and came this far: ``` <?php function fetch_google($terms="sample search",$numpages=1,$user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0') { $searched=""; for($i=0;$i<=$numpages;$i++) { $ch = curl_init(); $url="http://www.google.com/searchbyimage?hl=en&image_url=".urlencode($terms); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_REFERER, 'http://www.google.com/'); curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,120); curl_setopt ($ch,CURLOPT_TIMEOUT,120); curl_setopt ($ch,CURLOPT_MAXREDIRS,10); curl_setopt ($ch,CURLOPT_COOKIEFILE,"cookie.txt"); curl_setopt ($ch,CURLOPT_COOKIEJAR,"cookie.txt"); $searched=$searched.curl_exec ($ch); curl_close ($ch); } $xml = new DOMDocument(); @$xml->loadHTML($searched); foreach($xml->getElementsByTagName('div') as $div) { if(strpos($div->nodeValue,"Best guess for this image:")) return $div->nodeValue; } } $content = fetch_google("http://media.il.edmunds-media.com/aston-martin/as/03/de/aston-martin_front_03-de-as_1_276.jpg",1); echo $content."<br>"; ?> ``` but it gives me lots of text and i am not able to get the exact div for it. since the 'a' does not have a class attribute i had to do it this way. Please help!