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/.

Les slides en ligne sur SlideShare.net

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

  • Description : [\d\D]*<div class= »kmt_list_comm »><p>(.*)</p></div>[\d\D]*
  • Titre : [\d\D]*<a .*>(.*)</a>[\d\D]*
  • Lien : [\d\D]* href= »([^"]*) »[\d\D]*

Les expressions régulières sous Yahoo! Pipes demandent un peu de pratique. « [\d\D]* » 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 http://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

Tags: RSS, veille, XML, yahoopipes

4 commentaires

  1. TraVu dit :

    Bonjour,

    Il me reste encore une question :

    Je veux créer 1 RSS pour suivre l’actualité (à gauche) de ce site : http://www.handeco.org/. Et j’ai testé avec 2 solutions : Xpath & Feed43, aucun outil me donne la satisfaction,car :

    - Avec Xpath dans Yahoo Pipes : j’ai créé un flux RSS avec le titre (c’est bon), mais sans liens (ouff..) : http://pipes.yahoo.com/pipes/pipe.info?_id=25a7290eded8ff45504c77c8cb9c3177; ou bien, un flux RSS avec lien, mais sans titre explicite :(

    - Je ne réussis pas à créer un flux RSS de ce site avec Feed43 :(

    Pourrais tu m’aider en trouver une solution avec Yahoo Pipe (avec Xpath) pour expliciter les titres de chaque article?

    Merci par avance,

  2. Agence Voyelle dit :

    Bonjour,

    En effet, votre ligne xpath pointe sur le h2 (le titre des articles uniquement), vous ne pouvez donc récupérer que cette information. Si vous essayer par exemple avec //ul[@class="news"] /li pour répertorier tous les blocs de contenus des actualités, vous arriverez à un flux complets normalement.

    Je vous ai fait rapidement un correctif sur ce lien http://pipes.yahoo.com/pipes/pipe.info?_id=072085409b41ea949184d5921200fc2d. Il vous suffit de le cloner, je le supprimerais ensuite.

    Sur ce flux vous avez le titre, le lien, le descriptif et la date.

    J’espère avoir répondu à votre problème.

    Cordialement,
    Erwan

  3. TraVu dit :

    Bonjour Erwan,
    C’est bien vu. Parfaitement.Grand merci pour votre aide. Merci d’avoir partage votre connaissances au monde.
    Je vous souhaite un bon weekend,
    Coridalement,
    Tra Vu

  4. Erwan Tanguy dit :

    De rien, tout le plaisir est pour moi ;-)

7 trackbacks

  1. Outils | Pearltrees
  2. Twitter : générer des flux RSS avec la nouvelle API » Stratégies digitales
  3. Scoop-it et les flux de veille » Stratégies digitales
  4. Yahoo! pipes : les sources » Stratégies digitales
  5. Yahoo! Pipes : Location, Number... » Stratégies digitales
  6. Outils | Pearltrees
  7. Veille IE | Pearltrees

Laissez un commentaire