Python使用微博API实现自动发送微博
优采云 发布时间: 2022-08-18 14:17Python使用微博API实现自动发送微博
微博开放平台创建应用
微博开放平台:
点击:微连接>网站接入,输入应用名称创建应用。
填写应用基本信息
点击左侧高级信息,填写相关内容:
完善信息后提交审核。
记录应用相关信息相关代码获取Code
<p>import requests
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
<br />
# App Key
API_KEY = 'xxxxx'
# 授权回调页
REDIRECT_URI = 'xxxxx'
# REDIRECT_URI = 'https://api.weibo.com/oauth2/default.html'
<br />
url = 'https://api.weibo.com/oauth2/authorize'
<br />
def get_url():
params = {
'client_id': API_KEY,
'redirect_uri': REDIRECT_URI
}
return "{0}?{1}".format(url, urlencode(params))
<br />
<br />
print(get_url())</p>
把打印出来的链接粘贴到浏览器上,回车点击授权后重定向到的新链接中出现code=xxxx,后面的值即为code值,记录code值后续获取access_token需要使用到它。
获取access_token
<p>import requests
import json
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
<br />
API_KEY = 'XXXX'
API_SECRET = 'XXXXXXXX'
CODE = 'XXXX'
REDIRECT_URI = 'XXXX'
<br />
access_token_url = 'https://api.weibo.com/oauth2/access_token'
<br />
<br />
params = {
'client_id': API_KEY,
'client_secret': API_SECRET,
'grant_type': 'authorization_code',
'code': CODE,
'redirect_uri': REDIRECT_URI
}
res = requests.post(access_token_url, data=params)
token = json.loads(res.text)
print(token)</p>
执行程序得到以下内容:
<p>{
'access_token': 'xxxxxxxxxxxxxxxxxxxx',
'remind_in': '157679999',
'expires_in': 157679999,
'uid': '5741349972',
'isRealName': 'true'
}</p>
返回值字段字段类型字段说明
access_token
string
用户授权的唯一票据,用于调用微博的开放接口,同时也是第三方应用验证微博用户登录的唯一票据,第三方应用应该用该票据和自己应用内的用户建立唯一影射关系,来识别登录状态,不能使用本返回值里的UID字段来做登录识别。
expires_in
string
access_token的生命周期,单位是秒数。
remind_in
string
accesstoken的生命周期(该参数即将废弃,开发者请使用expiresin)。
uid
string
授权用户的UID,本字段只是为了方便开发者,减少一次user/show接口调用而返回的,第三方应用不能用此字段作为用户登录状态的识别,只有access_token才是用户授权的唯一票据。
access_token长时间有效,拿到之后就可以使用这个去调用发微博的接口了。
发微博
图文微博
<p>import requests
<br />
access_token = 'xxxxxxxxxxxxx'
<br />
url = "https://api.weibo.com/2/statuses/share.json"
# 应用的服务IP地址
rip = "xxxxxxxxxx"
#构建POST参数
params = {
"access_token": access_token,
#内容末尾带后台绑定的安全域名 或 安全域名下的网页
"status": "手执流光,梦里红尘。细品黎明的清新,感悟暮色的浓郁,置身于时光的长廊,昼看风散,夜听雨眠。https://xxx.com",
"rip": rip
}
#构建二进制multipart/form-data编码的参数
files={
"pic":open("1.jpg","rb")
}
#POST请求,发表文字+图片微博
res = requests.post(url,data = params, files = files)
print(res.text)</p>
运行程序,去微博主页看看是否发布成功。
如果应用还在审核中会有:来自 未通过审核应用。
注:使用该接口发送的博文 后面会带有网页链接
可能出现的错误
<p>// 检查授权回调页 安全设置 安全域名等配置项 是否正确或未填写
{'error': 'redirect_uri_mismatch', 'error_code': 21322, 'request': '/oauth2/access_token', 'error_uri': '/oauth2/access_token'}
<br />
// 检查要发送的内容是否包含链接,因为现在新浪微博强制要求要带链接。
{"error":"text not find domain!","error_code":10017,"request":"/2/statuses/share.json"}
<br />
// 参数错误或请求出错</p>