用 Python 自动定时发微博

学习python的正确姿势

共 1521字,需浏览 4分钟

 ·

2020-01-17 23:26


其实小帅b已经挺久没有玩微博了,记得上次玩微博还是为了给周杰伦打榜,不过最近心血来潮,觉得俺的微博账号躺着也是躺着,要不就用 Python 做一个自动定时发微博的机器人,让它在上面飘一会。
怎么个飘法呢?

504f5429012dfe34d968f094e9a60136.webp


这不禁让我想到了一个叫做 “古城钟楼” 的微博账号,每天都定时定点的在上面 “铛铛档”,其它的啥也不干,但牛逼的是,人家就凭 “铛铛档” 就有了 100 多万粉丝,我特么都快给跪下了。


3e020181e356f415cbf4f644caa6a459.webp

所以我也打算弄一个类似这样的微博机器人,我要做的是,每隔一段时间就发布一条关于 “年度进度” 的微博,告诉你一年过去百分之多少了。比如: 
2020 年进度:
[#-------------------]4%



4a02b5b931253bd296db3ce7b1ef4b7e.webp

事不宜迟,先把我的微博名称给改了,就叫做 “我的年度进度条” 吧,再把签名改成 “给时间打上 tag” 。


2831b4fde3cfdcc53744ce3d5e92e8cc.webp

瞬间有点逼格了,帅b微博百万粉指日可待!!


d933d15f3d10c1f97ffa7d010f1257b8.webp



那么如何实现定时发微博呢?接下来就是:

学习 Python 的正确姿势

1e9ae0556b220f1f1ae03eed3fa689e9.webp

遇事不决,量子力学,去微博的开放平台逛一波,果然发现了一个写入微博的 API:



731c71c40b3a3eb0c658499120db6ad4.webp



进去看了下,是一个 POST 请求,需要携带两参数,一个 token, 一个要发微博的内容:



832807d49a369c2d1b56369d43778726.webp

 


上面说了,token 参数需要采用 OAuth 授权后才能获得。


所以得先登录上去注册一个应用:



b39cdfc6a8a40fd2fec35c7cde8680fc.webp



反正就是一顿创建之后拿到应用相关的 App Key, App Secret 等参数,有了它们才可以去获取 token 从而使用发微博的 API。

6a70eed4bd2f36377e807c5533e59d80.webp

 


遇事不决,量子力学,在 PyPI 上面搜下 weibo ,果然有人用 Python 封装好了微博接口请求的 API :



74c5923a49bde0e9bfd7d428094e1972.webp



第一个点进去看看介绍:


c7095530a9d93671c6c56d29521eae56.webp


056c2694dcc92027c35bc707fa9aa57a.webp



唉呀妈呀,这正是我想要的哇,Python 又帮我省下了不少时间,哎,人生苦短呀。




879de5c89095873cacea7f85af30e258.webp



那就 install 一波呗:



2ed40983dfd25b68ccd9b51833881f30.webp

 


开始撸下代码,创建一个 weibo_robot.py ,然后把需要的库导进来:



6b5c776fd556fa30d924cd26800c5f62.webp



这个 weibo 库的获取 token 是这样的:



5267a5ff882780d88fcd5c5f0a939e3f.webp




那就把它写成一个方法,然后等下把参数塞进去就可以了:




e8a99fef6f7abd9f1db95f74b688c94e.webp



把刚刚在微博开放平台获到的参数,和自己微博账号密码给定义好:


786d93dc9d7cbb5bceb458deea5ed1bc.webp



有了参数就可以获取 weibo 的 client 了:


15041d2224e5219ddb88c063bfef8064.webp



有了 client 就可以调用 share 接口来发微博了,来测试一下:



c83eceeae4f776be4ed9aef6244766b0.webp



运行一波:



47b35f6cc016080d81ee49a95b127cff.webp



报错了,文本找不到域名?我就纳闷了呀,为啥要 domain?


再仔细看下文档才发现还要带上域名的:



491abbf124426d36b447d438f2bec178.webp



好吧,带上俺绑定的域名试试看:



e9e8fb659ff34bec34a0100fb7d333bd.webp



再运行一波,没报错了,打开俺的微博看看:



8f4a04395ab812d416a77e4332c9ed2c.webp



可以可以,发布成功,不过来自 “未通过审核应用” 是什么鬼?


看下开放平台的应用发现:



791d8f3e9e2175103b7239a7abe24834.webp



好吧,不管了,先这样,接下来就可以来写一个获取年度进度的方法了。


希望发布的微博格式是这样的:


xxxx 年进度:
[#-------------------]xx%


所以定义一下特定的输出格式:



8151e11d82ff72ccdd0b2446b00f28da.webp



其中的 years 可以通过 datetime 获取:


2694644ff765cf3cec4f6e95d25cb98d.webp



百分比就是获取当天是新的一年的第几天,然后除以 365 ,而主要的进度条在这里就定义一个这样的字符串:



4398cc6c286f8601205e0d8e479af547.webp



每一小格代表 5% ,然后每次计算百分比,比如现在就是这样:



6b1306841d6dbccb1b8cba66db4d8a0c.webp



而 14% 就是这样:



089d0830575f349c9dce08c6f471dc18.webp



可以,那就四舍五入下,然后整下字符串替换得了:



c054885e2ebc29074c7e3943d8564847.webp



再运行一波:




5974be7de6f9f883bf8354f36382ec76.webp




没毛病,那最后就扔到服务器上定时运行脚本了。


可以使用 Linux 的 crontab 定时任务,执行 crontab -e,编辑定时运行脚本,比如定时每天 17 :20 发布微博:



b6b5a63fcfe6a8740b19ecc5bb24b019.webp



保存退出即可,这样每到了特定的时间,它就会屁颠屁颠的运行了。




45e29ca5ea56882ce2e62f996f755f46.webp




ok,就先这样让它在上面飘着吧,之后有时间小帅b再优化优化,毕代码写的有点仓促, API 也可能会变,服务器偶尔会傻逼...,那么我们下回见咯,peace




你点在看的样子

真特么帅气!

浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报