< Retour

Yahoo! Pipes : contourner l’absence de flux RSS (tutoriel xPath)

Des flux RSS à une veille de surface (5)

Dans un monde où tous les sites possèdent des flux RSS, nous pourrions nous arrêter là. Il y a cependant de nombreux sites qui n’en proposent pas, soit pour des raisons techniques (site statique, option non activée), soit volontairement pour obliger l’internaute à visiter le site plutôt que de le consulter via des agrégateurs (voir les articles 1, 2 et 3).

Nous allons voir que Yahoo! Pipes peut encore une fois nous aider. Grâce à ses modules, nous allons pouvoir exercer une surveillance de zones précises sur une page. Il faut pour cela que la zone à surveiller ne soit pas charger en javascript (en ajax par exemple) car sinon elles resteront invisibles. Heureusement, la plupart du temps, on retrouve facilement ses données sur d’autres pages. Il va falloir donc trouver la page proposant les données chargées.

Pour l’exemple, je prends la page du site de la bibliothèque de Rennes Métropole qui ne relève pas d’enjeux concurrentiels importants. L’url de cette page est http://www.bibliotheque-rennesmetropole.fr/.

[iframe http://www.slideshare.net/slideshow/embed_code/26503491 500 400]

Les slides en ligne sur SlideShare.net

Les éléments nécessaires pour le tutoriel :

  • Description : [dD]*<div class=”kmt_list_comm”><p>(.*)</p></div>[dD]*
  • Titre : [dD]*<a .*>(.*)</a>[dD]*
  • Lien : [dD]* href=”([^”]*)”[dD]*

Les expressions régulières sous Yahoo! Pipes demandent un peu de pratique. “[dD]*” indique un contenu a ne pas prendre en compte – il précède ou suit les contenu recherchés. “(.*)” indique un contenu à retenir. Il est possible d’en retenir plusieurs qui pourront se faire appeler ensuite $1, $2, etc. Parfois “(.*)” ne permet pas de récupérer les contenus en raison de saut de ligne par exemple. Il est possible d’utiliser alors “([^>]*)”, de même pour les liens avec “([^”]*)”.

Nouveau module : XPATH Fetch Page (tutoriel)

Bien que le module Fetch Page ait disparu, il est toujours possible de l’utiliser en utilisant des clones de pipes existant (voir par exemple celui-ci que je prends comme exemple dans la suite) – il vous suffira de remplacer les url et codes par ceux correspondant à vos besoins. Yahoo! pipes propose en remplacement de ce module, un module au fonctionnement un peu différent : le Xpath Fetch Page !

module xpath fetch page de yahoo pipes

Contrairement à la capture ci-dessus, je vous conseille de ne pas cocher l’option “Emit items as string”. Sans cette option vous pourrez plus facilement afficher les différents contenus des items grâce à un module Regex.

Comment procéder ?

Dans le premier champ, vous devez saisir l’url de la page. Dans le second champ, vous devez saisir un code qui va vous permettre de cibler la partie du site que vous voulez transformer en items. Si par exemple je veux cibler les li d’un ul particulier dont la class est “linkList”, je vais écrire //ul[@class=”linkList”] //li. La méthode semble plus efficace sur l’exemple que j’ai mis en lien, elle permet de mettre en items les li et uniquement eux là où l’autre méthode obligeait ensuite à utiliser un module de filtre pour effacer les “faux” items créés. Cela va demandé cependant un temps d’adaptation…

syntaxe XPath :

  • Nodename : (ex : paragraphe ou body) sélectionner tous les nœuds enfants du nœud nommé
  • / : Sélectionner à partir du nœud racine
  • // : Sélectionner les nœuds présents dans le document qui correspondent quel que soit leur emplacement à la sélection
  • . : Sélectionner le nœud courant
  • .. : Sélectionner le parent du nœud courant
  • @ : Sélectionner des attributs
  • //* : Sélectionner tous les éléments
  • //p : Sélectionner tous les éléments de p
  • P>* : Sélectionner tous les nœuds enfants de p
  • //*[@id=’page’] : Sélectionner tous les éléments par id
  • //*[@title] : Sélectionner les éléments avec attributs

source : http://www.stratieo.com/les-modules-de-yahoo-pipes-fonctionnalites-niveau-1/

Avec FireBug (extension du navigateur Firefox)

Il existe une méthode plus rapide avec le plugin FireBug sous Firefox. Il suffit de cibler la partie du code voulue et de récupérer le code xPath.

xPath avec Firebug

Vous obtiendrez alors le chemin xPath détaillé : /html/body/div[2]/div/div[4]/div/div pour l’exemple à partir de https://www.voyelle.fr/.

Générer les titre, liens et description

Pour la réécriture des items obtenus, il va falloir passer par un module Regex. Si nous restons sur l’exemple proposé, le Regex va me permettre de générer mon flux là où le précédent (Fetch page) nécessitait 5 modules. Pour appeler les contenus, il suffit de rédiger une ligne qui indiquera dans quel tableau il se trouve. Dans l’exemple ${a.content} pour le contenu textuel, ${a.href} pour le lien. L’exemple sur un blog traitant de ce nouveau module vous donne des lignes plus complexe en fonction des items générés : ${td.0.span.0.a.href} par exemple !

Autre possibilité plus simple : l’operateur Create RSS

Il vous faudra remplir les champs pour le titre, la description, le lien… de la même manière que dans le Regex sans les ${} : a.content suffira. Le seul défaut que j’y trouve est que sur certaines pages (moteur de recherche interne à un site) les résultats peuvent avoir des variantes. Le Regex permet d’ajouter ces variantes. Il est possible peut-être d’ajouter dans le champ titre une suite de possibilités… à tester donc.
Si la page ne bouge pas, ce module est plus simple et plus rapide que le Regex. À vous de voir !

Empêcher Xpath Fetch Page de scanner vos pages

Yahoo! pipes propose aussi une option pour bloquer une page à ce module : il suffit d’y insérer <meta name=”robots” content=”noindex”> ! Évidemment c’est assez radical puisque vous indiquez alors que votre page est non indexable par les moteurs de recherche. Ce n’est pas inintéressant pour autant, si vous ne souhaitez pas que votre page puisse être suivie, pas la peine de la référencer !

Pour retrouver le pipes de ce tutoriel ainsi que d’autres liens utiles :

Présentation des modules

[iframe http://www.slideshare.net/slideshow/embed_code/16315148 500 400]

Publié le 24 juillet 2011

Partager :