使用新浪微博开放平台api同步微博内容至自己网站(使用python调用微博API的授权机制是什么?如何使用)
优采云 发布时间: 2021-12-09 00:04使用新浪微博开放平台api同步微博内容至自己网站(使用python调用微博API的授权机制是什么?如何使用)
不用稻草做砖。
数据采集是数据分析的前提。许多网站会通过API接口向第三方开放网站的部分数据。新浪微博也不例外。您可以查看微博API列表。
本文将初步介绍如何使用微博API获取基本概念和理解,方便后面深入理解。
step1:使用python调用微博API,首先下载python SDK,即sinaweibopy
Sinaweibopy是一款Python专用的OAuth 2客户端,支持微博API,无依赖,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指的是一个user,Authorization Server 是我们的授权 Server,Resource Server 是一个 API server。
从流程图中可以看出,为了调用API服务器内容,需要将访问令牌告知API服务器;用户获得授权后,将访问令牌返回给新浪(授权服务器)创建的应用程序;为了完成用户授权,我们应用程序首先要给用户授权页面(授权请求)。
微博API的授权机制(来自微博开放平台开发文档)
用户授权后,浏览器的URL如下所示:
我们需要将代码后面的字符串提交给新浪授权服务器来获取访问令牌。相当于告诉新浪服务器我们的应用已经得到用户的授权,现在可以访问用户的数据了,所以授权服务器给了我们一个访问令牌,从API服务器获取微博数据。
了解了上面的机制后,我们就知道如何编写代码来调用API了。
step3:在微博开放平台上创建自己的应用
现在让我们创建我们自己的应用程序。创建应用程序的目的是获取应用程序密钥和应用程序机密。
我们通过微连接创建移动应用程序。您还可以创建其他类型的应用程序。创建应用程序后,将分配唯一的应用程序密钥和应用程序机密。您可以在“我的申请-申请信息-基本信息”中查看,用于授权。注意:无需提交审核,只需提供应用密钥和应用密钥即可。
如果是异地web应用或者手机客户端应用,出于安全考虑,需要填写平台的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