Carnet Wiki

Mashup.api

Version 3 — Juin 2012 Cerdic

La boucle DATA permet facilement d’aller chercher des données sur le web dans n’importe quel format (ou presque, un format non supporté nativement ne nécessite qu’une fonction de mise en forme pour pouvoir ensuite être lu).

Il devient ainsi facile de présenter et mettre en forme en HTML ces données distantes au sein de n’importe quelle page d’un site.

Cependant, lorsqu’il s’agit ensuite d’agréger de multiples données de sources différentes dans une même liste, cela devient plus compliqué car la boucle DATA ne permet pas de merger des sources.

L’idée est de créer une couche intermédiaire de mashup dans un format pivot. Ce format intermédiaire pourrait ensuite être automatiquement transformé en flux RSS ou ATOM ou en d’autres formats JSON, XML, ou même HTML

Connecteurs Mashup

Un connecteur est un squelette qui lit les données (externes) et les restitue dans le format mashup-data. C’est typiquement, mais pas exclusivement, un squelette qui utilise DATA pour lire la source externe. Le squelette connecteur est rangé dans mashup-connecteurs/

Format mashup-data

L’idée est d’avoir un format simple a écrire dans le squelette de façon a se concentrer sur l’extraction des données, et sans avoir a se battre avec le spécificités techniques du format.
Pour cela YAML parait indiqué. Il est naturellement lisible, et permet de structurer a minima les données sans difficultés, a confirmer a l’usage
Chaque donnée extraite de la source serait ré-exprimée dans les champs suivants (inspirés de RSS) :

  • id : identifiant unique de la donnée
  • title : champ obligatoire, qui titre la donnée
  • date : date de la donnée
  • author : auteur de la donnée
  • source : url source de la donnée (et non du jeu de donnée), si celle ci existe
  • url : lien vers lequel on peut renvoyer a partir de la donnée
  • abstract : introduction/résumé de la donnée pour une présentation courte. Contient du HTML
  • content : contenu complet de la donnée. Contient du HTML
  • documents : sous liste de documents joints décrits par leur url

Les données sont une sous liste du jeu de donnée, lui même décrit par les informations :

  • id : identifiant unique du jeu de données
  • TBD

API de sortie

L’API de sortie est une URL de la forme
/mashup.api/nomduconnecteur.format?arg1=value&...
avec :

  • nomduconnecteur : nom du squelette connecteur rangé dans le dossier mashup-connecteurs/ qui fournit les données dans le format intermédiaire du mashup
  • format : format de sortie des données (rss, atom, json, xml, html, yaml...). Le format de sortie est automatiquement généré a partir du format de mashup
  • arg1=value... : arguments passés au squelette connecteur

Utilisation

Un connecteur peut être spécifique a un jeu de donnée, ou plus générique, utilisant alors les arguments fournis dans l’appel à mashup.api pour déterminer sa source.
Par exemple un connecteur mashup-connecteurs/fromrss.html prendrait un flux RSS fourni par l’argument « url » et le mettrait au format data-mashup. Tout flux RSS pourrait donc être alors reformaté par un appel à l’URL comme /mashup.api/fromrss.json?url=http://www.spip.net/?page=backend qui reformate ici le flux RSS de http://www.spip.net au format JSON

Chaque flux de donnée peut ensuite être rediffusé naturellement sous n’importe quel des formats supporté par le plugin. En particulier, la rediffusion au format RSS permet de syndiquer les différentes sources de données dans SPIP, et de les agréger dans le site sous forme d’article syndiqué.

En seconde étape, le plugin ajouterait également une interface au backoffice pour administrer et syndiquer directement ses sources de données et construire son Mashup sans passer par les sites syndiqués.

Une source de donnée pourrait ainsi être utilisée pour créer automatiquement des articles à partir du format mashup-data avec les options de suivantes configurables source par source :

  • rubrique dans laquelle les articles sont syndiqués
  • création automatique de sous-rubriques en fonction de la date (aaaa ou aaaa/mm ou aaaa/mm/jj)
  • statut de l’article lors de la syndication : publie/prop/prepa

Le remplissage de l’article se ferait par une règle générique de conversion depuis mashup-data vers les champs de l’article, sauf si la donnée fournie par le connecteur contient un item « article » qui explicite le remplissage de l’article (au format html ou raccourcis SPIP)
<cadre >
-article :
- titre :
-
descriptif  :
-
chapo : « ...
...
 »
- descriptif : « ...
 »
- chapo : « ...
 »
...

On peut ainsi construire un site complet de Mashup en y mixant du contenu rédactionnel propre ainsi que du contenu issu de différentes sources externes et hétérogènes.

Le plugin permet aussi de régler notamment le besoin fonctionnel de syndication d’un flux RSS en articles, sans stocker en doublon les données dans des articles syndiqués.