※追記:2015年12月2日より Google Feed API がエラーを返すようになり、ここで紹介したコードが使えなくなりました。
代替案として PHP でプログラムを組む方法を紹介します。
PHP 使用版:コチラです。
以下、Google Feed API を使って、外部サイトのRSSを取得して「新着記事」として表示させる方法を紹介していますが、現在は使えません!
RSSとは?
RSS とは、主にウェブサイトの更新情報を公開するために使われているXMLベースの文書です。
ブログのタイトルやURL、カテゴリー、更新日付、テキストの抜粋など、各記事の情報が記述されています。
例えば、このサイトの RSS の URL はコチラ(https://on-ze.com/feed)になりますが、[RSS リーダー]等のアプリでこの URL を登録すると、最新記事が公開されたとき、即時にお知らせしてくれるので、毎回サイトに訪れる必要がなくなり大変便利です。
今回は、この RSS の仕組みを利用して、記事の一覧を取得・表示させます。
ということを何度かやりました。ですが、その度に過去の案件を見返すことが多いので、備忘録として記事にしておこうと思います。
コードの記述方法
基本的には、HTML の <head>〜</head> 内にて、まず Google API の本体を読み込み、続いてカスタマイズした JavaScript のコードを記述することになります。
<script src="http://www.google.com/jsapi"></script> <script> google.load("feeds", "1"); function initialize() { // フィードの取得 var feed = new google.feeds.Feed("https://on-ze.com/feed"); // エントリの表示数の設定 feed.setNumEntries(3); // 関数の定義 feed.load(function(result) { if (!result.error) { // 読み込みが成功したときの処理 var container = document.getElementById("feed"); var htmlstr = "<ul>"; for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var contentSnippet = entry.contentSnippet; text = contentSnippet.substr(0, 110) + '<span>…Read More</span>'; // 日付の取得 var pdate = new Date(entry.publishedDate); //Dateクラス var pyear = pdate.getFullYear(); //年 var pmonth = pdate.getMonth() + 1; //月 var pday = pdate.getDate(); //日 // 日付を2桁表示に変更 if (pyear < 2000) pyear += 1900; if (pmonth < 10) {pmonth = "" + pmonth;} if (pday < 10) {pday = "" + pday;} var date = pyear + "." + pmonth + "." + pday + " "; // html生成 htmlstr += '<li><a href="' + entry.link + '">'; htmlstr += '<span class="date">' + date + '</span>'; htmlstr += '<span class="category">' + entry.categories[0] + '</span>'; htmlstr += '<span class="title">' + entry.title + '</span>'; htmlstr += '<span class="text">' + text + '</span></a></li>'; } container.innerHTML = htmlstr; } else { // 読み込みが失敗したときの処理 alert(result.error.code + ":" + result.error.message); } }); } google.setOnLoadCallback(initialize); </script>
任意のRSSフィードのURLに書き換えることを忘れないようにしてください。
取得した情報を吐き出すには、<body>〜</body> 内の任意の箇所に以下のコードを記述します。
<div id="feed"></div>
また imgsrc = entry.content.match(/src="(.*?)"/igm);
などのコードを加えて画像データを取得・表示させることも可能です。
新しい記事が反映されないときは?
ブログには新しい記事があるはずなのに、書きだされた新着記事は古いままというケースも稀にあります。
これは Google がキャッシュしているデータを返してくるのが原因。
その際は、フィードのURLを読み込む箇所で、以下のように修正してください。
var d = new Date(); var dq = d.getMonth()+""+d.getDate()+""+d.getHours(); var feed = new google.feeds.Feed("RSSのURL"+"?"+dq);
これにより、RSS の URL の末尾に日付情報を加え、キャッシュを回避できるようになります。
実装したテストサイトは以下。
ぜひ参考にしてみてください。
補足:
PHP 使用ヴァージョンはコチラです。