aboutsummaryrefslogtreecommitdiff
path: root/files/pl/api_dostępu_do_danych_z_kanałów/index.html
blob: 6bcc84bba1b3bd36289716b8fbe0f44e0fe49c09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
---
title: API dostępu do danych z kanałów
slug: API_dostępu_do_danych_z_kanałów
tags:
  - Dodatki
  - Rozszerzenia
  - Wszystkie_kategorie
---
<p> </p>
<p><a href="pl/Firefox_2">Firefox 2</a> oraz Thunderbird 2 wprowadzają serię interfejsów, które pozwalają programistom rozszerzeń w łatwy sposób uzyskiwać dostęp do kanałów RSS i Atom.</p>
<h2 id="Interfejsy_kana.C5.82.C3.B3w" name="Interfejsy_kana.C5.82.C3.B3w">Interfejsy kanałów</h2>
<dl>
 <dt>
  <code><a href="pl/NsIFeed">nsIFeed</a></code></dt>
 <dd>
  Reprezentuje kanał RSS lub Atom.</dd>
 <dt>
  <code><a href="pl/NsIFeedContainer">nsIFeedContainer</a></code></dt>
 <dd>
  Bazowa klasa, z której dziedziczy kilka interfejsów związanych z kanałami.</dd>
 <dt>
  <code><a href="pl/NsIFeedElementBase">nsIFeedElementBase</a></code></dt>
 <dd>
  Bazowa klasa, z której dziedziczy kilka interfejsów związanych z kanałami.</dd>
 <dt>
  <code><a href="pl/NsIFeedEntry">nsIFeedEntry</a></code></dt>
 <dd>
  Reprezentuje pojedynczy wpis kanału RSS lub Atom.</dd>
 <dt>
  <code><a href="pl/NsIFeedGenerator">nsIFeedGenerator</a></code></dt>
 <dd>
  Opisuje software, za pomocą którego wygenerowano kanał RSS lub Atom.</dd>
 <dt>
  <code><a href="pl/NsIFeedPerson">nsIFeedPerson</a></code></dt>
 <dd>
  Reprezentuje osobę. Zawiera imię oraz nazwisko osoby, jej adres email oraz adres jej strony domowej.</dd>
 <dt>
  <code><a href="pl/NsIFeedProcessor">nsIFeedProcessor</a></code></dt>
 <dd>
  Parsuje kanały RSS oraz Atom.</dd>
 <dt>
  <code><a href="pl/NsIFeedProgressListener">nsIFeedProgressListener</a></code></dt>
 <dd>
  Zaimplementowane przez program chcący parsować kanały RSS lub Atom w celu otrzymywania wiadomości podczas procesu parsowania.</dd>
 <dt>
  <code><a href="pl/NsIFeedResult">nsIFeedResult</a></code></dt>
 <dd>
  Opisuje rezultat parsowania kanału.</dd>
 <dt>
  <code><a href="pl/NsIFeedResultListener">nsIFeedResultListener</a></code></dt>
 <dd>
  Zaimplementowane przez program chcący parsować kanały RSS lub Atom w celu otrzymywania potwierdzenia ukończenia procesu prasowania.</dd>
 <dt>
  <code><a href="pl/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code></dt>
 <dd>
  Reprezentuje tekst w wątku; zawiera funkcje pozwalające na pobranie danego tekstu wyłącznie jako tekst lub HTML.</dd>
 <dt>
  <code><a href="pl/NsIScriptableUnescapeHTML">nsIScriptableUnescapeHTML</a></code></dt>
 <dd>
  Klasa użytkowa przywracająca ciągi znaków HTML.</dd>
</dl>
<h2 id="Przyk.C5.82ad:_Czytanie_kana.C5.82u_z_sieci" name="Przyk.C5.82ad:_Czytanie_kana.C5.82u_z_sieci">Przykład: Czytanie kanału z sieci</h2>
<p>Bardzo łatwo można odczytać oraz parsować kanał. Użyj <code><a href="pl/XMLHttpRequest">XMLHttpRequest</a></code> by pobrać kanał, potem przekaż jego łańcuch do <code><a href="pl/NsIFeedProcessor">nsIFeedProcessor</a></code> w celu przetworzenia.</p>
<p>Pobieranie kanału oraz wysyłanie go do parsowania może zostać zrobione za pomocą kodu podobnego do przedstawionego poniżej:</p>
<pre>  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("Error parsing feed.");
        }
      }
    }

    httpRequest = new XMLHttpRequest();

    httpRequest.open("GET", feedUrl, true);
    try {
      httpRequest.onload = infoReceived;
      httpRequest.send(null);
    }
    catch(e) {
      alert(e);
    }
  }
</pre>
<p>Interfejs <code><a href="pl/NsIFeedProcessor">nsIFeedProcessor</a></code> pozwala na parsowanie danych kanału z kilku możliwych źródeł; w tym przypadku ładujemy dokument do łańcucha, a następnie parsujemy go za pomocą metody <code>parseFromString()</code>. Można też parsować go z pliku za pomocą <code>parseFromStream()</code>, lub też bezpośrednio z adresu za pomocą <code>parseAsync()</code>.</p>
<p>Właściwe parsowanie kanału dokonywane jest za pomocą metody nazywanej <code>handleResult()</code> na obiekcie <code>FeedTestResultListener</code>. Kod wygląda następująco:</p>
<pre>    FeedTestResultListener.prototype = {
      handleResult: function(result) {
        var feed = result.doc;

        feed.QueryInterface(Components.interfaces.nsIFeed);

        // Otwórz nowe okno

        var win = window.open("", "FeedTest_Window");
        var doc = win.document;

        doc.open();

        // Zapisz nagłówek HTML oraz tytuł strony

        doc.write("&lt;html&gt;&lt;head&gt;&lt;title&gt;Feed: " + feed.title.text + "&lt;/title&gt;&lt;/head&gt;&lt;body&gt;");
        doc.write("&lt;h1&gt;" + feed.title.text + "&lt;/h1&gt;&lt;p&gt;");

        var itemArray = feed.items;
        var numItems = itemArray.length;

        // Zapisz informacje zawartą w artykule

        if (!numItems) {
          doc.write("&lt;i&gt;No news is good news!&lt;/i&gt;");
        }
        else {
          var i;
          var theEntry;
          var theUrl;
          var info;

          for (i=0; i&lt;numItems; i++) {
            theEntry = itemArray.queryElementAt(i, Components.interfaces.nsIFeedEntry);

            if (theEntry) {
              theUrl =
              doc.write('&lt;b&gt;&lt;a href="' + theEntry.link.resolve("") + '"&gt;' + theEntry.title.text + '&lt;/a&gt;&lt;/b&gt;&lt;br&gt;');
              if (theEntry.summary) {
                info = theEntry.summary.text + "&lt;p&gt;&lt;hr&gt;&lt;p&gt;";
              }
              else {
                info = theEntry.content.text + "&lt;p&gt;&lt;hr&gt;&lt;p&gt;";
              }
              doc.write("&lt;blockquote&gt;" + info);
              doc.write("&lt;/blockquote&gt;&lt;p&gt;");
            }
          }
        }

        // Zamknij dokument

        doc.write("&lt;/body&gt;&lt;/html&gt;");
        doc.close();
      }
    }
</pre>
<p>Funkcja <code>handleResult()</code> otrzymuje jako argumenty obiekt typu <code><a href="pl/NsIFeedResult">nsIFeedResult</a></code> opisujący kanał, oraz <code>doc</code> typu <code><a href="pl/NsIFeed">nsIFeed</a></code> zawierające wszystkie dane kanału.</p>
<p>W celu uzyskania tytułu kanału należy spojrzeć na właściwość <code>feed.title</code>. Tytuł jest <code><a href="pl/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code> reprezentujący tekst zapisany w rożnych formatach; używając właściwości <code>text</code> uzyskamy tytuł kanału w formacie HTML. Można również użyć metody <code>plainText()</code> by uzyskać kopię jako zwykły tekst.</p>
<p>Następnie można przejrzeć uszeregowanie kanału za pomocą <code>feed.items</code> <code><a href="pl/NsIArray">nsIArray</a></code>. Uszeregowanie to zawiera obiekty <code><a href="pl/NsIFeedEntry">nsIFeedEntry</a></code> opisujące każdy składnik kanału.</p>
<p>Tworzenie zawartości dokumentu następuje poprzez pobranie tytułu, linka, podsumowania oraz zawartości własności poszczególnych składników. Pełny adres linka może zostać pobrany za pomocą metody linka <code>resolve()</code>.</p>
<p>W celu rozpoczęcia pobierania kanału wywołujemy po prostu <code>fetch(
 <i>
  url</i>
 )</code>. Otwierane jest wtedy nowe okno zawierające składniki kanału, których linki pozwalają na bezpośrednie odczytanie artykułu.</p>
<p>Szczegóły dostępu do poszczególnych interfejsów dostępowych kanału można znaleźć klikając w poniższe odnośniki.</p>
<p>{{ languages( { "es": "es/API_de_acceso_a_canales", "fr": "fr/Feed_content_access_API", "ja": "ja/Feed_content_access_API", "en": "en/Feed_content_access_API" } ) }}</p>