星期五, 四月 27, 2007

Google AJAX Feed API入门

在写这篇blog的之前我犹豫了很久,原因是我自己本身是Google API的菜鸟,并且对AJAX
很不熟悉。怕写出来贻笑大方,这还其次,更担心的是扰乱读者的视听,误导大家。但是最
终还是决定写一下,目的一是自己总结一下并且请高手指教,另外如果万一有人能够在这里
获取到想要的东西,那就最好了。

废话不多说,开始吧。

咳...正题之前还是得罗嗦几句。在此API发布之前,用户想要在web页面上添加feed内容
并不是那么地容易,必须熟知Javascript和XML,有了 Google AJAX Feed API之后这
件事情变得简单了许多。你所做的仅是完成如下的操作:

注册API的key。注册之后你将会看到类似这样的页面:
//这里的key就是你的feed对应的key
<script type="text/javascript" src="http://www.google.com/jsapi?key=YOUR_KEY_HERE"></script>
<script type="text/javascript">
//加载Google API,名称是"feeds",API的版本是1(目前只有1)
google.load("feeds", "1");

//初始化操作
function initialize() {
//目前Google AJAX Feed API唯一的类,通过new新建一个Feed实例,该实例可以加载单一的feed,构造函数的参数是feed的URL
var feed = new google.feeds.Feed(" http://www.digg.com/rss/index.xml");
//设置取回的feed的entry的个数,简单地说是文章的篇数。默认值为4
feed.setNumEntries(12);

//从Google Server上把feed下载下来,并且在下载完成之后调用function(result)这个callbackFunction(回调函数)
feed.load(function(result) {
//如果下载操作成功的话,进行之后的操作
if (!result.error) {
//通过元素id定义一个container变量,注意feed是指后文body中元素的id
var container = document.getElementById("feed");
//开始迭代处理取回的entry, feed.entries的长度是之前设置的整数值,如果之前没有设置则默认为4
for (var i = 0; i < result.feed.entries.length; i++) {
//取得第i个entry实例
var entry = result.feed.entries [i];
//创建一个新的document的元素
var div = document.createElement("div");
//为元素新增一个文本节点(createTextNode),节点的内容是entry的标题
div.appendChild(document.createTextNode(entry.title));
//把元素加入到container中,也就是加入到body中的对应id的元素里
container.appendChild(div);
}
}
});
}
google.setOnLoadCallback(initialize);

</script>
</head>
<body>
<!--这个就是上文说的 getElementById("feed") 的元素 -->
<div id="feed"></div>
</body>

或许现在你已经了解Feed API的大致的加载和工作原理,仔细想来也是很简单对不对?但是只是知道这些并不能不够的,至少来说上文只是把entry的标题列出来而已,而我们想要的肯定不止这些,我们还可以在 API reference文档上了解更多的东西,比如我想把entrys显示成为链接列表(Thanks to Yezi),可以在feed加载之后这么做:
for (var i = 0; i < result.feed.entries.length; i++) {
            var entry =  result.feed.entries[i];
var div = document.createElement("div");
//创建链接元素
var link = document.createElement("a");
link.setAttribute("href",entry.link);
//把文章的时间显示出来
var date = new Date(entry.publishedDate);
var d = date.getDate();
var day = (d < 10) ? '0' + d : d;
var m = date.getMonth() + 1;
var month = (m < 10) ? '0' + m : m;
var yy = date.getYear ();
var year = (yy < 1000) ? yy + 1900 : yy;
link.appendChild(document.createTextNode(entry.title));

div.appendChild(link);
div.appendChild(document.createTextNode ( " -" + year+ "-"+ month + "-" + day));
container.appendChild(div);
}

Google AJAX Feed API加载使用很简单,剩下的job留给Javascript(废话,不然叫AJAX
Feed API),而我只是一个freshman on javascript。大家有什么好的想法,请赐教。

2 评论:

虚飞 说...

可以用作最新评论不?

Unknown 说...

可以的,原理一样。你只需要把 feed的地址改为评论的rss地址就可以了,例如:http://hislog.blogspot.com/feeds/comments/default