CWYAlpha

Just another WordPress.com site

Thought this was cool: 使用Google Reader API

leave a comment »


Google Reader是非常强大的RSS阅读器,更强大的是他提供了很多API,方便开发第三方应用。最近尝试了调用Google Reader API,发现网上资料不是很全,尤其是中文的,就再总结一下。
谷歌是会自动爬所有收录的RSS,存储这个RSS以往的所有条目,他网页上说是一小时爬一次,可能实际爬的频率还和RSS更新频率有关。

首先是最基本的,如何获得某个RSS。由于谷歌有所有历史条目记录,所以可以获得到所有历史条目。这个API是不需要登录的。

https://www.google.com/reader/atom/feed/http://diaorui.net/%3Ffeed=rss2?n=10

以上API获取本博客的最新10个条目,网址前面部分是谷歌API: https://www.google.com/reader/atom/feed/ 中间 http://diaorui.net/%3Ffeed=rss2 是本博客的RSS地址,这地址里面的%3F是?的转义字符,因为?会和网址参数混淆。最后?n=10的意思就是要10个最新条目。由于博客中不止10个条目,所以这个文件中会有一个标签类似于 <gr:continuation>CKSqssKs3qwC</gr:continuation> 中间的这个CKSqssKs3qwC就是用来继续获取文章用的,可以用作翻页。如果访问

https://www.google.com/reader/atom/feed/http://diaorui.net/%3Ffeed=rss2?n=10&c=CKSqssKs3qwC

就可以获得接下来的10个最新条目。

好了,其余API都是需要登录的,登录方法为POST数据给https://www.google.com/accounts/ClientLogin
POST的内容包括
accountType 这个就写 HOSTED_OR_GOOGLE
Email 这个就写gmail帐号
Passwd 这个就写gmail密码
source 这个是你的应用的名字,随便写一个
如果处理正确,会返回三行字符串,分别是SID,LSID,Auth的值,SID和Auth后面会用到,可以存起来,只要登录这一次就行了。后面一直用SID和Auth就可以了。
以后的所有访问都需要在HTTP Header里面加上 Authorization:GoogleLogin auth=XXXXXXXX 和 Cookie:SID=YYYYYYYYY
其中Auth和SID的取值自己替换一下。

能用的API很多,我没有都用到,只说明一下我用过的。
如果你是要对Google Reader做写操作的话,比如添加某个RSS源,那就必须先访问

http://www.google.com/reader/api/0/token

他会返回给你一个字符串,然后马上进行写操作,同时需要将这个字符串作为参数T的取值POST过去。
比如添加一个RSS源,就访问

http://www.google.com/reader/api/0/subscription/quickadd

需要POST参数T和参数quickadd,后者是要添加的RSS地址。会返回一个json告诉你添加结果。实际做的时候常常会不稳定挂掉。貌似写操作就会偶尔这样,读都很稳定。不知道是不是因为墙。

然后说几个读操作

http://www.google.com/reader/atom/user/-/state/com.google/reading-list

这个地址用来获得所有条目列表,按照时间排序。他同样接受n和c参数,分别用来指定条目数量上限和翻页。

http://www.google.com/reader/atom/user/-/state/com.google/read

这个地址获得已读条目

然后就是我自己搞出来的搜索接口,Google Reader提供搜索服务,可以搜索自己订阅的所有条目,但是我没发现哪里有写接口,于是自己分析网络通信搞出来了。

https://www.google.com/reader/api/0/search/items/ids?q=XXXXXXX&num=100&output=json

访问这个地址,参数q是搜索关键词,num是条目数量上限,如果超过1000,谷歌会认为是1000
输出是一个json格式的数据,里面有很多数字,正数负数都有,可以发现他们都是64位有符号整数。转换成16进制并对比后可以发现,这是条目的唯一ID,如果你之前调用列出所有最新条目的API,可以看到每个条目都有一个这样的标签
<id gr:original-id=”http://diaorui.net/?p=346″>tag:google.com,2005:reader/item/826bfbfac9de8f49</id>
这个标签里面就能找到一个64位整数的16进制表示。这个实际上是Google Reader分配给每个条目的唯一ID,而搜索结果就对应着这个了。

最后给两个地址,能找到很多API说明,但是没有讲搜索的
http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI
http://code.google.com/p/r2-release/wiki/GoogleReaderApi

from Dora Blog: http://diaorui.net/?p=353

Written by cwyalpha

八月 4, 2012 在 10:24 上午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: