以前試してみたGoogle AJAX Feed APIですが、今回は複数のRSSをひとまとめにして表示させてみます。Google AJAX Feed API への登録については、今回は省略。ブログごとに異なるclass名を設定したいけど、よくわからず。とりあえずclass名にブログのタイトルを入れるという暴挙。
--- demo用コード ---
<script type="text/javascript" src="http://www.google.com/jsapi?key=取得したAPIキー"></script>
<script type="text/javascript">
google.load("feeds", "1");
var entryArray = new Array();
var entryNum = 0;
function initialize() {
feedAdd("http://otani-webs.com/blog/feed/", 0);
feedAdd("http://blog.livedoor.jp/picnika/index.rdf", 1);
}
//取得するフィードの追加(rssUrl:フィードのURL , boolNum:追加するフィードURLが最後の場合「1」を入れる)
function feedAdd(rssUrl, boolNum) {
var feed = new google.feeds.Feed(rssUrl);//フィードの取得
feed.setNumEntries(10); //ブログ1つあたりの取得するフィード数
feed.load(function(result) {
if (!result.error) {
for (var i = 0; i < result.feed.entries.length; i++) {
entryArray[entryNum] = result.feed.entries[i];
var date = new Date(result.feed.entries[i].publishedDate);
entryArray[entryNum].sortDate = ( date.getFullYear()*10000 ) + ( (date.getMonth() + 1)*100 ) + date.getDate(); //ソート用(日付)を連想配列に代入
entryArray[entryNum].blogName = result.feed.title; //ブログ名を連想配列に代入
entryNum+=1;
}
}
if(boolNum==1){
feedOutput("feed", 10); //フィードの出力
}
});
}
//フィードの出力(feedId:出力するオブジェクトのID , listNum:出力するリスト数。「0」の場合全て)
function feedOutput(feedId, listNum){
var useFeed = "";
var container = document.getElementById(feedId);//表示部分を選択
entryArray = asort(entryArray, "sortDate");//日付でソート
if(listNum==0){
listNum = entryNum;
}
for (var i = 0; i < listNum; i++) {
var entry = entryArray[i];
var date = new Date(entry.publishedDate);//日付の表示変更
useFeed += '<li class="' + entry.blogName + '">' + date.getFullYear() + '年' + (date.getMonth() + 1 ) + '月' + date.getDate() + '日 <a href="' + entry.link + '" target="_blank">' + entry.title + '</a>(' + entry.blogName + ')</li>';//HTMLで書き出し
}
container.innerHTML = '<ul>' + useFeed + '</ul>';
}
function asort(myArray, key){
return myArray.sort ( function (b1, b2) { return b1[key] > b2[key] ? -1 : 1; } );//降順
}
google.setOnLoadCallback(initialize);