⇤ ← Revision 1 as of 2009-11-29 15:37:27
Size: 4986
Comment: 如何正确使用API登录豆瓣
|
← Revision 2 as of 2009-12-25 07:16:21 ⇥
Size: 4988
Comment: converted to 1.6 markup
|
Deletions are marked like this. | Additions are marked like this. |
Line 4: | Line 4: |
[[TableOfContents]] | <<TableOfContents>> |
Line 6: | Line 6: |
[[Include(ZPyUGnav)]] | <<Include(ZPyUGnav)>> |
Line 18: | Line 18: |
* [http://groups.google.com/group/python-cn/browse_thread/thread/a5abe5788506621c# 【分享】如何正确的登录豆瓣] - python-cn`CPyUG`华蟒用户组(中文Py用户组) | Google Groups | * [[http://groups.google.com/group/python-cn/browse_thread/thread/a5abe5788506621c#|【分享】如何正确的登录豆瓣]] - python-cn`CPyUG`华蟒用户组(中文Py用户组) | Google Groups |
Line 102: | Line 102: |
创建 by -- ZoomQuiet [[[DateTime(2009-11-29T15:37:27Z)]]] | 创建 by -- ZoomQuiet [<<DateTime(2009-11-29T15:37:27Z)>>] |
如何正确使用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
【分享】如何正确的登录豆瓣 - python-cnCPyUG华蟒用户组(中文Py用户组) | Google Groups
概述
前几天我在这里给自己作的一个小东西 “都搞定(http://dougaoding.com)” 打了一个广告,承蒙各位不吝去看一眼,然后又由于我一些写法的问题,导致豆瓣很大方的封掉了我。 那么为了不让更多的兄弟掉到坑里,我在这里写一下如何 “正确的” 使用豆瓣登录。
热身运动
因为所以的原因,豆瓣是使用 OAuth 登录的 (如果不是很熟悉,请访问相关文档,豆瓣的就行 http://www.douban.com/service/apidoc/auth )。 由于咱们都是混 Python 的,我也很自然的选择 Python 作为开发语言。
在 http://www.douban.com/service/apidoc/clients 选择 Python 客户端 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,然后去豆瓣登录。这样就避免了无用的请求。 大家都不要再踩上啦。
PS
希望这个邮件对大家有帮助。
另外:现在都搞定还不能登录,是因为我部署在DH,结果DH那台服务器的DNS暂时歇了,完全无法解析 www.douban.com (还有 www.google.com ),所以就死翘了。我正在和DH的管理员沟通。
反馈
创建 by -- ZoomQuiet [2009-11-29 15:37:27]