上次说到了在 App Engine 上应用的豆瓣的 Python 客户端,但是那个版本(0.1.1)的客户端并没有包括 OAuth 授权认证的功能。如果想要让用户授权,以访问那些受保护的资源,以及添加、修改或删除用户的收藏,需要从豆瓣 Python 客户端的 SVN 中获取最新的开发版本(r22)。据豆瓣的开发人员 hongqn 说,OAuth Client 基本开发完毕,已经进入内测 bug 的阶段。
和 GData Python 客户端一样,开发版本的 OAuth Client 也是用 Python 自带的 httplib 模块来处理 HTTP 请求,所以原始的客户端不能直接在 App Engine 上使用,必须先将 httplib 替换成 urlfetch。现在只需要修改两个函数,但是豆瓣如果能像 GData Python 客户端一样把使用 httplib 的部分封装起来,甚至提供一个使用 urlfetch 的替换模块就更好了,希望豆瓣能采纳这个建议。下面是具体步骤,如果有什么问题,还请留言告知。
1,从 trunk 中 checkout 最新的豆瓣 Python 客户端开发版本
2,修改客户端的 OAuth Client
3,使用 OAuth 授权的过程如下,在 App Engine SDK 提供的控制台(Interactive Console)中运行:
和 GData Python 客户端一样,开发版本的 OAuth Client 也是用 Python 自带的 httplib 模块来处理 HTTP 请求,所以原始的客户端不能直接在 App Engine 上使用,必须先将 httplib 替换成 urlfetch。现在只需要修改两个函数,但是豆瓣如果能像 GData Python 客户端一样把使用 httplib 的部分封装起来,甚至提供一个使用 urlfetch 的替换模块就更好了,希望豆瓣能采纳这个建议。下面是具体步骤,如果有什么问题,还请留言告知。
1,从 trunk 中 checkout 最新的豆瓣 Python 客户端开发版本
$ svn co http://douban-python.googlecode.com/svn/trunk/ douban-python/
2,修改客户端的 OAuth Client
$ cp douban-python/douban ~/doupye/douban -rf
$ cd ~/doupye/douban/
$ gvim client.py
client.py
# import httplib
from google.appengine.api import urlfetch
class OAuthClient:
... ...
def fetch_token(self, oauth_request):
# 被注释掉的是原来使用 httplib 的部分
# connection = httplib.HTTPConnection("%s:%d" % (self.server, 80))
# connection.request('GET', oauth_request.http_url,
# headers=oauth_request.to_header())
# response = connection.getresponse()
# r = response.read()
url = oauth_request.http_url
result = urlfetch.fetch(url, headers=oauth_request.to_header())
r = result.content
... ...
def access_resource(self, method, url, body=None):
... ...
# connection = httplib.HTTPConnection("%s:%d" % (self.server, 80))
# connection.request(method, url, body=body,
# headers=headers)
# return connection.getresponse()
result = urlfetch.fetch(url, payload=body, method=method, headers=headers)
return result.content
3,使用 OAuth 授权的过程如下,在 App Engine SDK 提供的控制台(Interactive Console)中运行:
from douban.client import OAuthClient
client = OAuthClient(key=MY_API_KEY, secret=MY_SECRET)
# 获取未授权的Request Token
key, secret = client.get_request_token()
print key, secret
>>> c14023315549fe3743c17993ff4dfaa5 91af6245103ec3b7
# 获取请求用户授权的页面的 URL
url = client.get_authorization_url(key, secret)
print url
>>> http://www.douban.com/service/auth/authorize?oauth_token=a9e487ac36e0ba9efdba970534a22fce
# 将 URL 复制到浏览器中,用户可以选择同意或者拒绝授权
# 用户完成授权后,使用授权后的 Request Token 换取 Access Token
key, secret = client.get_access_token(key, secret)
if key:
# 使用 Access Token 登录
login = client.login(key, secret)
print login
>>> True
# 访问受保护资源
collections = client.access_resource(method='GET',
url='http://api.douban.com/people/wyt/collection?cat=book')
for entry in collections.entry:
print entry.title.text
>>>
听过 人として軸がぶれている
想读 Antipatterns
想读 新企业的起源与演进
看过 .hack//G.U. Trilogy
想听 ワイルドストロベリー
在听 The Flower Book
在听 E=MC²
听过 越长大越孤单
想读 Investing 101
想读 The Ecology of Commerce
0 条评论:
发表评论
指向此文章的链接:
创建链接
<< 主页