Inovia Blog

L’actualité des technologies innovantes

select * from internet

Par Kadda SAHNINE

Publié le | 15 février 2010 |

yql.gifLancé initialement en Octobre 2008 puis réactualisé en Avril 2009 (YQL Execute), Yahoo Query Language a fait l’objet d’une utilisation originale par Chris Heilmann à l’occasion de la publication d’un billet proposant une solution au problème des requêtes cross-domain.
En effet, pour des raisons de sécurité, tous les navigateurs interdisent l’accès à des ressources n’appartenant pas au domaine depuis lequel un document a été chargé (sauf pour les balises img, script, link et iframe), ce que l’on désigne par les règles dites Same Domain Policy ou Same Origin Policy.

Le titre sibyllin de cet article est une occasion de (re)découvrir YQL, probablement un des projets les plus révélateurs d’une tendance fondamentale : l’émergence du Web des Données.

Retour sur YQL

Yahoo! Query Language est un langage apparenté à SQL permettant de construire des requêtes sur des données structurées ou non structurées, disséminées sur le Web.

L’idée force consiste à organiser les ressources du Web sous la forme de tables, la plus générique étant la table html.

Ainsi, la requête suivante permet d’extraire le cours de l’indice CAC 40 issu de Google Finance :

SELECT * FROM html WHERE
url=’http://www.google.com/finance?q=INDEXEURO%3APX1′
AND xpath=’//span[@id=\’ref_12156165_l\’]/text()’

YQL Console permet d’évaluer les requêtes avant leur intégration dans des programmes. Cette console est en outre un outil indispensable pour parcourir l’ensemble des tables exposées comme autant de perspectives d’organisation de données à priori déstructurées.

console.png

On découvrira entre autres qu’il est possible de requêter :

  • des services en ligne exploités par Yahoo! (liste non exhaustive)
    • Yahoo! Search : table search.web
    • Yahoo! Météo : table weather.forecast
    • Yahoo! News : table search.news
    • Yahoo! Music : table music
    • Flickr : table flickr
  • des ressources structurées (liste non exhaustive)
    • flux RSS : tables rss ou feed
    • services REST : tables xml ou json

Nous verrons plus loin que le catalogue des tables est extensible et est ouvert à des tiers.

YQL par l’exemple

A titre d’exemple, voyons comment afficher l’état du trafic RATP et Transilien à l’aide de YQL et jQuery. Le résultat final est présenté dans la copie d’écran ci-dessous :
ratp.png

Pour ce faire, nous avons besoin :

  • d’une source de données : l’état du trafic est accessible depuis un sous menu obscure du site InfoTrafic
  • d’isoler les données à extraire : la zone utile est définie de manière assez triviale par la requête xpath suivante : //div[@class='central']/p
  • d’utiliser la librairie Javascript jQuery pour lier la requête YQL et les boutons associés à un mode de transport

La requête YQL d’extraction de l’état du trafic du métro est la suivante :

SELECT * FROM html
WHERE url=’http://www.infotrafic.com/transport.php?region=IDF&link=trans.php?rub=METRO’
AND xpath=’//div[@class=\’central\’]/p’

Le code jQuery ci-dessous contextualise la requête en fonction du mode de transport et gère l’affichage du résultat :

$(function() {
  $(”button”).click( function() {
    var mode=$(this).attr(”alt”);
    $.ajax( {
      method: ‘GET’,
      url: ‘http://query.yahooapis.com/v1/public/yql?q=select%20%2A%20from%20html%20where%20url%3D%27http%3A%2F%2Fwww.infotrafic.com%2Ftransport.php%3Fregion%3DIDF%26link%3Dtrans.php%3Frub%3D’ + mode + ‘%27%20and%20xpath%3D%27%2F%2Fdiv%5B%40class%3D%5C%27central%5C%27%5D%2Fp%27%20&format=xml’,
      success: function( data, status) {
        $(”#trafic”).html( $(data).find(”p”) );
      }
    });
    mode = null;
    return false;
  });
});

La démo, librement utilisable, est déployée sur l’excellent service JS Bin depuis lequel vous pouvez consulter le code source.

Vers un Web des Données

L’ensemble des services proposés par Yahoo! (moteur de recherche, météo, finance, géolocalisation, etc.) est exposé sous la forme de tables.
L’idée de la communauté Open Data Tables consiste à généraliser ce modèle d’organisation des données vers des systèmes tiers producteurs d’information (plateformes sociales, journaux, associations, organisation publiques et privée, etc.).

De manière schématique, un descripteur YQL (format XML) permet de définir les règles de mapping entre une source de données REST et une table au format YQL. Les champs de la table utilisés dans les clauses WHERE correspondent aux paramètres de la requête.

Le portail datatables.org contient une quantité impressionnante de descripteurs.
Ainsi, le descripteur http://www.datatables.org/twitter/twitter.user.timeline.xml modélise la timeline d’un compte Twitter. Son utilisation est des plus triviale :

USE ‘http://www.datatables.org/twitter/twitter.user.timeline.xml’ as twitter;
SELECT * FROM twitter WHERE id=”ksahnine”

D’autres descripteurs sont en cours de développement et sont accessibles sur le repository github, comme le descripteur des statuts Google Buzzhttp://github.com/yql/yql-tables/raw/master/google/google.buzz.updates.xml utilisable comme suit :

USE “http://github.com/yql/yql-tables/raw/master/google/google.buzz.updates.xml” as google.buzz.updates;
SELECT * FROM google.buzz.updates WHERE user=”ksahnine”.

Ce paradigme d’organisation des données proposée par Yahoo! est problablement l’illustration la plus tangible de la transition - annoncée il y a 10 mois par Tim Berners Lee - d’un Web des Documents vers un Web des Données.

Pour aller plus loin, nous vous invitons à consulter la documentation officielle publiée par Yahoo! :

Abonnez vous !
  • RSS
  • Yahoo
  • Netvibes

Suivez l'auteur sur Twitter !
  • Suivre sur Twitter

A propos de l'auteur

Kadda SAHNINE
Architecte technique Java EE
#JavaEE #Linux #vim addict #OpenSoftware #OpenHardware
Voir le profil de Kadda Sahnine sur LinkedIn

Flux RSS

Rechercher

Administration