--- title: API d'accès au contenu de flux slug: Feed_content_access_API tags: - Extensions translation_of: Mozilla/Tech/Feed_content_access_API ---
Firefox 2 et Thunderbird 2 introduisent de nouvelles interfaces permettant aux développeurs d'extensions d'accéder plus facilement aux flux RSS et Atom.
nsIFeed
nsIFeedContainer
nsIFeedElementBase
nsIFeedEntry
nsIFeedGenerator
nsIFeedPerson
nsIFeedProcessor
nsIFeedProgressListener
nsIFeedResult
nsIFeedResultListener
nsIFeedTextConstruct
nsIScriptableUnescapeHTML
Il est assez facile de lire et d'analyser un flux. Utilisez XMLHttpRequest
pour charger le flux, puis analysez la chaîne reçue à l'aide de nsIFeedProcessor
.
Le chargement et l'envoi du flux vers l'analyseur peuvent se faire à l'aide d'un code semblable à celui-ci :
fetch: function(feedUrl) { var httpRequest = null; function infoReceived() { var data = httpRequest.responseText; var ioService = Components.classes['@mozilla.org/network/io-service;1'] .getService(Components.interfaces.nsIIOService); var uri = ioService.newURI(feedUrl, null, null); if (data.length) { var parser = Components.classes["@mozilla.org/feed-processor;1"] .createInstance(Components.interfaces.nsIFeedProcessor); var listener = new FeedTestResultListener(); try { parser.listener = listener; parser.parseFromString(data, uri); } catch(e) { alert("Erreur de traitement du flux."); } } } httpRequest = new XMLHttpRequest(); httpRequest.open("GET", feedUrl, true); try { httpRequest.onload = infoReceived; httpRequest.send(null); } catch(e) { alert(e); } }
L'interface nsIFeedProcessor
permet d'analyser les données du flux depuis plusieurs sources possibles ; dans ce cas, nous chargeons le document dans une chaîne, puis nous analysons celle-ci avec sa méthode parseFromString()
. Vous pouvez également l'analyser depuis un fichier en utilisant parseFromStream()
, ou directement depuis une URL avec parseAsync()
.
La traitement à proprement parler du flux analysé est fait par la méthode handleResult()
de l'objet FeedTestResultListener
. Le code ressemble à cela :
FeedTestResultListener.prototype = { handleResult: function(result) { var feed = result.doc; feed.QueryInterface(Components.interfaces.nsIFeed); // Ouvre une nouvelle fenêtre var win = window.open("", "FeedTest_Window"); var doc = win.document; doc.open(); // Écrit l'en-tête HTML et le titre de la page doc.write("<html><head><title>Flux : " + feed.title.text + "</title></head><body>"); doc.write("<h1>" + feed.title.text + "</h1><p>"); var itemArray = feed.items; var numItems = itemArray.length; // Écrit les informations sur l'article if (!numItems) { doc.write("<i>Pas de nouvelles, bonnes nouvelles !</i>"); } else { var i; var theEntry; var theUrl; var info; for (i=0; i<numItems; i++) { theEntry = itemArray.queryElementAt(i, Components.interfaces.nsIFeedEntry); if (theEntry) { theUrl = doc.write('<b><a href="' + theEntry.link.resolve("") + '">' + theEntry.title.text + '</a></b><br>'); if (theEntry.summary) { info = theEntry.summary.text + "<p><hr><p>"; } else { info = theEntry.content.text + "<p><hr><p>"; } doc.write("<blockquote>" + info); doc.write("</blockquote><p>"); } } } // Ferme le document ; c'est terminé ! doc.write("</body></html>"); doc.close(); } }
La fonction handleResult()
reçoit comme argument un nsIFeedResult
, qui décrit un flux ; sa propriété doc
est un nsIFeed
qui contient toutes les données du flux.
Pour obtenir le titre du flux, cherchez la propriété feed.title
. Le titre est de type nsIFeedTextConstruct
qui peut présenter du texte dans différents formats ; on utilise sa propriété text
pour extraire le titre du flux encodé en HTML. Nous pourrions également utiliser la méthode plainText()
pour obtenir une copie du titre formatée en texte simple.
On peut parcourir la liste des éléments du flux en utilisant feed.items
de type nsIArray
. Cette liste contient les objects nsIFeedEntry
qui décrivent chaque élément du flux.
On construit le document en récupérant les propriétés titre, lien, résumé et contenu de chaque élément. L'URL complète du lien est obtenue en utilisant la méthode resolve()
.
Pour initialiser l'extraction du flux, on appelle la fonction fetch(url)
. Ceci ouvre une nouvelle fenêtre affichant le contenu du flux, où les titres de chaque élément sont des liens redirigeant vers les articles correspondants.
Pour plus d'informations sur chaque interface d'accès au flux, consultez leurs pages de références respectives.