前言
再次,工作需要。
还是信息同步的工作,需要向微博同步信息。之前是使用的selenium来对浏览器进行操作,本次也可以采取这种方法。但想尝试一下新的方向,正好微博也有供开发者使用的接口,所以就打算试试这个思路。
总的说来,本次工作主要是:前期配置 + 代码编写。
由于需要对工作内容保密,本次文章主要讲述入门知识,以及在这过程中遇到的许多坑。准备素材接口这一步,我的其他文章里有讲到,这里就不赘述啦。
流程思路
- 配置微博api
- 准备素材接口
- 自动发布代码编写
配置微博api
本部分会讲的较为详细,对于一个新手来说,这部分的知识很基础但很重要!
要特别注意这里面记录的一些坑,会为你节省不少时间。
微博api
微博为广大的开发者提供了下面这个平台。
进入这个平台之后,首先使用你的账号进行登录,并进行相关注册。
注意
在注册过程中,会让你选择**开发者类型**。有“个人”和“企业”两个选项。可以按照实际情况进行选择。本次以选择“个人”为例。
选择“企业”会获得更多的开发功能和权限。
申请应用
申请应用的目的是为了得到 App Key、App Secret,设置安全域名、回调域名。
申请“应用”,可以这样简单理解:为你的脚本提供一个后台。
步骤如下:
首页->微服务->立即创建微服务应用->粉丝服务平台->创建应用
创建过程中,应用名称可以写网站名称,实在没有可以自定义。
安全域名
在应用基本信息中,这一项很重要很重要!
- 安全域名需要备案的。
- 你需要有该域名下网站的管理权限。(因为需要向该网站根目录下传一个特定文件进行验证)
- 这个安全域名(或其子域名)必须出现在你的微博正文中。
注意!
在申请应用的时候,填写安全域名时,前面不要加 http 或者 https这种前缀。
在代码中填写安全域名时,前面要加上http 或者 https这种前缀。
回调域名
回调域名可以这样简单理解:给你一个授权页面。
在编写代码时,有输入用户名密码以及获得token两种账号方式。两种方式都需要填写这个回调域名。但如果使用获得token的方式,就需要用这个回调域名进行一些操作。如果是输入用户名密码,只需要填写域名就好。
这个回调域名不要求你有管理权限,目前看来是可以随意填写的。(这是不负责的说法)
设置步骤如下:
应用信息->高级信息->OAuth2.0 授权设置->授权回调页
代码编写
安装weibo库
首先给出这个库的文档地址:https://pypi.org/project/weibo/#description
python上有一个封装好的库可以用来调用微博的api,叫weibo。
而安装这个库,大概率是要报这个错的。
1 | "C:\Users\Skye\AppData\Local\Temp\pip-install-3ts0b_eo\weibo_c8fc1bfd2fdc49ecad10d472fc905fd5\setup.py", line 15, in <module> |
意思是在安装时setup.py这个文件由于编码问题解析不了。
而上面那个文件路径在电脑上是找不到的,所以不建议采用pycharm或者是pip命令直接安装。
解决办法如下:
- 进入pypi.org ,下载 weibo 库。下载地址如下:
- 解压后,修改 setup.py 中的代码,替换成下面这样:
1 | long_description=open('README.rst', encoding='utf-8').read(), |
- 执行以下命令进行安装:
1 | python setup.py build |
代码编写
以下我会以token认证以及用户名/密码认证这两种方式展开,完整的代码会在各自的部分最后。
token认证
首先在命令行中输入:
1 | from weibo import Client |
这时会弹出来一个网址,复制到浏览器打开:
1 | 'https://api.weibo.com/oauth2/authorize?redirect_uri=http%3A%2F%2F127.0.0.1%2Fcallback&client_id=123456' |
打开后,会让你扫码认证,然后返给你一个code。继续在命令行:
1 | >>> c.set_code('填写自己的code') |
这样,client 初始化完成。继续在命令行:
1 | token = c.token |
此时会返给你一串token,你需要将token保存下来放在代码中。
完整的简单代码如下:
1 | from weibo import Client |
用户名/密码认证
这个就比较简单了,如果你能记住微博的用户名和密码。
完整代码如下:
1 | from weibo import Client |
传入图片
这个很简单,只需要新添一点代码:
1 | f = open('1.png', 'rb') |
不过要注意图片的路径。
常见错误
1. 21322 重定向地址不匹配
- 检查安全域名是否填写
2. appkey not bind domain
- 检查安全域名是否填写
3. text not find domain!
- 检查代码中是否有加上安全域名
4. service unavailable
- 原因:接口调用总次数用完了(每小时总次数150次)
- 解决:
- 插件的【社交评论】-【微博回推】功能关闭,一般等整点后或者第二天恢复。
- 如果您的网站有采集文章,在【同步微博】-【同步设置】-其他同步设置 勾选”只允许在网站后台发布时同步,其他情况不同步”。
总结
本次实践中,算是熟悉了一下微博api的基本调用,实现的功能也比较基础。由于对微博api的不熟悉,导致我在前面配置上面画了不少时间,代码倒是很简单。在这过程中,我忘记了微博的用户名和密码,所以在这上面花费了许久时间,最后是采取token认证的方式。(在此吐槽一下微博的密码找回机制,太鸡肋了)。所以一定要好好看官方文档啊!