PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

Détourner google images pour un résultat direct sans API

lundi 25 mai 2015 à 14:50
KraZhtest - Liens utiles - C'est le bordel 25/05/2015
Le but, trouver un lien direct vers une image en fonction d'une recherche, un mot ou un groupe de mots, sans cliquer 5 fois.
Le mot recherché doit être compris dans l'adresse URL, le retour est une image, celle du résultat numero 1 de google image. Du coup ça peut permettre d'acceder à de nombreuses images depuis un script, rien qu'avec leurs noms. Il existe cette fonction avec l'API google image. Ca fait mal à la tête, il faut des clés, un gmail, se connecter, associer son site, ça fait des adresses URL très longue incluant des tokens, etc. Ca fait mal à la tête.

En javascript, sur une page google image. (Vous pouvez lancer ce script maison depuis la console (F12*))
{code
var hrefimg = document.getElementsByClassName("rg_di rg_el")[0].children[0].href;
var pic = hrefimg.split('imgurl=')[1].split('&imgrefurl=')[0];
document.write('<img width=100% height=auto src="'+pic+'"></img>');
code}

Qui va trouver la div avec la class css "rg_di rg_el" numero 1. Puis le lien href de l'enfant div numero 1.
Ce lien est découpé pour garder la variable "imgurl" du lien google, puis pour finir supprime la variable "imgrefurl".
Et tatata!! Le résultat est un lien original vers une image quelque part sur internet, bien pertinente normalement.

C'est déjà très utile en l'etat je pense. (On peut en faire un bookmarklet par exemple).

Bon, le but étant de s'en servir sous forme d'URL, il faut un moyen d'injecter du script dans la page google image. Car l'affichage distant est désactivé par google.

Seul CURL va pouvoir aider, en PHP.
Ce code accepte le paramètre "view_pic " dans l'URL. Il va télécharger la page google image concerné, injecter le script du dessus, et donc retourner une image pertinente.
C'est pas très rapide, car la page image complète est téléchargé, mais ça marche, sans API.
Ex: /?view_pic=cat

{code

<?php
error_reporting(0);
$handle = curl_init();
$pic = $_REQUEST['view_pic'];
$url = "https://encrypted.google.com/search?q=".$pic."&source=lnms&tbm=isch&sa=X#tbm=isch";;
$header = array('Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3');
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLINFO_HEADER_OUT, 1);
curl_setopt($handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1');
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($handle, CURLOPT_NOSIGNAL, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
curl_setopt($handle, CURLOPT_HTTPHEADER, $header);
curl_setopt($handle, CURLOPT_HEADER, false);
header('Content-Type: text/html');
header("Access-Control-Allow-Origin: *");
echo'<div style="position:absolute;top:0px;left:0px;width:100%;height:100%;z-index:999;
background-color:black;color:darkgreen;font-size:23px">Loading..</div>';
echo'<base href="'.$url.'">';
echo"<script>
function showimage() {
var hrefimg = document.getElementsByClassName('rg_di rg_el')[5].children[0].href;
var link_pic = hrefimg.split('imgurl=')[1].split('&imgrefurl=')[0];
document.write(link_pic);
}
</script>";
echo'<body onload="showimage()"';
$result = curl_exec($handle);
var_dump($result);


code}

Voilà, l'exemple reste en ligne pour le moment.

Quelques autres exemples (Ajouter "_" pour une recherche composé:
http://user23.net/open/tools/g_images/?view_pic=cat
http://user23.net/open/tools/g_images/?view_pic=gorges_du_verdon
http://user23.net/open/tools/g_images/?view_pic=I_did_this
http://user23.net/open/tools/g_images/?view_pic=pirat_smiley
http://user23.net/open/tools/g_images/?view_pic=piraterie


C'est un petit bout de http://myedit.io ;)