--- title: Feed content access API slug: orphaned/Feed_content_access_API tags: - Add-ons - Extensions original_slug: Feed_content_access_API ---
Firefox 2 と Thunderbird 2 は拡張製作者に RSS と Atom フィードへのアクセスを簡単にする一連のインターフェースを導入します。
nsIFeed
nsIFeedContainer
nsIFeedElementBase
nsIFeedEntry
nsIFeedGenerator
nsIFeedPerson
nsIFeedProcessor
nsIFeedProgressListener
nsIFeedResult
nsIFeedResultListener
nsIFeedTextConstruct
nsIScriptableUnescapeHTML
フィードを読み込みパースすることは本当に簡単です。 フィードを読み込むために XMLHttpRequest
を使い、次にフィードをパースするためにその文字列を nsIFeedProcessor
に渡します。
フィードを読み込み、パーサにそれを渡すことはこのようなコードを使って行うことができます:
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("フィードのパースでエラーが発生しました。"); } } } httpRequest = new XMLHttpRequest(); httpRequest.open("GET", feedUrl, true); try { httpRequest.onload = infoReceived; httpRequest.send(null); } catch(e) { alert(e); } }
nsIFeedProcessor
インタフェースであなたはいくつかの可能なソースからフィードデータをパースできます; この場合、ドキュメントを文字列に読み込み、次に parseFromString()
メソッドを使ってパースしています。しかし parseFromStream()
を使ってファイルから、parseAsync()
を使って直接 URL からパースすることもできます。
パースされたフィードの実際の処理は FeedTestResultListener
オブジェクトの handleResult()
を使って行われます。そのコードはこのようになります:
FeedTestResultListener.prototype = { handleResult: function(result) { var feed = result.doc; feed.QueryInterface(Components.interfaces.nsIFeed); // 新しいウィンドウを開く var win = window.open("", "FeedTest_Window"); var doc = win.document.wrappedJSObject; doc.open(); // HTML ヘッダとページタイトルを書き込む doc.write("<html><head><title>Feed: " + feed.title.text + "</title></head><body>"); doc.write("<h1>" + feed.title.text + "</h1><p>"); var itemArray = feed.items; var numItems = itemArray.length; // 記事の情報を書き込む if (!numItems) { doc.write("<i>便りのないのは良い便り!</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>"); } } } // ドキュメントを閉じる; 完了! doc.write("</body></html>"); doc.close(); } }
handleResult()
関数はフィードを表現している nsIFeedResult
を引数として受け取ります。doc
プロパティは全てのフィードデータを含んだ nsIFeed
です。
フィードのタイトルを得るためには、feed.title
プロパティを見てください。タイトルは様々なフォーマットのテキストを表す nsIFeedTextConstruct
です。HTML エンコードされたテキストとしてフィードのタイトルを得るために、その text
プロパティを取得します。代りに plainText()
メソッドを使うことで、プレーンテキストに変換されたタイトルのコピーを得ることができます。
次に、feed.items
nsIArray
を見ることでフィードのアイテムの配列をスキャンしています。この配列はそれぞれのフィードアイテムを表す nsIFeedEntry
オブジェクトを含んでいます。
それぞれのアイテムの title と link、summary そして content プロパティをみることでドキュメントのコンテンツを作り上げています。 link の完全なURL は link の resolve()
メソッドを使うことで得ることができます。
フィードのフェッチを初期化するには、単に fetch(
url
)
と呼びます。これはフィードコンテンツを含む新しいウィンドウを開ききます。それはそれぞれのアイテムのタイトル(記事自体へのクリック可能なリンクを持っています)を持っています。
フィードアクセスインタフェースそれぞれの詳細は、個別のリファレンスページを見てください。