网站调用新浪微博内容(python调用API的话)
优采云 发布时间: 2021-10-13 11:11网站调用新浪微博内容(python调用API的话)
匿名用户
1级
2016-07-25 回答
1.下载SDK
如果使用python调用API,必须先去下一个Python SDK,sinaweibopy
连接地址在这里:
可以用pip快速导入,github连接中的wiki也有入门方法,简单易懂。
2.了解新浪微博的授权机制
在调用API之前,我们首先要了解什么是OAuth 2,也就是新浪微博的授权机制。
在这里连接:%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E
3.在新浪微博注册应用
每个人都可以通过新浪微博开发者平台注册自己的应用程序。我在网站上注册了应用程序。注册后,每个应用程序都会被分配一个唯一的app key和app secret,这在上面提到的授权机制中是需要的,相当于每个应用程序的标识。
至此,我们可以尝试编写代码来调用新浪微博的API。
4.简单调用API实例
参考了上面很多资料和文档,写了一个简单的调用流程。
# _*_ 编码:utf-8 _*_
从微博导入APIClient
导入浏览器
APP_KEY = "
APP_SECRET = "
CALLBACK_URL = "
#这里是设置回调地址,必须与“高级信息”中的一致
客户端 = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
url = client.get_authorize_url()
# TODO: 重定向到 url
#打印网址
webbrowser.open_new(url)
# 获取URL参数代码:
代码 = '2fc0b2f5d2985db832fa01fee6bd9316'
客户端 = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(代码)
access_token = r.access_token #新浪返回的token,类似abc123xyz456
expires_in = r.expires_in #token过期的UNIX时间:%E6%97%B6%E9%97%B4
# TODO:您可以在此处保存访问令牌
client.set_access_token(access_token, expires_in)
打印 client.friendships.friends.bilateral.ids.get(uid = 12345678)
通过上面的代码,我实现了调用相互关注API的调用,即找到一个特定id的用户互相关注的人的列表。
其中,APP_KEY 和 APP_SECRET 是上一篇文章中分配给每个应用程序的信息。回调地址可以在各个应用的高级信息中看到。需要自己设置,随便设置即可。
更恶心的是代码获取。当我阅读 sinaweibopy 文档时,我不明白这是什么意思。
webbrowser.open_new(url)
这行代码打开浏览器,跳转到授权的界面,然后观察它所在界面的URL。它将显示类似于以下的格式:
看见?
问号后面有个code=……的东西,就是把等号后面的字符串复制下来赋值给code,但是每次程序运行的时候,code不是一成不变的,也就是说每次。
有这样一个手动获取的过程,我觉得很麻烦。后面会自己研究,实现代码的自动获取。如果哪位大神能告诉我,感激不尽~
好了,拿到正确的code后,就可以完成授权认证了,就可以调用微博的API了。至于如何在Python下调用,我复制sinaweibopy上的介绍:
首先查看新浪微博API文档,例如:
API:状态/用户时间线
请求格式:GET
请求参数:
source: string,OAuth授权方式不需要此参数,其他授权方式为必填参数,值为A*敏*感*词*ey? 的应用程序。
access_token:字符串,OAuth授权方式为必填参数,其他授权方式不需要此参数,OAuth授权后获取。
uid: int64,要查询的用户ID。
screen_name:字符串,待查询用户的昵称。
(省略其他可选参数)
调用方式:将API的“/”改为“.”,根据请求格式是GET还是POST,调用get()或post(),传入关键字参数,但不包括source和access_token参数:
r = client.statuses.user_timeline.get(uid=123456)
对于 r.statuses 中的 st:
打印 st.text
如果是POST调用,示例代码如下:
r = client.statuses.update.post(status=u'test OAuth 2.0发微博')
如果需要上传文件,传入file-like object参数,示例代码如下:
f = open('/Users/michael/test.png','rb')
r = client.statuses.upload.post(status=u'test OAuth 2.0 微博发图片', pic=f)
f.close() # APIClient 不会自动关闭文件,需要手动关闭
请注意:上传的文件必须是类文件对象,而不是str,因为无法区分str是文件还是字段。一个 str 可以通过 StringIO 打包成一个类文件的对象。