Оказалось, что мне нужно иметь возможность запросить Google с помощью обратного просмотра изображений, чтобы узнать больше об изображениях, которые у меня есть на моем сервере с неизвестным содержимым. Нашел хороший вопрос по этому поводу здесь: php Извлечь Лучшая догадка для этого изображения в результате поиска картинок Google?
Попытался реализовать методы, перечисленные там, но похоже, что в наши дни Google берет ваш симпатичный URL и перенаправляет 302 на, казалось бы, случайно сгенерированный бессмысленный URL, который приводит вас к результатам поиска изображений. Я удостоверился, что в моем коде для CURLOPT_FOLLOWLOCATION задано значение 1, но я все еще возвращаю содержимое страницы 302. Вот этот код:
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);
return $searched;
}
$content = fetch_google("http://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Grosser_Panda.JPG/1280px-Grosser_Panda.JPG",1);
echo $content."<br>";
Также пробовал другую реализацию, чтобы получить обратно только URL, а затем сделать второй вызов cURL после URL, который был возвращен. Тот же результат, 302 страницы возвращены. Вот часть этого кода get url, часть, которая даст мне URL для извлечения:
function get_furl($url)
{
$furl = false;
// First check response headers
$headers = get_headers($url);
// Test for 301 or 302
if(preg_match('/^HTTP\/\d\.\d\s+(301|302)/',$headers[0]))
{
foreach($headers as $value)
{
if(substr(strtolower($value), 0, 9) == "location:")
{
$furl = trim(substr($value, 9, strlen($value)));
}
}
}
// Set final URL
$furl = ($furl) ? $furl : $url;
return $furl;
}
Любые идеи с благодарностью по этому поводу!
Tineye имеет API, который вы можете использовать для обратного поиска изображений.
http://services.tineye.com/TinEyeAPI
Редактировать: вот решение для создания собственного поискового движка изображения, написанного на фляге Python.
https://github.com/realpython/flask-image-search
http://www.pyimagesearch.com/2014/12/08/adding-web-interface-image-search-engine-flask/
Я знаю, что это не имеет ничего общего с Google, но Tineye является лучшим решением, чем Google в этом отношении. Возможно Google должен купить их, и тогда они будут Google. ха-ха
Ссылка на полный API, который можно использовать в PHP:
https://developers.google.com/image-search/v1/jsondevguide
Пример кода:
$url = "https://ajax.googleapis.com/ajax/services/search/images?" .
"v=1.0&q=barack%20obama&userip=INSERT-USER-IP";
// sendRequest
// note how referer is set manually
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, /* Enter the URL of your site here */);
$body = curl_exec($ch);
curl_close($ch);
// now, process the JSON string
$json = json_decode($body);
// now have some fun with the results...