Google AJAX Feed APIを使うとJavaScriptだけでRSS/ATOMフィードを読み込むことができますが、標準の機能では「複数のフィードをまとめて」「日付順に(新しい順に)」表示することができないので、jQueryプラグインを作りました。
jquery.googleMultiFeed.js (github)
タイマーを使って逐次処理を行っているので、全フィードの読み込みを待つことなく、読み込まれたものから順に表示されていきます。Google AJAX Feed APIの(というよりJSONPの)制約でフィードを並列的に読み込むことはできないのですが、Google側でキャッシュ&タイムアウト処理が行われているため、多数のフィードを読み込んでもさほどストレスなく表示されるはずです。
jQuery 1.4以上が必要です。jqueryの.jsファイルはscriptタグを使って静的に読み込んでください。どうしても google.load を使う必要がある場合は setOnLoadCallback の中で initGoogleMultiFeed() を呼ぶ必要があります。
<script type="text/javascript" src="http://www.google.com/jsapi?key=API_KEY"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script type="text/javascript" src="jquery.googleMultiFeed.js"></script> <script type="text/javascript"> //google.load('jquery', '1.4'); google.setOnLoadCallback(function(){ //jqueryをgoole.loadで読み込む場合のみ必要 //initGoogleMultiFeed(); $('#feed').googleMultiFeed({ urls: ['http://example.com/rss', 'http://example.net/feed'], numEntries: 5 }); }); </script> ... <div id="feed"></div>
urls パラメータは必須で、読み込みたいフィードのURLを配列として指定します。 numEntries パラメータはオプションで、フィード一つあたりの件数です。
上の例を実行すると http://example.com/rss と http://example.net/feed から5件ずつフィードを読み込んで、新しい順に並び替えた上で、指定したタグの中に次のようなHTMLで表示されます。
<div> <a title="エントリータイトル | フィードタイトル" href="リンク">エントリータイトル [フィードタイトル]</a> <span class="entry-date">日付(YYYY-MM-DD)</span> </div> ...(フィードの件数分繰り返し)...
表示されるHTMLをカスタマイズするには format パラメータでフォーマット用の関数を指定します。例えばエントリータイトルとリンクだけをリスト形式で表示したいなら、次のような関数を指定します。
//第一引数がエントリ、第2引数がフィード //詳細は http://code.google.com/intl/ja/apis/feed/v1/reference.html#JSON function titleOnly(entry, feed) { var link = $('<a />').attr({href: entry.link}).text(entry.title); return $('<li />').append(link); } //ULタグに対して追加する $('ul#feed').googleMultiFeed({ urls: ['http://example.com/rss', 'http://example.net/feed'], format: titleOnly });
その他、loadCompleted パラメータにカスタム関数を指定すると、全てが読み込まれた後に”読み込み中インジケータ”を消す等の処理も行うことができます。有効なパラメータについてはGitHub上のWikiを参照してください。
以下のサイトなどを参考にしました。
こんにちは。
feedに含まれる画像を表示させて画像にエントリーへのリンクを張りたいのと、日付をspanではなく画像のaltとなるようにカスタマイズしたいのですが、どのようにすればよいでしょうか。
素人なりにいろいろいじってはみたもののうまくいかず・・・
ヒントだけでもいいので教えていただけるとうれしいです。
どうぞよろしくお願いいたします。
コメントありがとうございます。
そもそもこのAJAX Feed APIで提供されているJSONには画像が含まれていないケースがある(Google次第)のようなので、まずは
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=取得したいRSSのURL
といったURLにアクセスして、中に画像のURLが含まれているかどうか確認してみてください。
ご希望の動作が作れるかどうかはその構造次第です。
お返事ありがとうございます!
今のところ表示させたいフィードはrss2.0とAtomなのですが、どちらにも画像のURL(imgタグ)は含まれております。
rssの方はdescriptionに、Atomの方はcontentの中にdivがあり、その中にあります。
教えていただいたURLですとどちらも”content”:の後にありました。
取り出した画像に対してサイズの調整やaltの追加を行いたかったのですが、rssの方は他のテキストやURLと一緒くたに入っていて、うまくimgタグのURLだけ取り出す方法がわかりませんでした。。
どうぞよろしくお願いいたします。
contentにimgタグの形で入っているのであれば、正規表現でsrcの中身を取り出すのが一番手っ取り早いのではないかと思います(JavaScriptの知識があることが前提)。
ちゃんとしたテストはしていませんが、だいたい以下のようなコードになるのではないでしょうか。
(WordPressのせいでコード中のaタグに
rel="nofollow"が入っていますが無視してください)お返事ありがとうございます!
何とかうまく読み込むことができました!
1つだけ、
alt:this.formatDate(entry.publishedDate)としたところが
[object Object]となってしまいました。
afterだとちゃんと読み込めるのに、attrの中身だと何故うまくいかないのかさっぱりわからず・・・
今回はそれぞれの日付をそのままの形で出力することにしました。
これを期にきちんとjavascriptを勉強しようと思います。。
ご面倒をおかけし、申し訳ありませんでした。
どうもありがとうございました!
こんにちは。
素晴らしいプラグインの公開に感謝致します。
早速ためさせていただきましたところ、WindowsのIE8ではフィードの日付けが表示されないようでした。
MacやWindowsでもFirefox、Chromeでは問題無く表示されるのですが、何か対策はございますでしょうか?
お忙しいところ恐縮ですが、ご指導いただければ幸いです。
よろしくお願いいたします。
[...] 今回はjQueryのプラグインjquery.googleMultiFeedを使って実現したいと思います。 jquery.googleMultiFeedの設置の仕方はこちらのサイト(開発元)に記載されています。 [...]