Comparaison de révisions

API d'accès au contenu de flux

Changer de révision

Révision 262947 :

Révision 262947 par VincentN le

Révision 230394 :

Révision 230394 par VincentN le

Titre :
API d'accès au contenu de flux
API d'accès au contenu de flux
Identifiant d'URL :
API_d'accès_au_contenu_de_flux
API_d'accès_au_contenu_de_flux
Étiquettes :
Extensions
Contenu :

Révision 262947
Révision 230394
t7    <p>t
8      <a href="fr/Firefox_2">Firefox 2</a> et Thunderbird 2 intro
>duisent de nouvelles interfaces permettant aux développeurs d'ext 
>ensions d'accéder plus facilement aux flux RSS et Atom. 
9    </p>
10    <h2 id="Les_interfaces_de_flux" name="Les_interfaces_de_flux"
>> 
11      Les interfaces de flux
12    </h2>
13    <dl>
14      <dt>
15        <code><a href="fr/NsIFeed">nsIFeed</a></code>
16      </dt>
17      <dd>
18        Représente un flux RSS ou Atom.
19      </dd>
20      <dt>
21        <code><a href="fr/NsIFeedContainer">nsIFeedContainer</a><
>/code> 
22      </dt>
23      <dd>
24        Une classe de base dont dérivent plusieurs des interfaces
> liées aux flux. 
25      </dd>
26      <dt>
27        <code><a href="fr/NsIFeedElementBase">nsIFeedElementBase<
>/a></code> 
28      </dt>
29      <dd>
30        Une classe de base dont dérivent plusieurs des autres int
>erfaces liées aux flux. 
31      </dd>
32      <dt>
33        <code><a href="fr/NsIFeedEntry">nsIFeedEntry</a></code>
34      </dt>
35      <dd>
36        Représente une entrée unique dans un flux RSS ou Atom.
37      </dd>
38      <dt>
39        <code><a href="fr/NsIFeedGenerator">nsIFeedGenerator</a><
>/code> 
40      </dt>
41      <dd>
42        Décrit le logiciel générateur du flux RSS ou Atom.
43      </dd>
44      <dt>
45        <code><a href="fr/NsIFeedPerson">nsIFeedPerson</a></code>
46      </dt>
47      <dd>
48        Représente une personne. Contient le nom de la personne, 
>son adresse de courrier électronique et celle de sa page Web. 
49      </dd>
50      <dt>
51        <code><a href="fr/NsIFeedProcessor">nsIFeedProcessor</a><
>/code> 
52      </dt>
53      <dd>
54        Analyse les flux RSS et Atom.
55      </dd>
56      <dt>
57        <code><a href="fr/NsIFeedProgressListener">nsIFeedProgres
>sListener</a></code> 
58      </dt>
59      <dd>
60        Implémentée par le logiciel désirant analyser le flux RSS
> ou Atom pour recevoir des messages pendant le processus d'analys 
>e. 
61      </dd>
62      <dt>
63        <code><a href="fr/NsIFeedResult">nsIFeedResult</a></code>
64      </dt>
65      <dd>
66        Décrit le résultat de l'analyse d'un flux.
67      </dd>
68      <dt>
69        <code><a href="fr/NsIFeedResultListener">nsIFeedResultLis
>tener</a></code> 
70      </dt>
71      <dd>
72        Implémentée par le logiciel désirant analyser le flux RSS
> ou Atom pour recevoir un message lorsque l'analyse est terminée. 
73      </dd>
74      <dt>
75        <code><a href="fr/NsIFeedTextConstruct">nsIFeedTextConstr
>uct</a></code> 
76      </dt>
77      <dd>
78        Représente les valeurs texte dans un flux&nbsp;; comprend
> les fonctions permettant de charger le texte au format texte ou  
>HTML. 
79      </dd>
80      <dt>
81        <code><a href="fr/NsIScriptableUnescapeHTML">nsIScriptabl
>eUnescapeHTML</a></code> 
82      </dt>
83      <dd>
84        Une classe utilitaire qui décode les chaînes HTML.
85      </dd>
86    </dl>
87    <h2 id="Exemple_:_lecture_d.27un_flux_depuis_le_Web" name="Ex
>emple_:_lecture_d.27un_flux_depuis_le_Web"> 
88      Exemple&nbsp;: lecture d'un flux depuis le Web
89    </h2>
90    <p>
91      Il est assez facile de lire et d'analyser un flux. Utilisez
> <code><a href="fr/XMLHttpRequest">XMLHttpRequest</a></code> pour 
> charger le flux, puis analysez la chaîne reçue à l'aide de <code 
>><a href="fr/NsIFeedProcessor">nsIFeedProcessor</a></code>. 
92    </p>
93    <p>
94      Le chargement et l'envoi du flux vers l'analyseur peuvent s
>e faire à l'aide d'un code semblable à celui-ci&nbsp;: 
95    </p>
96    <pre>
97  fetch: function(feedUrl)
98  {
99    var httpRequest = null;
100    
101    function infoReceived() {
102      var data = httpRequest.responseText;
103      
104      var ioService = Components.classes['@mozilla.org/network/io
>-service;1'] 
105                                         .getService(Components.i
>nterfaces.nsIIOService); 
106      var uri = ioService.newURI(feedUrl, null, null);
107      
108      if (data.length) {
109        var parser = Components.classes["@mozilla.org/feed-proces
>sor;1"] 
110                                        .createInstance(Component
>s.interfaces.nsIFeedProcessor); 
111        var listener = new FeedTestResultListener();
112        try {
113          parser.listener = listener;
114          parser.parseFromString(data, uri);
115        }
116        catch(e) {
117          alert("Erreur de traitement du flux.");
118        }
119      }
120    }
121    
122    httpRequest = new XMLHttpRequest();
123    
124    httpRequest.open("GET", feedUrl, true);
125    try {
126      httpRequest.onload = infoReceived;
127      httpRequest.send(null);
128    }
129    catch(e) {
130      alert(e);
131    }
132  }
133</pre>
134    <p>
135      L'interface <code><a href="fr/NsIFeedProcessor">nsIFeedProc
>essor</a></code> permet d'analyser les données du flux depuis plu 
>sieurs sources possibles&nbsp;; dans ce cas, nous chargeons le do 
>cument dans une chaîne, puis nous analysons celle-ci avec sa méth 
>ode <code>parseFromString()</code>. Vous pouvez également l'analy 
>ser depuis un fichier en utilisant <code>parseFromStream()</code> 
>, ou directement depuis une URL avec <code>parseAsync()</code>. 
136    </p>
137    <p>
138      La traitement à proprement parler du flux analysé est fait 
>par la méthode <code>handleResult()</code> de l'objet <code>FeedT 
>estResultListener</code>. Le code ressemble à cela&nbsp;: 
139    </p>
140    <pre>
141    FeedTestResultListener.prototype = {
142      handleResult: function(result) {
143        var feed = result.doc;
144        
145        feed.QueryInterface(Components.interfaces.nsIFeed);
146    
147        // Ouvre une nouvelle fenêtre
148    
149        var win = window.open("", "FeedTest_Window");
150        var doc = win.document;
151    
152        doc.open();
153        
154        // Écrit l'en-tête HTML et le titre de la page
155        
156        doc.write("&lt;html&gt;&lt;head&gt;&lt;title&gt;Flux : " 
>+ feed.title.text + "&lt;/title&gt;&lt;/head&gt;&lt;body&gt;"); 
157        doc.write("&lt;h1&gt;" + feed.title.text + "&lt;/h1&gt;&l
>t;p&gt;"); 
158          
159        var itemArray = feed.items;
160        var numItems = itemArray.length;
161        
162        // Écrit les informations sur l'article
163        
164        if (!numItems) {
165          doc.write("&lt;i&gt;Pas de nouvelles, bonnes nouvelles 
>!&lt;/i&gt;"); 
166        }
167        else {
168          var i;
169          var theEntry;
170          var theUrl;
171          var info;
172          
173          for (i=0; i&lt;numItems; i++) {
174            theEntry = itemArray.queryElementAt(i, Components.int
>erfaces.nsIFeedEntry); 
175            
176            if (theEntry) {
177              theUrl = 
178              doc.write('&lt;b&gt;&lt;a href="' + theEntry.link.r
>esolve("") + '"&gt;' + theEntry.title.text + '&lt;/a&gt;&lt;/b&gt 
>;&lt;br&gt;'); 
179              if (theEntry.summary) {
180                info = theEntry.summary.text + "&lt;p&gt;&lt;hr&g
>t;&lt;p&gt;"; 
181              }
182              else {
183                info = theEntry.content.text + "&lt;p&gt;&lt;hr&g
>t;&lt;p&gt;"; 
184              }
185              doc.write("&lt;blockquote&gt;" + info);
186              doc.write("&lt;/blockquote&gt;&lt;p&gt;");
187            }
188          }
189        }
190        
191        // Ferme le document ; c'est terminé !
192        
193        doc.write("&lt;/body&gt;&lt;/html&gt;");
194        doc.close();
195      }
196    }
197</pre>
198    <p>
199      La fonction <code>handleResult()</code> reçoit comme argume
>nt un <code><a href="fr/NsIFeedResult">nsIFeedResult</a></code>,  
>qui décrit un flux&nbsp;; sa propriété <code>doc</code> est un <c 
>ode><a href="fr/NsIFeed">nsIFeed</a></code> qui contient toutes l 
>es données du flux. 
200    </p>
201    <p>
202      Pour obtenir le titre du flux, cherchez la propriété <code>
>feed.title</code>. Le titre est de type <code><a href="fr/NsIFeed 
>TextConstruct">nsIFeedTextConstruct</a></code> qui peut présenter 
> du texte dans différents formats&nbsp;; on utilise sa propriété  
><code>text</code> pour extraire le titre du flux encodé en HTML.  
>Nous pourrions également utiliser la méthode <code>plainText()</c 
>ode> pour obtenir une copie du titre formatée en texte simple. 
203    </p>
204    <p>
205      On peut parcourir la liste des éléments du flux en utilisan
>t <code>feed.items</code> de type <code><a href="fr/NsIArray">nsI 
>Array</a></code>. Cette liste contient les objects <code><a href= 
>"fr/NsIFeedEntry">nsIFeedEntry</a></code> qui décrivent chaque él 
>ément du flux. 
206    </p>
207    <p>
208      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 li 
>en est obtenue en utilisant la méthode <code>resolve()</code>. 
209    </p>
210    <p>
211      Pour initialiser l'extraction du flux, on appelle la foncti
>on <code>fetch(<i>url</i>)</code>. Ceci ouvre une nouvelle fenêtr 
>e affichant le contenu du flux, où les titres de chaque élément s 
>ont des liens redirigeant vers les articles correspondants. 
212    </p>
213    <p>
214      Pour plus d'informations sur chaque interface d'accès au fl
>ux, consultez leurs pages de références respectives. 
215    </p>{{ languages( { "en": "en/Feed_content_access_API", "es":
> "es/API_de_acceso_a_canales", "ja": "ja/Feed_content_access_API" 
>, "pl": "pl/API_dost\u0119pu_do_danych_z_kana\u0142\u00f3w" } ) } 
>} 

Retour à l'historique