Scrap de Search Console pour aller chercher des données non dispo par API

Tout d’abord, regardez du coté de l’api pour voir si les données que vous chercher ne sont pas disponibles. Vu le peu d’informations qu’on y trouve, j’imagine que vous avez hâte de lire la suite. Le but est de feindre une authentification sur la page pour aller scraper les données directement dans le code source. Ce cher Google nous a pondu un formulaire d’authentification sécurisé avec un token, il faut donc bidouiller un peu pour le récupérer et accéder au « précieux ». Allumer votre Apache, et votre notepad++, c’est parti.

Explication du code ci-dessous : il se pointe sur la page de login. Il remplit avec vos logins / password et renvoie le tout en gardant le token.
Ensuite, il va sur la page de stats à la recherche des informations de temps de chargement et de pages crawlées.

(Vous pourriez aussi aller sur la page du nombre de pages indexées, il suffit de changer la page et le Xpath).

Ensuite, il découpe la partie qui nous intéresse à l’aide de Regex, puis il ressort le tout dans un tableau.

L’utilisation d’un Proxy est vivement recommandé, car Google interdit ce genre de pratiques.
D’ailleurs, je l’ai juste fait par défi technique, jamais je n’oserais m’en servir…

 


define("LOGIN","");
define("PASSWORD",'');
$url_site = "https://www.gameandme.fr/";

echo gotoSearchConsole($url_site);

function gotoSearchConsole($url_site) {
 $tabInfos = array("volume"=>array(),"time"=>array());
 
 //On cherche la page de Login
 $ch = curl_init();
 $url = "https://accounts.google.com/ServiceLoginAuth";
 curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_REFERER, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.3.13) Gecko/20101203 Firefox/3.6.13');
 //Cookies
 curl_setopt($ch, CURLOPT_COOKIESESSION, true );
 curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

$result = curl_exec($ch);
 
 //On regarde les champs input
 $docXML = new DOMDocument();
 if ($docXML = @DOMDocument::loadHTML(($result))){
 $tabInfos = array();
 
 $xpath = new DOMXPath($docXML);
 $sXpath = "//input";
 $lNodes = $xpath->query($sXpath);
 foreach ($lNodes as $oNode) {
 $tabInfos[$oNode->getAttribute("name")] = $oNode->getAttribute("value");
 }
 $tabInfos["Email"] = LOGIN;
 $tabInfos["Passwd"] = PASSWORD;
 }
 
 $fields_string = "";
 foreach($tabInfos as $key=>$value) { 
 $fields_string .= $key.'='.$value.'&'; 
 }
 rtrim($fields_string, '&');

//On envoie les champs input 
 curl_setopt($ch, CURLOPT_URL, "https://accounts.google.com/signin/challenge/sl/password");
 curl_setopt($ch,CURLOPT_POST, count($tabInfos));
 curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
 
 //On affiche le resultat
 $result = curl_exec($ch);

//On charge la page contenant les donnees du site 
 $xyz = "https://www.google.com/webmasters/tools/crawl-stats?hl=fr&siteUrl=".urlencode($url_site);
 curl_setopt($ch, CURLOPT_URL, $xyz);
 $result = curl_exec($ch);
 
 curl_close($ch);
 
 
 $docXML = new DOMDocument();
 $tabInfos = array();
 if ($docXML = @DOMDocument::loadHTML(($result))){
 
 $xpath = new DOMXPath($docXML);
 $sXpath = "//div[@id='hostload-activities']/table/tr/th/script";
 $lNodes = $xpath->query($sXpath);
 $k=0;
 foreach ($lNodes as $oNode) {
 $k++;
 if ($k==1){
 $sTab="volume";
 }
 if ($k==3){
 $sTab="time";
 }
 
 $pattern = '|\"c\":\\[(.*?)\\]|';
 preg_match_all($pattern,$oNode->nodeValue,$rows,PREG_PATTERN_ORDER);
 foreach ($rows[0] as $row){
 $pattern = '|\"f\":\"(.*?)\"\\},\\{\"v\":(.*?[0-9]+)|';
 preg_match_all($pattern,$row,$cols,PREG_PATTERN_ORDER);
 if (isset($cols[1][0]) and isset($cols[2][0])){
 $tabInfos[$sTab][$cols[1][0]] = $cols[2][0];
 }
 }
 }
 }
 
 echo var_dump($tabInfos);
}


1 réflexion au sujet de « Scrap de Search Console pour aller chercher des données non dispo par API »

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.