学习使用豆瓣API

忙了几个月,终于闲了一阵,一开始还能耐下心来看几页书,后来就闲到无(dan)聊(teng)的程度了。终于突然想膜(tou)拜(kui)一下豆瓣好友丰富的业余生活,看看他们都在看什么书或电影。可一本一本、一部一部看过去实在是不符合我浮躁的心态,于是我决定搞一个爬虫爬一下。
开始参考了一下这个python程序,用request获取网页,然后通过BeautifulSoup分析网页并获取相关内容。结果刚准备分析,就发现网页内容已经从正常的页面数据变为了需要验证是否是机器人的页面,其中几个大字“请输入上图中的字母”几个大字赫然在目。我只是一个程序员,又不是黑客,面对这种图像识别的专业内容,只能望洋兴叹,在惊呼豆瓣程序员的高水平之余,也不得不考虑使用正规渠道获取豆瓣信息——豆瓣API。

豆瓣API的介绍十分简洁,以至于我这种初级水平的程序员压根看不懂。在网上搜索也没能找到十分合适的。经过我的实践,分享一下可以让小白们看懂并实践的步骤

1. 获取API_KEY和API_SECRECT

http://developers.douban.com/apikey/apply创建你的个人应用,需要登录个人账户。
创建个人应用
注意:如果应用是基于一个公网网站,则需要输入网站的地址,并且后续步骤可能不太一样,可以参考这里的实现。这里我只是做个人研究,并无公网网站,就随便填写了localhost的地址。

然后跳转到下图的页面
这里写图片描述
这样就拿到了需要的参数API_KEY和API_SECRECT

2. 添加测试用户

在此时,我们还需要添加测试用户来允许测试
添加测试用户

3. 安装SDK

从豆瓣官方的提供中,我选择Python。也可以通过如下指令进行安装

pip install douban-client

4. 运行例程

douban-client开发者的说明上的认证说明如下:

from douban_client import DoubanClient

API_KEY = 'your api key'
API_SECRET = 'your api secret'

# 在 OAuth 2.0 中,
# 获取权限需要指定相应的 scope,请注意!!
# scope 权限可以在申请应用的 "API 权限" 查看。

SCOPE = 'douban_basic_common,shuo_basic_r,shuo_basic_w'

client = DoubanClient(API_KEY, API_SECRET, your_redirect_uri, SCOPE)

# 以下方式 2 选 1:
# 1. 引导用户授权
print 'Go to the following link in your browser:' 
print client.authorize_url
code = raw_input('Enter the verification code:')
client.auth_with_code(code)

# 2. 如果有之前有 token,则可以
# client.auth_with_token(token)

# Token Code
token_code = client.token_code
print token_code

# Refresh Token
# 请注意:`refresh_token_code` 值仅可在授权完成时获取(即在 `auth_with_code`, `auth_with_password` 之后)
# refresh_token_code = client.refresh_token_code
# client.refresh_token(refresh_token_code) # refresh token

看似很简单的例程,有一点需要注意的是在

print client.authorize_url

之后,需要手动输入code。关于这个code我迷惑了好久。

5. 获取code

在浏览器中输入打印出来的url
登陆授权

然后用步骤2中添加的测试账户登陆
这里写图片描述

虽然此图显示的是Not Found,不过不要在意这些细节。我们需要关注的是红圈中的code=xxxxxx,=号后面的这串字符就是需要输入的code。在程序继续往下运行时在命令行输入这串字符,获得最后一行中打印出来的token_code,记录下这个token_code,以便后续使用。

6. 测试授权结果

在获得token_code之后,可以不需要通过例程中的方法1获取code,而可以用方法2进行身份授权。

from douban_client import DoubanClient

API_KEY = 'your api key'
API_SECRET = 'your api secret'

# 在 OAuth 2.0 中,
# 获取权限需要指定相应的 scope,请注意!!
# scope 权限可以在申请应用的 "API 权限" 查看。

SCOPE = 'douban_basic_common,shuo_basic_r,shuo_basic_w'

client = DoubanClient(API_KEY, API_SECRET, your_redirect_uri, SCOPE)

# 以下方式 2 选 1:
# 1. 引导用户授权
# print 'Go to the following link in your browser:' 
# print client.authorize_url
# code = raw_input('Enter the verification code:')
# client.auth_with_code(code)

# 2. 如果有之前有 token,则可以
token = 'your token code'
client.auth_with_token(token)

# Token Code
# token_code = client.token_code
# print token_code

# Refresh Token
# 请注意:`refresh_token_code` 值仅可在授权完成时获取(即在 `auth_with_code`, `auth_with_password` 之后)
# refresh_token_code = client.refresh_token_code
# client.refresh_token(refresh_token_code) # refresh token

my_content = client.user.me
print my_content

在此例子中,只需要把你刚才获得的token_code填写到

token = ‘your token code’

然后观察最后的输出结果。
如果授权成功,就会显示如下结果:
{u’loc_id’: u’108231’, u’name’: u’\u7cbe\u7075’, u’created’: ….}
如果授权失败,则会有
* * * DoubanAPIError: * * * 400 (Bad Request)* * * {u’msg’: u’invalid_access_token: cf95c1c8b02953796ec1455a107bfa6c’, u’code’: 103, u’request’: u’GET /v2/user/~me’}

注意返回的code,其代表错误含义可以从这里中查询。

7. API权限

在应用申请中,有一项API权限是需要开发者注意的。这里规定了API使用的功能范围。如果超出范围,可能如下错误:
* * * DoubanAPIError: * * * 400 (Bad Request)* * * {u’msg’: u’invalid_credencial1’, u’code’: 108, u’request’: u’GET /v2/book/3210843’}

这时,需要注意代码中的SCOPE,应该是在应用API访问权限之内,并且token_code的生成也对应了你所想要的权限范围。
API访问权限
如果想要重新修改程序的访问权限,首先要修改应用的API访问权限,然后在代码中把需要的选项加入SCOPE,重新操作步骤4,获得新的token_code,再运行接下来的步骤即可。

至于API的使用,可以参见douban-client的源码和新版API说明

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页