Kuberski - 酷伯司机

写在代码边上
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

google提供的几种读取feed的API

Posted on 2010-01-25 14:11  kuber  阅读(8445)  评论(3编辑  收藏  举报

这篇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

Google AJAX Feed API能返回JSON和ATOM格式的数据,甚至可以返回JSON和XML混合格式。返回JSON格式时和Google Reader Javascript 接口不同的是它返回全文feed,而不仅仅是摘要。而ATOM格式甚至支持feed源自定义字段,如上文digg 的RSS中被digg的次数。

可用参数:
num:返回记录数量,最大100