使用新浪微博开放平台api同步微博内容至自己网站(注册新浪weibo允许第三方以应用的方式发布微博(组图))
优采云 发布时间: 2021-10-22 15:10使用新浪微博开放平台api同步微博内容至自己网站(注册新浪weibo允许第三方以应用的方式发布微博(组图))
前言
前不久萌生了学python的念头,于是为了练手的目的为微博做了这样一个小工具。
登记
新浪微博允许第三方以应用的形式发布微博,所以我们首先要做的就是通过新浪微博开放平台注册一个应用:
weibo_open
打开上述平台的页面,用微博账号登录,然后点击立即访问开始注册自己的应用,按照提示操作即可。以下是我自己创建的应用程序,名为:
应用程序
在您个人应用的应用信息-基本信息-基本应用信息中找到您的App Key和App Secret。并在高级信息中设置自己的授权回调页面(所谓授权回调页面是指个人应用通过微博账号授权后的跳转页面,设置没有问题,这里我设置为个人微博主页)。
授权获取代码
看了新浪的SDK,很多人可能会选择对应的python SDK。实际上,这是不必要的。界面变得更加复杂。我们在这里不使用他的界面。
通常,通过微博界面发送微博的第三方应用需要用户授权。我想你以前也做过同样的事情,那么哪个授权页面是?
def get_auth_url(client_id, redirect_uri):
return '%s%s?%s' % ('https://api.weibo.com/oauth2/', 'authorize',
_encode_params(client_id=client_id,
response_type='code',
redirect_uri=redirect_uri))
client_id是你的app_key,redirect_uri是上一步填写的授权回调页面地址,复制生成的链接到浏览器打开,输入你的微博账号进行授权。
授权
授权成功后,浏览器会跳转到我们设置的授权回调页面。在浏览器地址栏找到code字段,你就会得到授权码。
获取令牌
接下来,我们需要通过代码获取token。这个token是我们在微博上发帖的凭证:
def get_access_token(app_key, app_secret, redirect_url):
#通过url_auth输入weibo账号进行登录
#从登录成功后的回调url获得code
url_auth = get_auth_url(app_key, redirect_url)
print('[get_access_token]' + url_auth)
code = input('Input code:')
url_get_token = "https://api.weibo.com/oauth2/access_token"
payload = {
"client_id":app_key,
"client_secret":app_secret,
"grant_type":"authorization_code",
"code":code,
"redirect_uri":redirect_url
}
#获取access_token
res = requests.post(url_get_token, data=payload)
resj = json.loads(res.text)
return resj['access_token']
令牌只需要获取一次,令牌可以一直重复使用。有效期好像是5年。
微博安全域名
新浪微博要求通过应用界面发送的每一条微博内容都必须收录一个安全的域名字段。您需要在应用信息-基本信息-应用基本信息中配置安全域名。我设置了
调用接口
这里的安全域名依然使用自己的微博主页,包括:
def share_weibo(text, img):
access_token = '你的token'
#安全域名,sina限制文本内容必须有此字段
safe_domain = 'https://weibo.com/5296864682/profile?topnav=1&wvr=6'
url_share = 'https://api.weibo.com/2/statuses/share.json'
payload = {
'access_token':access_token,
'status':text + ' ' + safe_domain
}
if img :
files = {
"pic":img
}
res = requests.post(url_share, data = payload, files = files)
else :
res = requests.post(url_share, data = payload)
return res
测试
编写测试代码:
if __name__ == '__main__':
f = open(r"./share.jpeg", "rb")
text = input('Input text:')
res = share_weibo(text, f)
f.close()
跑:
[root@localhost share_weibo]# py sina_weibo.py
Input text:hello sky
成功发布图片微博:
你好天空
如果你想发布视频,很遗憾,新浪没有提供相应的界面。我们只能通过在文本中收录指向现有视频的链接来实现类似的效果。例如,要发布此视频:
跑:
[root@localhost share_weibo]# py sina_weibo.py
Input text:http://t.cn/Ail9eamb?m=4396440127989330&u=5296864682
成功发送视频的微博:
视频
你可以在我的微博上看到刚刚发送的视频。
结束语
还有一些接口比如注释,大家可以自己测试一下,在接口管理里面可以看到相应的介绍。
附上源代码: