用Python开发可用于iPhone的Google Reader API

开发 前端 后端
Google Reader是我最喜欢的web服务,可惜在iPhone上没有一个我理想中的客户端,所以只好自己动手丰衣足食了。

而开发的第一步自然就是搞定Google Reader API,可惜Google一直没有放出官方文档。所幸的是前人已经通过反向工程探寻出了相关信息(GoogleReaderAPI、Using the Google Reader API和GReader-Cocoa等),所以不用自己去一一摸索了。

不过文档有点老了,这期间Google也稍微改了一些东西,所以还需要稍作修正。

由于现在手头上没有Mac,所以就不用Objective-C,而拿Python来演示。这样代码量也会少很多,逻辑显得更加清晰。

在访问之前需要证明你的身份,所以先去https://www.google.com/accounts/ClientLogin获取登录凭证。

此处需要POST 3个字段:service为'reader',Email为Google账号,Passwd为密码。此外还可以附加source字段用于标明你的客户端,其中网页版是'scroll',iOS网页版是'mobilescroll',你可以随意改成其他字符串。

from urllib import urlencode  
from urllib2 import urlopen, Request  
 
LOGIN_URL = 'https://www.google.com/accounts/ClientLogin' 
EMAIL = '你的邮箱' 
PASSWORD = '你的密码' 
 
request = Request(LOGIN_URL, urlencode({  
    'service''reader',  
    'Email': EMAIL,  
    'Passwd': PASSWORD,  
    'source''mobilescroll' 
}))  
 
f = urlopen(request) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

然后会拿到这样一串字符串,一共3行:

SID=...  
LSID=...  
Auth=... 
  • 1.
  • 2.
  • 3.

这里我们需要SID和Auth,它们应该是不会过期的,除非退出登录:

lines = f.read().split()  
sid = lines[0]  
auth = lines[2][5:] 
  • 1.
  • 2.
  • 3.

拿到这2个字段后就可以使用Google Reader API了。具体方法就是访问API地址(见GoogleReaderAPI文档),然后把SID作为cookie,Auth作为Authorization。

例如获取订阅列表:

headers = {'Authorization''GoogleLogin auth=' + auth, 'Cookie': sid}  
request = Request('https://www.google.com/reader/api/0/subscription/list?output=json', headers=headers)  
f = urlopen(request)  
print f.read() 
  • 1.
  • 2.
  • 3.
  • 4.

就会拿到如下的信息:

{"subscriptions":
[{"id":"feed/供稿地址","title":"供稿名","categories":
[{"id":"user/Google Reader用户ID/label/分类名","label":"分类名"}],
"sortid":"不知道啥玩意","firstitemmsec":"第一个条目的时间戳","htmlUrl":"供稿的网站地址"},...(其他供稿的信息)]} 
  • 1.
  • 2.
  • 3.
  • 4.

不过如果要修改的话(一般是POST请求),还需要一个token参数。这个token与SID和Auth不同,它很容易过期。因此如果失效了,需要再次请求一个。

请求的地址是http[s]://www.google.com/reader/api/0/token,它可以附带2个可选的GET参数:ck是时间戳,client是客户端名称。

request = Request('https://www.google.com/reader/api/0/token', headers=headers)  
f = urlopen(request)  
token = f.read() 
  • 1.
  • 2.
  • 3.

拿到token后就可以进行订阅等操作了,例如订阅本站:

request = Request('https://www.google.com/reader/api/0/subscription/quickadd?output=json', urlencode({  
    'quickadd''http://www.51cto.com',  
    'T': token  
}), headers=headers)  
f = urlopen(request)  
print f.read() 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

会拿到这样的结果:

{"query":"http://www.keakon.net/feed","numResults":1,"streamId":"feed/http://www.51cto.com"
  • 1.

再去看看你的Google Reader,应该就订阅好本站了。

原文:http://simple-is-better.com/news/565

【编辑推荐】

  1. 分享两个Python web框架:Django&Tornado
  2. Python高手是如何练成的
  3. Python入门之你必须了解的实用技巧
  4. 如何在NetBeans 7.0安装Python插件
  5. 使用NetBeans IDE开发Python应用程序详解
责任编辑:陈贻新 来源: keakon的涂鸦馆
相关推荐

2009-01-04 09:16:11

google Read开发APIGoogle API

2009-08-17 08:37:31

2013-06-27 14:12:06

Google Read

2011-11-01 09:14:10

Google ReadGoogle+

2022-03-25 09:21:09

GoogleAndroid操作系统

2013-07-03 13:37:37

Google

2009-07-03 09:12:59

Java JSP

2021-04-13 10:32:50

ARVR苹果

2009-07-29 16:44:45

AndroidSimpleGoogle

2023-03-03 09:09:55

2011-08-19 13:34:33

iPhone应用ABAddressBo

2012-07-06 13:16:37

Google Go

2015-05-04 13:21:56

DartAndroid

2015-04-22 09:36:27

JAVA代码生成器

2022-07-29 09:25:13

NFT可视化探索投资者

2011-08-08 15:05:50

iPhone 网站

2013-12-08 20:32:32

WaxLua

2021-03-26 11:02:20

Python自然语言API

2013-04-17 10:06:55

Google GlasMirror API

2021-05-20 09:55:40

ChromeGoogle Read离线阅读
点赞
收藏

51CTO技术栈公众号