{keywordseverywhere.com} – Récupérer les suggestions de recherche

Bonjour à tous et bienvenu à mes nouveaux amis qui nous viennent du "Journal du Hackers" !

 

Depuis que j'ai dans l'idée de créer un HackerSpace, j'échange régulièrement dans un petit channel avec les personnes qui souhaitent aussi porter ce projet.
Tout récemment l'une de ces personnes nous a proposé de faire un peu de rétro ingénierie sur le plugin navigateur "Keywords EveryWhere" !

Celui-ci offre aux utilisateurs la possibilité de récupérer les termes associés à vos recherches sur différentes plateformes :

  • Amazon
  • Google
  • Bing
  • Ebay
  • ...

Cette extension récupère non seulement les termes associés mais aussi leur assigne une notation et une valeur.
J'imagine qu'il s'agit là d'aider les personnes à mieux référencer leurs sites ou bien à faire du trading de nom de domaine.
Bref je n'ai pas personnellement l'utilité d'une telle extension, mais je me suis lancé dans l'exploration de celle-ci.

Primo Analyse :

Je me suis aperçu en faisant une recherche Google, que le plugin en question, fraîchement installé sur mon navigateur (dans un navigateur tout neuf, sur une VM vierge .... sécurité ... vie privée toussa toussa), générait une liste de termes associée à la recherche.
Ne voyant pas spécialement d'où ces termes pouvaient venir, j'ai eu le réflexe de jeter un œil dans l'onglet "network" de la console développeur ... mais .... aucune trace de ces termes provenant d'une requête faites par l'extension !

J'ai regardé dans les requêtes en Background de Google Chrome (celles qui ne sont pas faite sur la page Web que vous consultez) :

chrome://net-internals

Et là, j'ai récupéré cette requête !

https://keywordseverywhere.com/service/3/getKeywordData.php?apiKey=<votre clé>&country=&currency=&source=gsearc&
kw[]=modifier raccourci clavier chrome&
kw[]=raccourci recherche google&
kw[]=raccourci google chrome&
kw[]=raccourci changer d'onglet chrome&
kw[]=raccourci revenir en arrière chrome&
kw[]=fermer onglet chrome&
kw[]=raccourci vider cache chrome mac &
kw[]=chrome raccourci actualiser &t=1539626478485

Rien d'autre ... donc j'ai une requête qui est faites par le plugin et qui envoie les mots-clefs que je cherche à récupérer.

Les mots-lés ne sont pas récupérés par une requête de l'extension ...
Pour moi la seule piste plausible est la suivante : ceux-ci sont  directement récupérés ou générés à partir du le code source de la page !

Bingo ... quelques minutes plus tard, Yohann (le développeur qui a eu l'idée de ce "projet") me confirme que c'est bien le cas ....

J'ai donc pris le temps d'analyser quelques plateformes qu'utilisent le plugin pour générer ses propositions de recherche.

 

Récupérer les recherches associées sur Google :

Sur Google, il est assez simple de récupérer les recherches associées, puisqu'il suffit de faire une recherche via le lien suivant :

https://www.google.fr/search?q=chaussure

Pour récupérer les recherches associées au mot-clef  "chaussure"  dans le code source de la page, à l’intérieur d'un tableau Javascript.

 

 

Récupérer les recherches associées sur Amazon :

Amazon est l'une des plateformes où il est le plus simple de récupérer les recherches associées à votre mot-clef.
En ouvrant la page suivante :

https://www.amazon.fr/s/ref=nb_sb_noss_1?field-keywords=chaussure

Vous pourrez accéder aux mots-clefs associés à votre recherche, en consultant directement le code source, dans la balise "<meta keywords="

 

 

Récupérer les recherches associées sur Ebay :

Les choses se corsent avec "Ebay" puisqu'il vous faudra lire à travers le HTML pour extraire les suggestions :

https://www.ebay.fr/sch/i.html?_nkw=chaussure

Les mots-clefs sont contenus dans des liens situés à l’intérieur d'une div dont l'id est "RelatedSearchesDF"

 

Récupérer les recherches associées sur Bing :

Bing est sans doute celui qui nécessitera le plus d'étape pour obtenir les fameux mots-clefs !
Puisqu'il vous faudra faire ça en 2 requêtes !
Une première vers :

https://www.bing.com

Où vous devrez récupérer un "token" situé dans la propriété "IG" d'un objet JSON dans le code source de la page.

 

Une fois que vous avez ce token ... vous pourrez récupérer la liste des recherches associées au mot chaussure avec la requête suivante :

https://www.bing.com/AS/Suggestions?pt=page.home&mkt=fr-fr&qry=chaussure&cp=9&cvid=<token>

Là aussi, le résultat sera stocké dans les attributs "query" des éléments de la page :

 

Petit script "NodeJs" :

Dans les précédents paragraphes j'ai pu vous évoquer une manière "manuelle" de récupérer les résultats.
En développant un petit script en NodeJs j'ai pu facilement faire toutes ces opérations de manière automatisée.
Voici donc le résultat :

#!/usr/bin/nodejs
var kw = process.argv[2], url = '', 
	HTMLParser = require('node-html-parser'), 
	request = require('request');

// Google
url = 'https://www.google.fr/search?q='+kw;
request(url, function(e,r,b){ 
	res = JSON.parse(/"rfs":(.*?)]/.exec(b)[1]+"]");
	console.log("Mot(s) associe(s) sur Google pour le terme : ", kw);
	res.map(e=>console.log(' -> \x1b[33m%s\x1b[0m', e));
});

// Amazon
url = 'https://www.amazon.fr/s/ref=nb_sb_noss_1?field-keywords='+kw;
request(url, function(e,r,b){
	 res = /name\="keywords" content\=\"(.*?)\"/.exec(b)[1].split(',');
	 console.log("Mot(s) associe(s) sur Amazon pour le terme : ", kw);
	 res.map(e=>console.log(' -> \x1b[33m%s\x1b[0m', e));
});

// Ebay
url = 'https://www.ebay.fr/sch/i.html?_nkw='+kw;
request(url, function(e,r,b){
	var item="", res=[], res=[], a = HTMLParser.parse(b).querySelector("#RelatedSearchesDF").querySelectorAll('a');
	console.log("Mot(s) associe(s) sur Ebay pour le terme : ", kw);
	for (var i in a) {
		item =  a[i].firstChild  && res.indexOf () ? (a[i].firstChild.toString()).replace(/\<.*?\>/g,''):'';
		item == '' || res.indexOf(item) != -1 ? '':res.push(item);
	}
	res.map(e=>console.log(' -> \x1b[33m%s\x1b[0m', e));
});

// Bing
url = 'https://www.bing.com';
request(url, function(e,r,b){
	token = /IG:"(.*?)"/.exec(b)[1];
	url = 'https://www.bing.com/AS/Suggestions?pt=page.home&mkt=fr-fr&qry='+kw+'&cp=9&cvid='+token;
	request(url, function(e,r,b){
		var regex = /query\=\"(.*?)\"/gm, m, res=[]
		while ((m = regex.exec(b)) !== null) {
			if (m.index === regex.lastIndex) regex.lastIndex++;
	                     res.push(m[1]);
	        }
		console.log("Mot(s) associe(s) sur Bing pour le terme : ", kw);
		res.map(e=>console.log(' -> \x1b[33m%s\x1b[0m', e));
	});
});
        

Pour le faire fonctionner, il faudra bien entendu avoir quelques modules installés :

$ npm install
$ npm install node-html-parser
$ npm install request

Résultat

Conclusion

Je ne sais pas si cet article vous sera spécialement utile, moi j'ai trouvé vraiment sympa de faire ce petit projet.
Si jamais vous avez des idées où ce genre de chose pourrait être utile n’hésitez pas à le partager en commentaire.
Sur ces bonnes paroles, je vous souhaite un très bon Weekend.

Partagez ce contenu

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *