Your Search Results

    Feed content access API

    Firefox 2 と Thunderbird 2 は拡張製作者に RSS と Atom フィードへのアクセスを簡単にする一連のインターフェースを導入します。

    フィードインタフェース

    nsIFeed
    RSS あるいは Atom フィードを表します。
    nsIFeedContainer
    サブクラスされたフィード関連の様々なインタフェースのベースクラス。
    nsIFeedElementBase
    サブクラスされたフィード関連の他の様々なインタフェースのベースクラス。
    nsIFeedEntry
    RSS あるいは Atom フィードの単一のエントリを表します。
    nsIFeedGenerator
    RSS あるいは Atom フィードを生成したソフトウェアを記述します。
    nsIFeedPerson
    人を表します。人の名前とメールアドレス及びホームページアドレスを含んでいます。
    nsIFeedProcessor
    RSS と Atom フィードをパースします。
    nsIFeedProgressListener
    パース処理中にメッセージを受け取るために RSS あるいは Atom フィードをパースしたいプログラムによって実装されます。
    nsIFeedResult
    フィードのパースの結果を表現します。
    nsIFeedResultListener
    パースが完了したときに通知を受け取るために RSS あるいは Atom フィードをパースしたいプログラムによって実装されます。
    nsIFeedTextConstruct
    フィードのテキストを表します: テキストをプレーンテキストあるいは HTML でフェッチするための関数を含んでいます。
    nsIScriptableUnescapeHTML
    HTML 文字列をアンエスケープするためのユーティリティクラス。

    例: Web からフィードを読む

    フィードを読み込みパースすることは本当に簡単です。 フィードを読み込むために 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 ) と呼びます。これはフィードコンテンツを含む新しいウィンドウを開ききます。それはそれぞれのアイテムのタイトル(記事自体へのクリック可能なリンクを持っています)を持っています。

    フィードアクセスインタフェースそれぞれの詳細は、個別のリファレンスページを見てください。

    Document Tags and Contributors

    Contributors to this page: Gomita, teoli, Taken, Mgjbot
    最終更新者: teoli,