RSStutorial de programmation |
|
Ce cours donne un aperçu comment récuperer des feed RSS dans un sketch processing, et comment lire et afficher ses données.
Newsmap de Marcos Weskamp et Dan Albritton, 2004
Decorative Newsfeeds de Craighead et Thomson, 2004 Vidéo
Voyage - RSS Feed Reader de Andy Biggs
What Is RSS? - RSS Primer: One Page Quick Introduction to RSS
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:
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.
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.
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>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).
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 . 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.
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
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);
}
Maintenant, nous pouvons explorer la structure de notre fichier et choisir les données qui nous intéressent.
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);
}