RSS

tutorial de programmation
en processing

Bridget Riley
   

Intro

Ce cours donne un aperçu comment récuperer des feed RSS dans un sketch processing, et comment lire et afficher ses données.

 

Ressource

Newsmap de Marcos Weskamp et Dan Albritton, 2004

Decorative Newsfeeds de Craighead et Thomson, 2004 Vidéo

Voyage - RSS Feed Reader de Andy Biggs

XML tutorial

What Is RSS? - RSS Primer: One Page Quick Introduction to RSS

 

XML

Les fichier RSS sont formaté par le standard XML. XML (Extensible Markup Language) est un Langage de balisage (markup language) pour des douments qui contient des informations structurées. Ils sont composé esentiellement par des éléments, attributs et valeurs:

  1. <guid isPermaLink="false"> http://www.lemonde.fr </guid>
      

guid est un element Le tag d'overture et de fermeture represent le debut et fin de l'élément.
isPermaLink est un attribute et false le valeur de l'attribut; à priori tous les attributes nécessitent une valeur, par contre il n'est pâs obligatoire qu'un élement a un attribut.
http://www.lemonde.fr est le contenu de l'élement.

 

RSS

Le standard RSS représente un moyen simple d'être tenu informé des nouveaux contenus d'un site web, sans avoir à le consulter.

Le format « RSS » (traduisez « Really Simple Syndication ») permet ainsi de décrire de façon synthétique le contenu d'un site web, dans un fichier au format XML, afin de permettre son exploitation par des tiers. Le fichier RSS, appelé également flux RSS, canal RSS ou fil RSS ou encore feed RSS, contenant les informations à diffuser, est maintenu à jour afin de constamment contenir les dernières informations à publier.

Structure et Terminologie

Un fichier RSS contient des informations statiques et des unités dynamiques (item). Ces unités sont souvent des news ou des entrées d'un blog, mais d'une manière générale, ça peut être n'importe quel contenu web.Dans chaque item se trouve plusieurs éléments, comme le titre, un description, un date, un url et autres.

<item>
<title>Google : la Chine rassure...</title>
<link>http://www.lemonde.fr/asie-pacifique/6.html#xtor=RSS-651865</link>
<description>Google a aucun impact sur ses relations commerciales et économiques avec les Etats-Unis..;</description>
<pubDate>Fri, 15 Jan 2010 06:57:16 GMT</pubDate>
<guid isPermaLink="false">/www.lemonde.fr/asie/html#xtor=RSS-651865</guid>
</item>

Dependant du feed spécique, les éléments peuvent varier. Il peut y avoir des images, des flux vidéos, ou autres médias, tous les données peuvent être decrit dans un feed RSS. Si le lecteur ou agregateur (reader) de RSS ne peut pas lires les éléments, il les ignores simplement.

Les élements sont structuré d'une manière hierarchique. Dans l'exemple au dessus, le <item> élement à 5 sous-élements (title, link, description, pubDate, guide). On appelle ces élements les enfants (children). On appelle l'élément supérieur d'un enfant parent et les élements du même nivéau sibling (frère et soeur).

 

Où trouver des feed RSS

Afin de récuperer des informations d'un ficher RSS, il faut trouver les pages adquats sur Internet. Ce sont la plus part du temps des fichiers avec une extention en xml ou rss. Il y a plusieurs portails de reférencement de flux RSS; sur la page suivant vous trouverez plusieurs :

Prenez par exemple le rss network et choissisez un page de votre intérêt,le site vous proposera plusieurs pages. A droit vous allez trouver l'icone http://www.rss-network.com/images/rssbutton.gif. Quand vous cliquer la dessus, vous tombera, selon le browser, sur un page vide, ou bien il affichera la structure du fichier xml. Ce qui nous interesse actuellement, c'est l'adresse, qu'on va exploiter dans Processing.

 

XML library dans processing

Depuis la version 1.0, processing a intégré un bibliothèque permettant de parser un fichier xml dans un sketch.

La librarie est un class, nommé XMLElement. Son constructeur exige l'adresse du fichier xml. Il peut être un fichier local dans le dossier data, ou bien une adresse url. Le premier argument indique à qui la class se réfère, normallement, c'est simplement 'this'

XMLElement xml;
void setup(){
xml = new XMLElement (this, http://www.site.com/fichier.xml
}

Ces prinicpaux methodes sont

Processing référence
La liste complet des methodes

Lire la structure dans Processing

Dans un premier étape, nous allons imprimer dans la fenêtre de contrôle le contenu d'un page.

On fera cela avec un code très simple:

import processing.xml.*;
XMLElement xml;

void setup() {
size(200, 200);
xml = new XMLElement(this, "http://www.lemonde.fr/rss/sequence/0,2-651865,1-0,0.xml");
XMLElement kid = xml.getChild(0);
println(kid);
}

fenetre processing

Maintenant, nous pouvons explorer la structure de notre fichier et choisir les données qui nous intéressent.

Afficher les données

En analysant la structure, nous trouvons les différents élements qui composent les 'news' du monde. Le tout est inséré dans une 'flux global' appélé 'channel' et chaque nouvelle se trouve à l'interieur d'un enfant du channel, appélé 'item'. Pour un simple sketch, nous allons simplement afficher le titre et l'image de chaque item. Le titre se trouve dans l'élement 'title' et l'image dans 'enclosure. Le cheminement complet est alors channel/item/enclosure pour les images.

Le reste du code est simple

import processing.xml.*;
XMLElement xml;

int count, count1=0;// les compteurs pour switcher l'image
int freq = 80;
int nombreItems;

PImage img[];
PFont font;
String title[];

void setup() {
size(200, 200);
textAlign(CENTER);
xml = new XMLElement(this, "http://www.lemonde.fr/rss/sequence/0,2-651865,1-0,0.xml");
font = createFont("Arial",12);
textFont(font);

[] imageXMLElements = xml.getChildren("channel/item/enclosure");
XMLElement[] titleXMLElements = xml.getChildren("channel/item/title");
nombreItems = imageXMLElements.length;
img = new PImage[nombreItems];
title = new String[nombreItems];
for (int i = 0; i < imageXMLElements.length; i++) {
String url = imageXMLElements[i].getStringAttribute("url");
title[i] = titleXMLElements[i].getContent();
img[i] = loadImage(url);
}
}

void draw(){
background(0);
count1++;
nextItem();
}

void nextItem(){
if (count1>freq){
count1=0;
count++;
delay(2000);
if (count>nombreItems-1) count=0;
}
imageMode(CENTER);
image(img[count], width/2 , height / 3 );
text(title[count], 10, 110, 170,80);
}


Exercice

Cherchez un feed RSS et trouve une visualisation appropriée.