如何正确使用API登录豆瓣

Weiming Yin <[email protected]>
sender-time     Sent at 22:51 (GMT+08:00). Current time there: 11:34 PM. ✆
reply-to        [email protected]
to      [email protected],
[email protected]
date    Sun, Nov 29, 2009 at 22:51

概述

前几天我在这里给自己作的一个小东西 “都搞定(http://dougaoding.com)” 打了一个广告,承蒙各位不吝去看一眼,然后又由于我一些写法的问题,导致豆瓣很大方的封掉了我。 那么为了不让更多的兄弟掉到坑里,我在这里写一下如何 “正确的” 使用豆瓣登录。

热身运动

因为所以的原因,豆瓣是使用 OAuth 登录的 (如果不是很熟悉,请访问相关文档,豆瓣的就行 http://www.douban.com/service/apidoc/auth )。 由于咱们都是混 Python 的,我也很自然的选择 Python 作为开发语言。

登录豆瓣

使用提供的类 DoubanService ,获取 request_token 和 request_secret。 通过 request_token 和 request_secret 获得登录豆瓣 OAuth 的地址

douban_svc = DoubanService(DOUBAN_API_KEY, DOUBAN_API_SECRET)
req_token, req_secret = douban_svc.client.get_request_token()
auth_url = douban_svc.client.get_authorization_url(req_token,req_secret, CALLBACK_URL)

在浏览器中输入这个地址,你就会看到豆瓣的认证页面,这时候你申请的项目的名称什么的就能显示出来了。 当你通过认证后,你的程序可以去豆瓣换取 access_token 了。同时登录者的 douban_uid 也可以获得。 这里需要注意一个地方,你需要使用当时获得认证地址的 request_token 和 request_secret,所以你需要它们。

douban_svc = DoubanService(DOUBAN_API_KEY, DOUBAN_API_SECRET)
access_token, access_secret, douban_uid = \
                     douban_svc.client.get_access_token(req_token, req_secret)

好,到这里,我们可以真正的登录豆瓣啦,

douban_svc.client.login(access_token,access_secret)

自动登录

很多时候,我们反复的登录是很烦的一个事情,好在我们可以偷偷的替登录过的用户自动的登录豆瓣。 在上面,我们已经获得了

request_token, request_secret, access_token, access_secret

利用这些,我们当然可以登录豆瓣啦,只要使用 access_token, access_secret 就可以

douban_svc.client.login(access_token,access_secret)

至于你如何把正确的人和正确的 access_token, access_secret 对应起来,那就各位看官自己决定啦,我是使用 cookie 搞的。

获取用户信息

登录之后,我们就可以使用豆瓣提供的文档进行信息的获取了,当然 douban-python 也封装了不少。 我使用 GetAuthorizedUID 这个方法,使用

douban_svc.GetAuthorizedUID('/people/@me')

要记得,返回的结果是 atom 的格式,需要搞一搞~~

获取其他豆瓣信息

老兄,这个你就自己搞吧,我实在不知道你想要什么,看API咯

我必须的特意把坑写出来,免得各位同仁都死在这。

都搞定的首页就需要登录,我图省事,就给把登录到豆瓣的 auth_url 放在首页了。

所以我改成了,当用户点击“登录”的时候,先去自己的一个页面,然后根据上面说的,生成 auth_url,然后去豆瓣登录。这样就避免了无用的请求。 大家都不要再踩上啦。

PS

希望这个邮件对大家有帮助。

另外:现在都搞定还不能登录,是因为我部署在DH,结果DH那台服务器的DNS暂时歇了,完全无法解析 www.douban.com (还有 www.google.com ),所以就死翘了。我正在和DH的管理员沟通。


反馈

创建 by -- ZoomQuiet [2009-11-29 15:37:27]

MiscItems/2009-11-29 (last edited 2009-12-25 07:16:21 by localhost)