10-12-09

複数の外部RSSを「Google AJAX Feed API」で読み込む

demo

PozuPadのフィード

memo

作業内容

以前試してみた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);

参考記事

otani-webs.com / PozuPad / Copyright © 2010 LabPad All Rights Reserved.