Lorsque nous faisons une recherche, il est fréquent d'obtenir des résultats sur plusieurs pages accessibles par la pagination. En fonction de l'URL, nous allons réaliser un flux qui pourra récupérer les informations de quelques unes de ces pages en utilisant un spreadsheet sur Google Drive et Yahoo! Pipes.
Notes : Il semblerait que les fichiers spreadsheets publiés ne puissent plus être récupérés en csv sur une adresse en ligne. Il faudra donc mettre le fichier exporté en csv sur un serveur pour pouvoir réaliser un loop sur les données.
Réalisons un flux RSS complexe
Pour cet exemple, nous allons partir d'une recherche sur le site du Monde avec le mot "internet". L'URL de cette recherche est http://www.lemonde.fr/recherche/?keywords=internet&qt=recherche_globale&page_num=1 pour la première page. Comme Yahoo! Pipes ne permet pas de réaliser une incrémentation qui nous permettrait de changer le numéro de chaque page (ici page_num=1), nous allons utiliser un spreadsheet (tableau type excel) de Google Drive.
Incrémentation sur un spreadsheet
Créons un tableau sur Google Drive. Sur la première ligne nous allons juste indiquer les données de chaque colonne. Ici j'ai mis sur la première colonne "NDD", sur la seconde "number" et sur la troisième "link" pour reprendre le terme de Yahoo! Pipes pour désigner les liens.
Sur la deuxième ligne, sous NDD, je colle l'URL de ma recherche en enlevant le numéro de page. Cela donne donc http://www.lemonde.fr/recherche/?keywords=internet&qt=recherche_globale&page_num=
Sous number, je mets le nombre "1" puis sous celle-ci j'inscris la formule "=b2+1". Lorsque je sélectionne ensuite cette dernière cellule, je vois apparaître en bas à droite de celle-ci un carré bleu. Je saisi ce carré et descends dans la colonne pour incrémenter de 1 en 1 et obtenir une liste de numéros.
Sous "link", je vais écrire une autre formule qui va me permettre d'obtenir un certain nombre d'URLs : =$A$2&B2
Il est important de bien mettre $a$2 pour ne pas incrémenter la partie NDD qui ne doit pas bouger. On y accole le b2, le "1". L'absence de $ va permettre sur la ligne suivante d'aller récupérer la valeur en b3, puis b4, puis b5, etc.
Comme pour le nombre précédemment, nous étirons la colonne avec le carré bleu.
Nos URLs sont prêtes, il ne reste plus qu'à obtenir l'URL de ce spreadsheet en CSV pour le récupérer dans Yahoo! Pipes. Pour l'obtenir, vous faites Fichier>Publier sur le web puis vous démarrez la publication et choisissez CSV. Il ne vous reste plus qu'à coller cette URL.
Pour cet exemple : https://docs.google.com/spreadsheet/pub?key=0AsaajCtCirq3dDRKdnl5RVB2YUxOZFNfTU16Q3o5a2c&single=true&gid=0&output=csv
Le Pipe pour établir avec xPath le modèle
Avant de récupérer le flux csv, nous allons établir le modèle de récupération des données à partir de la première page. Vous créez un Pipe puis collez l'URL du monde dans la partie debug d'un URL Input. Vous liez ensuite ce module à xPath (ici //section[@class="fleuve resultats_recherche clearfix"]/article) puis générez un flux RSS classique. Vous enregistrez votre Pipe puis créez un autre Pipe.
Pour corriger la date de publication :
Dans le deuxième Pipe, vous placez le module Sources "Fetch CSV" et vous y collez l'URL du CSV de votre spreadsheet.
Ensuite, vous reliez ce premier module à un Loop dans lequel vous allez placer votre premier Pipe (il se trouve dans My Pipes). Vous indiquez alors que le URL Input doit récupérer en boucle toutes les URLs qui sont dans l'item link.
Vous choisissez emit all results pour obtenir l'addition de toutes les informations créées. Vous reliez le Loop au Pipe Output et vous sauvegardez.
Il est possible que Yahoo Pipes ne chargent pas toutes les URLs prévues dans votre spreadsheet soit parce que vous dépassez un certain volume, soit parce que ça prend trop de temps. Généralement les dix premières URLs passent sans problème, il arrive parfois d'atteindre les 50 pages. Pour notre exemple, lorsque le Pipe charge 7 URLs, j'obtiens 80 résultats, ce qui est déjà assez important.
Voir le flux RSS final : http://pipes.yahoo.com/pipes/pipe.run?_id=e998ec562372188f9aa6f54915682775&_render=rss
À partir de cet exemple, il devient assez facile de générer un Pipe final qui ne vous demanderait que la requête et générerait automatiquement les x pages désirées. Je vous laisse le soin de réaliser ce Pipe 😉
Salut, j’ai bien apprécié cet article, sur la manière dont tu amènes le truc mais au final, ça va servir à quoi ? A mieux cibler l’objet de ta recherche, à pomper du contenu en masse ? Je pige pas… Tu peux m’éclairer stp ?
Merci Tanguy.
Cet article répond à une demande par mail suite à un autre article sur Yahoo! Pipes. Le problème était de pouvoir récupérer les listes des articles des autres pages quand on tombe sur une pagination. Même si Yahoo! Pipes limitera les résultats, on peut récupérer un certain nombre d’article.
Par rapport à la demande, j’imagine que l’objectif est de pomper du contenu en masse. L’intérêt que j’y vois est de montrer comment mettre en place des Pipes pour récupérer des données à partir d’un modèle de page. L’idée est aussi de palier à des manques de Yahoo! Pipes (incrémenter par exemple) avec un spreadsheet de Google.
Les possibilités d’échanges de données entre Google Spreadsheet et Yahoo! Pipes sont multiples et très intéressantes pour mettre en forme des données par exemple. Ici, c’est une première approche, j’espère vous en proposer d’autres, plus complexes.