【分享】如何正确的登录豆瓣

177 views
Skip to first unread message

Weiming Yin

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

热身运动

因为所以的原因,豆瓣是使用 OAuth 登录的 (如果不是很熟悉,请访问相关文档,豆瓣的就行 http://www.douban.com/service/apidoc/auth )。
由于咱们都是混 Python 的,我也很自然的选择 Python 作为开发语言。
http://www.douban.com/service/apidoc/clients 选择 Python 客户端 douban-python,地址为 http://code.google.com/p/douban-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咯


我必须的特意把坑写出来,免得各位同仁都死在这。
当你使用 APIKEY 访问豆瓣的时候,豆瓣的限制是 40次/分钟,按道理这个对于一个小小的网站来说,足够了。但是由于写法的不好,可能就把自己玩死。

都搞定的首页就需要登录,我图省事,就给把登录到豆瓣的 auth_url 放在首页了。
导致的结果嘛,只要是有对首页的访问,不管是人的还是各路机器人(Google啊,我用的site7x24啊),只要来一次,都搞定都去豆瓣申请一次request_token,就浪费了一次访问。如果涅,兄弟们抬爱,都来看一眼,都搞定就被自己搞定了。

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

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

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

--
Weiming Yin

Li Zhu

unread,
Nov 29, 2009, 10:00:06 AM11/29/09
to pyth...@googlegroups.com
谢谢分享 :-)

2009/11/29 Weiming Yin <yinwe...@gmail.com>:

--
-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=**=-=**=-=**=-=*=-=*=-=*=-=*=-=*=-
Li Zhu (朱黎), grad. student
State Key Laboratory of Superhard Materials, Jilin University, China
Email: zhulip...@gmail.com | zhu...@mails.jlu.edu.cn

Zoom.Quiet

unread,
Nov 29, 2009, 10:37:56 AM11/29/09
to pyth...@googlegroups.com
2009/11/29 Li Zhu <zhulip...@gmail.com>:
> 谢谢分享 :-)
>
收录!
http://wiki.woodpecker.org.cn/moin/MiscItems/2009-11-29

靠谱哪!

--
http://zoomquiet.org 人生苦短? Pythonic!
usage 7-zip to replace WinRAR/WinZip; You can get the truely Freedom 4 software.

Reply all
Reply to author
Forward
0 new messages