这篇blog 介绍了通过Google Reader API使用n参数读取feed历史条目的方法。使用google 提供的API访问feed除了可以访问到历史条目外,还让google 处理各式各样的feed格式(Atom 1.0,Atom 0.3,RSS 2.0,RSS 1.0,RSS 0.94,RSS 0.93,RSS 0.92,RSS 0.91,RSS 0.9),统一返回一种格式(ATOM或JSON),为开发中在程序中解析feed提供便捷。本文总结我在开发FeedzShare 的过程中找到的的几种读取feed的Google API,其中有些来自于Google 官方文档,有些来自于对网上开发者google web 应用的hacking。
1。Google Reader ATOM API访问http://www.google.com/reader/atom/feed/<feed url>, 读到ATOM格式的最近20条item。
可选参数:n:返回多少条记录。http://www.google.com/reader/atom/feed/http://blogs.msdn.com/vcblog/rss.xml?n=100 返回最近100条;
r: 按时间排序,缺省是从最近的开始(r=d),可以改成从最老的开始(r=o),好像最多回溯一个月;
ot:只读取某个时间点以后的item,精确到秒。需要把时间转换成Unix Timestamp. http://www.google.com/reader/atom/feed/http://blogs.msdn.com/vcblog/rss.xml?ot=1250120710 就只返回2009年8月12日6:45:10pm 以后的记录;
c:分页读取记录。用n=99999的方式读取feed所有记录虽然可行,但一次性返回大量数据既消耗服务器资源,严重影响scalability,同时客户端调用时也容易超时。因此Google 提供了cursor方式分页读取。关于cursor方式分页,这篇blog"用Twitter的cursor方式进行Web数据分页"有很好的介绍. 读取http://www.google.com/reader/atom/feed/http://blogs.msdn.com/vcblog/rss.xml?n=10 时,在返回的ATOM XML的头可以找到这样的代码:
<gr:continuation xmlns:gr="http://www.google.com/schemas/reader/atom/">CLXq-OrG05sC</gr:continuation>
类似CLXq-OrG05sC这样的字符串就是读取下一页用的参数。要读取下一页10条记录,使用这样的url访问:http://www.google.com/reader/atom/feed/http://blogs.msdn.com/vcblog/rss.xml?n=10&c=CLXq-OrG05sC
返回的XML中又能找到新的continuation参数,这样反复下去,直到读完所有记录。注意continuation是google 服务器随机产生,你看到的字符串和我这里写的是不一样的。
除了只读接口外,google 还有写入api。完整的ATOM API可以在这里找到,作者还开发了一套Python Library。但是需要注意的是google reader从未正式发布此api,因此接口随时可能改变甚至取消。
2。Google Reader Javascript 接口
除了返回ATOM 格式外,Google Reader其实还能返回JSON格式的数据. 如果是希望在页面中显示feed,不需要调用复杂的XML API,直接从Javascript中操作JSON数据就行了。
要读取JSON数据,需要访问这个url:http://www.google.com/reader/public/javascript/feed/<feed url>。
上面介绍的各项参数在Javascript接口中都能使用。但是Javascript接口与ATOM接口的区别在于不返回feed 条目的全文,只返回google rader 服务器处理过的摘要(summary字段)。在有些不需要显示全文的场景(只显示列表)利用这一特点可以大大减少返回的数据量,无论是网络传输和解析时间都会快很多。
3。Google AJAX Feed 接口
Google AJAX Feed API 是Google 提供的一套javascript 类库,自动处理跨域调用和feed格式,主要目的是简化web开发者读取,操作以及显示feed的过程。同时它也提供了一个RESTful的API,供非Javascript客户端调用。以下例子来自官方文档,要读取Digg的feed源(http://www.digg.com/rss/index.xml),只需访问url:
http://ajax.googleapis.com/ajax/services/feed/load?q=http%3A%2F%2Fwww.digg.com%2Frss%2Findex.xml&v=1.0