##language:zh #pragma section-numbers off ##含有章节索引导航的 ZPyUG 文章通用模板 <> ## 默许导航,请保留 <> = 如何正确使用API登录豆瓣 = {{{ Weiming Yin sender-time Sent at 22:51 (GMT+08:00). Current time there: 11:34 PM. ✆ reply-to python-cn@googlegroups.com to python-cn@googlegroups.com, python-chinese@lists.python.cn date Sun, Nov 29, 2009 at 22:51 }}} * [[http://groups.google.com/group/python-cn/browse_thread/thread/a5abe5788506621c#|【分享】如何正确的登录豆瓣]] - python-cn`CPyUG`华蟒用户组(中文Py用户组) | Google Groups ##startInc == 概述 == 前几天我在这里给自己作的一个小东西 “都搞定(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,然后去豆瓣登录。这样就避免了无用的请求。 大家都不要再踩上啦。 == PS == 希望这个邮件对大家有帮助。 另外:现在都搞定还不能登录,是因为我部署在DH,结果DH那台服务器的DNS暂时歇了,完全无法解析 www.douban.com (还有 www.google.com ),所以就死翘了。我正在和DH的管理员沟通。 ##endInc ---- '''反馈''' 创建 by -- ZoomQuiet [<>]