网站调用新浪微博内容(使用python调用微博API的授权机制是什么?如何使用)
优采云 发布时间: 2022-01-08 05:05网站调用新浪微博内容(使用python调用微博API的授权机制是什么?如何使用)
做没有稻草的砖。
数据采集是数据分析的前提。很多网站会通过API接口向第三方开放网站的部分数据。新浪微博也不例外。您可以查看微博 API 列表。
本文将对如何使用微博API进行初步介绍,从而获得基本的概念和理解,方便后面深入了解。
step1:使用python调用微博API,首先下载python SDK,即sinweibopy
sinaweibopy 是一个支持微博 API 的特定于 python 的 OAuth 2 客户端。无依赖,100%纯Py,单一文件,代码简洁,运行可靠。也是新浪微博的Python SDK。
可以直接通过 pip 安装:
pip install sinaweibopy
什么是 SDK?SDK的英文全称是software development kit(软件开发工具包)。简而言之,它是一个代码库,其中收录用于开发应用程序的可重用代码。当您为应用程序编写代码时,您不需要像在实际屏幕上绘制文本那样重复代码。使用 SDK 可以帮助您做到这一点。总而言之,所有这些代码库和一些其他工具构成了我们所说的 SDK。
step2:了解新浪微博的授权机制,即OAuth 2
API 调用需要用户认证(用户授权)。目前OAuth2.0主要用于微博开放平台上的用户身份认证。
OAuth2.0协议的授权流程请参考如下流程图,其中Client指的是第三方应用(即我们自己在第三步创建的应用),Resource Owner指的是用户,授权服务器是我们的授权服务器,资源服务器是API服务器。
从流程图可以看出,为了调用API server内容,需要将access token告诉API server;访问令牌由新浪(授权服务器)在用户授权后返回给我们创建的应用程序;为了完成用户授权,我们的应用首先要给用户授权页面(授权请求)。
微博API授权机制(来自微博开放平台开发文档)
用户授权浏览器后,URL 如下所示:
我们需要将代码后面的字符串提交给新浪授权服务器来获取访问令牌。相当于告诉新浪服务器我们的应用已经被用户授权,现在可以访问用户的数据了,所以授权服务器给了我们一个访问令牌,我们就可以从API服务器获取微博数据了。
了解了上面的机制之后,我们就知道如何编写代码来调用API了。
step3:在微博开放平台上创建自己的应用
现在让我们创建自己的应用程序。创建应用程序的目的是获取应用程序密钥和应用程序机密。
我们使用微连接创建移动应用程序。您还可以创建其他类型的应用程序。创建应用程序后,将分配唯一的应用程序密钥和应用程序密码。您可以在“我的申请-申请信息-基本信息”中查询,将用于授权。注意:无需提交审核,您只需要应用程序密钥和应用程序密钥即可。
如果是异地网页应用或者手机客户端应用,出于安全考虑,需要在平台网站填写redirect_url(授权回调页面)才能使用OAuth2.0。地址填写为“我的申请>申请信息>高级信息”。这里,我们将授权回调页面和取消授权回调页面都设置为默认回调页面:
我的应用程序 - 应用程序信息 - 高级信息
step4:python代码实现
首先,导入所需的模块:
from weibo import APIClient
import webbrowser #python内置的包,支持对浏览器进行操作
使用微博 SDK 创建我们的应用程序:
APP_KEY = '123456'
APP_SECRET = 'abc123xyz456'
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html' #回调授权页面,用户完成授权后返回的页面
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
获取授权页面的url(%3A///oauth2/default.html&response_type=code&client_id=729983294)。用webbrowser打开这个url,会引起浏览器打开
url=client.get_authorize_url() #得到授权页面的url
webbrowser.open_new(url) #打开这个url
打开授权页面的url
用户完成授权后,url 如下所示: . 我们需要code=后面的内容。
print '输入url中code后面的内容后按回车键:'
code = raw_input()
使用代码获取访问令牌:
r = client.request_access_token(code)
access_token = r.access_token # 新浪(授权服务器)返回的token
expires_in = r.expires_in
您可以打印 r 以查看其中的内容:
print(r)
{'access_token': u'abcqwe123', 'expires': 1662109746, 'expires_in': 1662109746, 'uid': u'2164581421'}
设置获取到的access_token后,可以直接调用API:
client.set_access_token(access_token, expires_in)
输出最新的公众微博:
print(client.statuses__public_timeline)
具体返回内容可以查看微博API文档。
例如,我们可以输出用户的昵称、简历、位置和推文:
for i in range(0,length):
print(u'昵称:'+statuses[i]['user']['screen_name'])
print(u'简介:'+statuses[i]['user']['description'])
print(u'位置:'+statuses[i]['user']['location'])
print(u'微博:'+statuses[i]['text'])
最新公开微博
参考:
python调用微博API
如何通过python调用新浪微博的API