Vélib’ et Yahoo! Pipes : vive XML et les services Web !
Par Olivier Mengué le mercredi 15 août 2007, 19:43 - Code - Lien permanent
Le site Vélib’ utilise des services web pour afficher les informations sur les stations :
- la liste statique des stations : numéro, nom, adresse, latitude, longitude ;
- les informations dynamiques sur une station : vélos disponibles, emplacements libres, impression de tickets.
Voilà donc une occasion d'expérimenter Yahoo! Pipes, l'application web de développement et d'hébergement de scripts de traitement de données du web.
J'ai réalisé ces quelques « pipes » utilisant les services web Vélib’ :
- des tuyaux orientés utilisateur final (tags : Vélib’, Paris) :
- Vélib’ : disponibilité de plusieurs stations : afficher d'un coup le nombre de vélos et de places disponibles sur 1 à 4 stations. Mieux que sur le site officiel !
- Vélib’ : localiser une station par son numéro
- Vélib’ : toutes les stations : la liste des stations avec leurs coordonnées dans le format attendu par Yahoo! Pipes pour l'affichage sur une carte.
- des tuyaux orientés développeur, c.à.d. des interfaces Yahoo! Pipes à réutiliser (tags : Vélib’, Paris, api) :
J'ai voulu créer un pipe recherchant toutes les stations autour d'une adresse donnée. Récupérer une adresse est facile avec le tuyau Location Builder
. Mais j'ai rencontré un obstacle insurmontable lorsque j'ai voulu comparer les coordonnées latitude/longitude obtenues avec celles des stations : il impossible de manipuler des nombres flottants et même de convertir du texte en nombre.
Bilan de cette utilisation de Yahoo! Pipes dans Firefox globalement positif :
- Le concept est génial : c'est la programmation fonctionnelle appliquée aux données structurées du web !
- L'interface d'enchaînement des tuyaux est très intuitive. Le drag'n drop est parfait : on oublie que l'on est dans une appli web et on est vraiment dans un outil de développement.
- Le debogueur est génial ! On visualise facilement le résultat de chaque étape de la plomberie.
- C'est bien plus facile à développer et déboguer que XSLT !
Néanmoins l'étiquette « beta » reste de rigueur :
- l'API, c.à.d. la liste des tuyaux disponibles, n'est pas très intuitive : je n'ai pas compris la logique du classement
- la documentation des tuyaux est inexistante : Yahoo! ne propose qu'un exemple comme forme de documentation.
- la documentation de l'affichage de la sortie des tuyaux est aussi inexistante : les éléments
title
ouy:location.lat
/y:location/lon
sont particuliers dans l'affichage final, mais il n'existe nulle part de liste complète de ces éléments. - l'API est plutôt incomplète : j'aimerais pouvoir traiter des nombres flottants tels que des coordonnées (latitude, longitude)
- les regex soit-disant « Perl-like » ne le sont pas. Par exemple
\L
fonctionne pour mettre en minuscules, mais pas\E
. Et comme rien n'est documenté... - les transformations de types sont laborieuses : le concept d'« item » est nouveau par rapport à d'autres langages de programmation, mais n'est expliqué nulle part. C'est un
Item builder
qu'il faut utiliser pour convertir du texte en item, mais il est rangé dans la catégorie desSources
. La réorganisation de l'arbre d'un item se fait en utilisant un tuyauRename
. Et il est impossible de convertir du texte en nombre...
Commentaires
Merci pour ces hacks.
Où peut-on récupérer les data Vélib, et notamment les disponibilités en temps réel ? Existe-t-il une API ?
En aparté, un logiciel pour les mobiles équipés d'un GPS, comme le N95, pourrait être très utile.
Par exemple, avec le GPS activé, au début du trajet l'utilisateur appuye sur un bouton de tel sorte que :
- lorsqu'un délai de 25 minutes est écoulé, le téléphone sonne pour le notifier ;
- et l'application affiche automatiquement les stations les plus proches avec leurs disponibilités (avec une requête automatisée via GPRS/EDGE/3G).
J'ai des idées mais pas les compétences pour coder. :)
@kael
Oui ça existe : c'est ce que j'ai utilisé pour construire mes pipes. Voici l'URL :
http://www.velib.paris.fr/service/stationdetails/<n°station>
. Est-ce que l'API est officielle ? Non, pas que je sache.D'ailleurs, il te suffisait de regarder le source de mes pipes pour l'obtenir. Oui, il faut un compte Yahoo!. Mais franchement Yahoo! Pipes, ça vaut le détour.
Moi, j'ai un Nokia N800, une tablette Internet, avec un GPS Bluetooth et un logiciel de cartographie. Et je me suis créé une base de POI pour afficher les stations Vélib' (voir mon post). Donc c'est en permanence que je sais où sont les stations Vélib' autour de moi. Et c'est bien plus efficace que l'information que l'on obtient sur les bornes : souvent, lorsqu'une station est pleine, toutes celles du quartier le sont aussi et la carte de la borne n'affiche donc aucune station.
Concernant la disponibilité des stations, je n'ai pas de téléphone Bluetooth donc je ne peux obtenir sur ma tablette les informations de disponibilité. À moins de me trouver à coté d'un MacDo (où le wifi est gratuit).
Mais en fait je connais maintenant suffisamment bien mes stations habituelles pour ne pas être gêné par les stations pleines. Par exemple la station située à la sortie du métro Bibliothèque François Mitterand a toujours de la place à l'heure où j'y passe (le soir). Et au pire, il suffit de passer son passe Navigo sur la borne pour obtenir 15 minutes de rab pour aller à une autre station. C'est sûr, faut pas avoir un rendez-vous dans la minute.
Oui, une application toute intégrée ce serait utile. En attendant, tu peux utiliser les pipes Yahoo! sur un téléphone mobile. Voir mon post d'hier soir.
Merci beaucoup pour l'URL de l'API.
Je me demande comment vous l'avez découverte.
J'ai pensé à une autre version de Yahoo Pipes qui utiliserait du geocoding de façon à pouvoir connaître la disponibilité des bornes environnantes au point de destination, sans avoir à connaître leur ID ni celle de la borne de destination mais simplement à partir d'une adresse.
Avec Google Maps, j'ai tenté d'extraire les bornes voulues à partir de quelque chose du genre :
'Adresse de destination -> Conversion en geotadata via l'API de geocoding de Yahoo ou Google [1] -> extraction des bornes les plus proches à partir d'un fichier KML (notamment généré grace aux geodata et au paramètre 'z=' [2]) avec une URL du type :
maps.google.com/maps?f=q&...
Mais je n'arrive pas à récupérer les data pertinentes; l'output du fichier est vide. :\ Et je n'ai pas trouvé d'autres moyen de parser facilement www.parisavelo.net/velib.... .
[1] hublog.hubmed.org/archive...
[2] mapki.com/wiki/Google_Map...
Comment j'ai découvert l'URL ? Pas bien compliqué : il suffit de connaître un peu comment fonctionne les APIs Google pour comprendre comment le développeur peut avoir conçu l'affichage de la carte Vélib'. Ensuite, il suffit de constater le temps de chagement de la carte (très très long) pour se douter que l'ensemble des stations est chargé dans la page (même pour n'afficher que 10 stations : une hérésie !) et inciter à aller fouiller dans le source de la page où se trouve l'URL.
Moi aussi j'ai essayé de combiner l'API de geocoding directement accessible depuis Yahoo! Pipes (opérateur "Location Builder") avec ma requête d'infos sur les stations. Malheureusement je n'ai pas trouvé dans Yahoo! Pipes d'opérateur permettant de comparer des "locations" et qui permettait de filtrer selon "près de"
Le seule solution : laisser tomber les prototypes avec Yahoo! Pipes et coder vraiment sur un serveur la partie de localisation de station la plus proche. Néanmoins, on pourrait au mieux faire des comparaisons de poroximité par rapport à des adresses lat/lon, ce qui n'est pas aussi utile qu'une vraie comparaison tenant compte des contraintes urbaines (la différence entre "à vol d'oiseau" et "par les rues").
Ton lien vers la doc sur les requêtes Google Maps est une piste intéressante que je vais creuser...
Grâce à l'URL de l'API, j'ai pu écrire un bot jabber (pas encore publié) qui interroge toutes les 5 minutes un nombre de stations pré-définies. Et j'utilise Bombus_Mod [1] comme logiciel Jabber pour J2ME. L'avantage d'utiliser le XMPP est la compression qui permet de consommer très peu de bande passante en GPRS (quelques octets).
Mais il manque une partie de géolocalisation : je pensais écrire un bot qui afficherait les stations à partir d'une adresse de destination avec quelque chose du genre :
Adresse de destination -> récupération des bornes les plus proches et de leur adresse (en "scrapant" Infovelib [2]) -> interrogation de l'API Velib pour la liste de stations récupérée sur Inforvelib.
Mais j'ai trouvé *le* hack [3] qui permet, apparemment, de convertir les metadata des antennes GSM en coordonnées geographiques. Il semble possible d'utiliser le CellID et le LAC [4] comme paramètre de requête pour interroger Google Maps Mobile (avec www.google.com/glm/mmap comme URL de base). Mais j'ai pas encore trouvé précisément comment l'utiliser en "REST".
Un Pipes pour convertir les metadata en coordonnées géographies avec cette API serait génial. :)
Ceci dit, la solution idéale serait l'utilisation du Cell Broadcast [5]. Cette technologie permet de recevoir certaines metadata comme le nom de la ville ou le numéro de la CellID directement sur l'écran du mobile.
Ainsi, par exemple lorsque l'on traverse la Suisse en train, les noms des villes s'affichent automatiquement sur le mobile.
Il serait intéressant d'utiliser cette technologie pour Velib. De cette façon, simplement en activant l'option "Affichage Info Cellule", les parisiens pourraient facilement connaître les noms et adresses des stations les plus proches ainsi que leurs disponibilités. Evidemment, ce service serait gratuit et financé par la Mairie de Paris. Mais avec la légendaire volonté de coopération des opérateurs mobiles, je ne suis pas sûr que nous soyons près d'utiliser le Cell Broadcast.
[1] en.wikipedia.org/wiki/Bom...
[2] www.infovelib.fr/
[3] davanum.wordpress.com/200...
[4] www.3gpp.org/ftp/Specs/ht... - (section 4)
[5] fr.wikipedia.org/wiki/Cel...
Côté géolocalistation, le CellID pourrait en effet être théoriquement intéressant. Le problème est que cette information est difficilement accessible dans les OS des téléphones actuels. Notamment l'accès au CellID est impossible directement depuis J2ME. Il faut donc passer par une application native. Voir ce thread sur le forum Nokia. Donc adieu la portabilité.
De plus l'utilisation du CellID nécessite de disposer d'une base de données libre et à jour indiquant la position des Cell IDs. Déjà que pour les stations Vélib' on ne l'a pas...
L'espoir est plutôt du coté de l'intégration de puces GPS dans les téléphones. J'utilise un GPS Bluetooth connecté à mon N800 (qui n'est pas un téléphone) pour afficher les stations Vélib' autour de moi. Mais pas pour l'instant d'info de disponiblité hors des points d'accès wifi : je n'ai pas un téléphone Bluetooth pour relier mon N800 à Internet par le GPRS.Quant au « Cell Broadcast » il faut bien penser que, bien que les utilisateurs de Vélib' soient très nombreux, ils restent une minorité des utilisateurs parisiens de téléphones mobile. Le cell broadcast reste dédié à l'envoi de messages pour les cas d'urgences.
Bonjour,
Je viens de lire votre article évoquant les yahoo pipes, aussi je prends la liberté de vous informer que :
Une liste d'entraide sur les yahoo pipes vient de se créer ici :
fr.groups.yahoo.com/group...
Cordialement,
RG