网站调用新浪微博内容(新浪微博调用API的话,折腾一天终于小有收获,总结如下)
优采云 发布时间: 2021-12-07 15:03网站调用新浪微博内容(新浪微博调用API的话,折腾一天终于小有收获,总结如下)
这几天为了发表论文,需要采集新浪微博的用户关系信息,形成复杂网络的*敏*感*词*。好在微博提供了API供我们调用。折腾了一天,终于有点收获了。总结如下:
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实例
参考了上面很多资料和文档,写了一个简单的调用流程。
# _*_ coding: utf-8 _*_
from weibo import APIClient
import webbrowser
APP_KEY = ''
APP_SECRET = ''
CALLBACK_URL = ''
#这个是设置回调地址,必须与那个”高级信息“里的一致
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
url = client.get_authorize_url()
# TODO: redirect to url
#print url
webbrowser.open_new(url)
# 获取URL参数code:
code = '2fc0b2f5d2985db832fa01fee6bd9316'
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(code)
access_token = r.access_token # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4
# TODO: 在此可保存access token
client.set_access_token(access_token, expires_in)
print client.friendships.friends.bilateral.ids.get(uid = 12345678)
通过上面的代码,我实现了调用相互关注API的调用,即找到一个特定id的用户互相关注的人的列表。
其中,APP_KEY 和 APP_SECRET 是上一篇文章中分配给每个应用程序的信息。回调地址可以在各个应用的高级信息中看到。需要自己设置,随便设置即可。
更恶心的是代码获取。当我阅读 sinaweibopy 文档时,我不明白这是什么意思。如上代码所示,获取到的URL为授权URL。我们通过了
webbrowser.open_new(url)
这行代码打开浏览器,跳转到授权界面,然后观察它所在界面的URL。它将显示类似于以下的格式:
http://apps.weibo.com/sayarywei?code=505e3efcdad1f421d147db7276aabdbe
看见?问号后面有个code=……的东西,就复制等号后面的字符串,赋值给code,但是每次程序运行的时候,code都不是静态的,也就是说必须有每次都是这样的手册,每次拿到过程都觉得很麻烦,所以以后自己研究一下,实现代码自动获取。如果哪位大神能告诉我,感激不尽~
好了,拿到正确的code后,就可以完成授权认证了,就可以调用微博的API了。至于如何在Python下调用,我复制sinaweibopy上的介绍:
首先查看新浪微博API文档,例如:
API:状态/用户时间线
请求格式:GET
请求参数:
source: string,OAuth授权方式不需要此参数,其他授权方式为必填参数,值为A*敏*感*词*ey? 的应用程序。
access_token: string,OAuth授权方式为必填参数,其他授权方式不需要此参数,OAuth授权后获取。
uid: int64,要查询的用户ID。
screen_name:字符串,待查询用户的昵称。
(其他可选参数省略)
调用方式:将API的“/”改为“.”,根据请求格式是GET还是POST,调用get()或post(),传入关键字参数,但不包括source和access_token参数:
r = client.statuses.user_timeline.get(uid=123456)
for st in r.statuses:
print st.text
如果是POST调用,示例代码如下:
r = client.statuses.update.post(status=u'测试OAuth 2.0发微博')
如果需要上传文件,传入file-like object参数,示例代码如下:
f = open('/Users/michael/test.png', 'rb')
r = client.statuses.upload.post(status=u'测试OAuth 2.0带图片发微博', pic=f)
f.close() # APIClient不会自动关闭文件,需要手动关闭
请注意:上传的文件必须是类文件对象,而不是str,因为无法区分str是文件还是字段。一个 str 可以通过 StringIO 打包成类文件对象。
转载于: