Python脚本实现自动发带图的微博

yipeiwu_com6年前Python基础

 要自动发微博最简单的办法无非是调用新浪微博的API(因为只是简单的发微博,就没必要用它的SDK了)。参考开发文档http://open.weibo.com/wiki/API 进行代码编写

创建应用

要使用微博的API,需先要有个应用。随便是个应用就行,可以到这里注册一个站内应用应用注册。注册应用的主要目的是要获得MY_APPKEY 和MY_ACCESS_TOKEN,如图所示

获取access_token

API的调用需要登录授权获得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代码:

import requests
url_get_token = "https://api.weibo.com/oauth2/access_token"
#构建POST参数
playload = {
"client_id":"填入你的",
"client_secret":"填入你的",
"grant_type":"authorization_code",
"code":"上面获得的CODE",
"redirect_uri":"你的回调用地址"
}
#POST请求
r = requests.post(url_get_token,data=playload)
#输出响应信息
print r.text 

如果正常的话,会返回下面这样的json数据:

{"access_token":"我们要记下的","remind_in":"157679999","expires_in":157679999,"uid":"1739207845"}

根据返回的数据,access_token的值就是我们要的。其中remind_in的值是access_token的有效期,单位为秒,我们可以看到,这个时间有3、4年之久,足够我们用了。

发表纯文字微博

调用接口https://api.weibo.com/2/statuses/update.json发表文字微博,其参数如下

其中必须的:

•access_token: 就是我们上一步获得的access_token
•status:要发布的微博文本内容,必须做URLencode,内容不超过140个汉字

具体代码:

#发表文字微博的接口
url_post_a_text = "https://api.weibo.com/2/statuses/update.json"
#构建POST参数
playload = {
"access_token":"填入你的",
"status":"This is a text test@TaceyWong"
}
#POST请求,发表文字微博
r = requests.post(url_post_a_text,data = playload) 

如果正常,会有向下面这样的结果

发表带图片的微博

调用接口http://open.weibo.com/wiki/2/statuses/upload发表图片微博,其参数如下:

其中必须的参数:

•access_token: 就是我们上一步获得的access_token
•status:要发布的微博文本内容,必须做URLencode,内容不超过140个汉字
•pic:要发表的图片,采用multipart/form-data编码方式

具体的代码:

#发表图文微博的接口
url_post_pic = "https://upload.api.weibo.com/2/statuses/upload.json"
#构建文本类POST参数
playload={
"access_token":"2.0086XhtBIQLH7Ed67706b6c8TQ8XdE",
"status":"Test:Post a text with a pic & AT someone@丸子覠"
}
#构建二进制multipart/form-data编码的参数
files={
"pic":open("logo.png","rb")
}
#POST请求,发表微博
r = requests.post(url_post_pic,data=playload,files = files)

如果正常,结果会像下面这样:

注:requests的具体用法请参考[requests文档](http://docs.python-requests.org/en/master/)

相关文章

详细解析Python中的变量的数据类型

详细解析Python中的变量的数据类型

 变量是只不过保留的内存位置用来存储值。这意味着,当创建一个变量,那么它在内存中保留一些空间。 根据一个变量的数据类型,解释器分配内存,并决定如何可以被存储在所保留的内存中。因...

详解Python 数据库 (sqlite3)应用

详解Python 数据库 (sqlite3)应用

Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具。SQLite还在其它...

python中使用正则表达式的后向搜索肯定模式(推荐)

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供...

python中日志logging模块的性能及多进程详解

python中日志logging模块的性能及多进程详解

前言 Java 中最通用的日志模块莫过于 Log4j 了,在 python 中,也自带了 logging 模块,该模块的用法其实和 Log4j 类似。日志是记录操作的一种好方式。但是日...

详解Python3之数据指纹MD5校验与对比

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用...