那么为了不让更多的兄弟掉到坑里,我在这里写一下如何 “正确的” 使用豆瓣登录。
热身运动
由于咱们都是混 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咯
坑
我必须的特意把坑写出来,免得各位同仁都死在这。
当你使用 APIKEY 访问豆瓣的时候,豆瓣的限制是 40次/分钟,按道理这个对于一个小小的网站来说,足够了。但是由于写法的不好,可能就把自己玩死。
都搞定的首页就需要登录,我图省事,就给把登录到豆瓣的 auth_url 放在首页了。
导致的结果嘛,只要是有对首页的访问,不管是人的还是各路机器人(Google啊,我用的site7x24啊),只要来一次,都搞定都去豆瓣申请一次request_token,就浪费了一次访问。如果涅,兄弟们抬爱,都来看一眼,都搞定就被自己搞定了。
所以我改成了,当用户点击“登录”的时候,先去自己的一个页面,然后根据上面说的,生成 auth_url,然后去豆瓣登录。这样就避免了无用的请求。
大家都不要再踩上啦。
希望这个邮件对大家有帮助。
--
Weiming Yin