微博官方API使用方法【全流程教学】
微博开发者身份认证
访问微博开放平台,登录自己微博账号,登录之后首先需要完善开发者的基本信息。
填写完成后提交即可,然后需要进行开发者身份认证。
填写相关身份信息,上传身份证照片然后提交等待审核通过,审核通过后开发者身份就认证完成了。
创建自己的应用
在这个页面填写自己的应用名称。(由于不允许应用重名,所以可能名字可能有点不好取),取好名字点击创建即可创建好自己的应用。
然后就可以在我的应用页面看到新创建的应用了。
新应用的相关配置
基本信息
进入应用信息界面后,显示应用状态为“尚未提交审核”,但是目前不需要再提交审核了,因为开发还没有完成。
在这个页面有应用最重要的两个信息App Key
和App Secret
,这两个值注意不要泄露。
高级信息
这里有两个很重要的信息需要配置,OAuth2.0
授权设置,必须设置授权回调页和取消授权回调页的地址,如果有自己的域名可以填自己的,没有可以按照图中的方式,填写微博默认的回调页。https://api.weibo.com/oauth2/default.html
剩余的其他信息可以不填写。
微博认证流程OAuth2.0认证(核心步骤)
认证流程是为了获得一个access_token
,只有拥有这个token才可以调用其他官方API
官方的文档我感觉写的很简略,没有写清怎样请求获得access_token,我试了半天一直是出现各种各样的错误。在网上搜了一圈,网上有说使用sinaweibopy
模块进行认证的,但是我搜了一下这个库是提供给python2
使用的,python3
不支持这个库。然后我又在微博开放平台找Python的SDK,发现现在只有IOS、Android和JS的SDK(很奇怪,我在网上看到其他博主的截图里是由各种语言SDK下载链接的,可能官方现在没有维护这些东西了)。
找了一大圈,找到了支持python3
的模块,Github链接为sinaweibopy3
以及相关的解释博客:全网最详:python3调用新浪微博API接口获取数据
使用方法:把Github中的文件下载下来,里面的UserSinaweibopy3
文件就是获取access_token
的demo,将文件里的APP_KEY
,APP_SECRET
,REDIRECT_URL
替换成自己的,然后运行程序即可。
运行之后会跳转的微博的认证登录界面,登录成功之后会跳转到新的回调页。
如图所示,跳转的地址是之前设置的授权成功回调页+code
,code是一个有效期比较短的口令,现在需要拿这个code向微博的认证服务器换取access_token
。打开刚刚运行UserSinaweibopy3
的界面,会让你输入这个code
把URL中的code输入后,服务器会返回数据,其中包含access_token
,程序会打印在控制台中,这里就不再展示了。
Access Token授权有效期
由于还没有提交审核,所以接口授权级别只能是“测试”,有效期只有1天,过期的时候按照上面的流程再重新请求一个就好了。
注意access_token
不要泄露。
接口调用Demo(以评论接口为例)
官方文档中评论接口信息如下图所示:
根据官方文档,构造请求参数,然后请求对应接口即可,简单的实现代码如下:
补充说明:微博id和微博用户id不是一个东西,微博id是这一条微博的唯一标识,如上图浏览器地址栏所示,490xxxxxx6
为该条微博的id。获得一条微博id的方法我目前没有专门找,对我而言可以通过请求微博后端数据获得(针对微博的各个接口我写了个文档,目前还没有发布),另外就是访问m.weibo.cn这个站点,点击要看的微博,地址栏会显示出微博id。
import requests
def send_comment():
url = "https://api.weibo.com/2/comments/create.json"
params = {
'access_token': '2.xxxxxxxxxxxxxxxxxxxxxxxxxxxxC', # 刚才请求到的access_token
'id': 要评论的微博ID,
'comment':'评论内容',
'rip':'你的公网IP'
}
requests.post(url=url, data=params)
调用该方法即可实现用刚刚授权的微博账号向微博id为id
的微博发送评论。
需要注意的是:rip
一定要填写公网IP,如果填写内网IP会请求失败。查看自己公网IP的方法:访问下列的链接即可获得本机的公网IP。
查看公网IP的链接:
- http://ip.42.pl/raw
- https://ifconfig.me/ip
- http://jsonip.com
- http://httpbin.org/ip
- https://api.ipify.org/?format=json
另外还发现一个有意思的现象,rip
可以自己写,如果填写一个境外IP那么相应评论显示的IP属地就在境外,不知道算不算官方的一个Bug。
其他接口对照官方的接口文档使用即可,方法与上面类似。