现在很多人都在玩微博,不少资源博主都靠发资源获得大量粉丝。我自己也尝试过几次,但是我还是太懒,不想每天一条一条得去发,于是就寻思着怎么用强大的Python自动发微博。研究了两个下午,总算是做出来了,可以实现自动爬取brainyquote每日一句名人引言,并且自动上传图片,然后发表微博!这里主要记录一下如何通过微博的API,用Python进行认证并实现自动发微博的过程。
第一,创建应用
要使用微博的API,需先要有个应用。随便是个应用就行,可以到这里注册一个站内应用应用注册。注册应用的主要目的是要获得MY_APPKEY 和MY_ACCESS_TOKEN,如图所示
第二,获取access_token
API的调用需要登录授权获得access_token。这个过程需要分为两步进行,首先获取所需要的code,然后再去获取access_token。
①调用https://api.weibo.com/oauth2/authorize接口,获得code。
该接口有三个必须的参数:
•client_id:申请应用时分配的AppKey。
•redirect_url:就是创建应用中设置的回调地址
•response_type:响应类型,可设置为code
具体做法,就是在浏览器打开https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code。
该方法会转到授权页面,授权之后会转到http://www.example.com/response&code=CODE,记录下该url中的CODE。
②调用https://api.weibo.com/oauth2/access_token接口,获得access_token
该接口有如下必须的参数:
•client_id:申请应用时分配的AppKey。
•client_secret:申请应用时分配的AppSecret。
•grant_type:请求的类型,填写authorization_code
•code:调用authorize获得的code值。
•redirect_uri: 就是创建应用中设置的回调地址
具体做法就是构建一个POST请求,再在返回的数据中找到access_token,保存下来。具体的Python代码:
Shell
import requests
url_get_token = "https://api.weibo.com/oauth2/access_token"
#构建POST参数
payload = {
"client_id":"填入你的",
"client_secret":"填入你的",
"grant_type":"authorization_code",
"code":"上面获得的CODE",
"redirect_uri":"你的回调用地址"
}
#POST请求
r = requests.post(url_get_token,data=payload)
#输出响应信息
print r.text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
importrequests
url_get_token="https://api.weibo.com/oauth2/access_token"
#构建POST参数
payload={
"client_id":"填入你的",
"client_secret":"填入你的",
"grant_type":"authorization_code",
"code":"上面获得的CODE",
"redirect_uri":"你的回调用地址"
}
#POST请求
r=requests.post(url_get_token,data=payload)
#输出响应信息
printr.text
如果正常的话,会返回下面这样的json数据:
Shell
{"access_token":"我们要记下的","remind_in":"157679999","expires_in":157679999,"uid":"1739207845"}
1
{"access_token":"我们要记下的","remind_in":"157679999","expires_in":157679999,"uid":"1739207845"}
根据返回的数据,access_token的值就是我们要的。其中remind_in的值是access_token的有效期,单位为秒,我们可以看到,这个时间有3、4年之久,足够我们用了。
有了access_token,我们就可以利用微博的各种接口干很多事啦!
发表文字微博
调用接口https://api.weibo.com/2/statuses/share.json
请求必须用POST方式提交,有上传图片时需要采用multipart/form-data编码方式,没有上传图片则采用正常编码方式
其中必须的:
•access_token: 就是我们上一步获得的access_token
•status:用户分享到微博的文本内容,必须做URLencode,内容不超过140个汉字,文本中不能包含“#话题词#”,同时文本中必须包含至少一个第三方分享到微博的网页URL,且该URL只能是该第三方(调用方)绑定域下的URL链接,绑定域在“我的应用 - 应用信息 - 基本应用信息编辑 - 安全域名”里设置。
具体代码:
Shell
#发表文字微博的接口
url = "https://api.weibo.com/2/statuses/share.json"
#构建POST参数
payload = {
"access_token":"填入你的",
"status":"Python发送微博测试!https://www.itengli.com"
}
#POST请求,发表文字微博
r = requests.post(url,data = payload)
1
2
3
4
5
6
7
8
9
#发表文字微博的接口
url="https://api.weibo.com/2/statuses/share.json"
#构建POST参数
payload={
"access_token":"填入你的",
"status":"Python发送微博测试!https://www.itengli.com"
}
#POST请求,发表文字微博
r=requests.post(url,data=payload)
发表图片微博
Shell
#发表图文微博的接口
url = "https://api.weibo.com/2/statuses/share.json"
#构建文本类POST参数
payload={
"access_token":"2.008xxxxxxxxxxxxxxxxxxxxxx",
"status":"Python发送微博测试!https://www.itengli.com"
}
#构建二进制multipart/form-data编码的参数
files={
"pic":open("logo.png","rb")
}
#POST请求,发表微博
r = requests.post(url,data=payload,files = files)
1
2
3
4
5
6
7
8
9
10
11
12
13
#发表图文微博的接口
url="https://api.weibo.com/2/statuses/share.json"
#构建文本类POST参数
payload={
"access_token":"2.008xxxxxxxxxxxxxxxxxxxxxx",
"status":"Python发送微博测试!https://www.itengli.com"
}
#构建二进制multipart/form-data编码的参数
files={
"pic":open("logo.png","rb")
}
#POST请求,发表微博
r=requests.post(url,data=payload,files=files)