type
status
date
slug
summary
tags
category
icon
password
挖了一大堆坑之后开始痛苦的填坑之旅。第一步是虽然js还没写好但早就说过要弄的推特机器人。 主要功能是从官网上扒下物品数据的同时,寻找物品是否有被复刻过,给出详细的复刻时间及复刻次数等等,并且画一张图。 主要用到了 Python 以及 pymysql(MySQL)、tweepy、PIL(现在叫 Pillow 来着?)三个库。 MySQL 就略过不提了,来说说 tweepy 和 PIL 吧。

1 安装 tweepy 和 PIL 库

PIL 并不是内置模块,需要另外安装。tweepy 也是。 两个库的官方文档:PILtweepy。理论上只看官方文档就够了。

2 向 Twitter 申请 API Key

在 Twitter 的 Application Management 处创建一个 App。 记录下 Consumer Key 和 Consumer Secret,并申请自己的 Access Token 和 Access Token Secret。tweepy 需要用到它。

3 tweepy 的使用

tweepy 的使用十分简单,使用上面四个 Key 鉴权之后就可以随便玩了。
接下来就可以使用 api 这个对象进行各种操作。 做一个机器人最常使用的基本就是发推操作了,因此要用到 update_statusupdate_with_media 这两个方法。
虽然这两个方法还可以用来回复,不过目前的机器人并不需要他,就不用管了。

4 PIL 的使用

4.1 基本操作

我要做的机器人还需要自己生成一张图片,所以需要 PIL 这个库。 在我的机器人中用到了 ImageImageDrawImageFont这三个模块。拿 PhotoShop 来比喻,分别具有“文件操作”、“绘图工具”、“读取字体”的作用。
然后就画好了下面这张图。虽然要看到它我们还需要用
将其显示出来。
notion image
指定了操作画布之后,就可以用
这个对象来在画布上绘图了。比如画一条直线可以用
,绘制文字可以用
等等。 下面以绘制文字和绘制直线为例。
这会在画布的 20 x 10 位置处作为文本框的左上角,绘制字体为 font(前面创建好的 15 号思源黑体,颜色为 #000000 的 Hello, world! 文字。 由于位置固定为左上角,无法进行类似居中之类的操作。如果要进行居中,需要使用 textsize 方法算出需要绘制的文本长度,然后对绘制位置进行相应计算。
这会以画布的 20 x 10 位置为 A 点,500 x 10 位置为 B 点,绘制宽度(或者说高度)为 2 像素,颜色为 #000000 的直线。并不是矩形。 目前我只用来当分隔线使用,没有用到更多的参数。

4.2 插入图片

光能绘制线条和文本还不行,还需要插入一些图片。这时候就需要用到 Image.open 这个方法。
十分简单不是吗。
最后的成品像这样。如果花点时间再好好排版的话能做得更好,比如加点背景色之类的。 虽然 PIL 的使用非常直观,但是因为毕竟不像 PhotoShop,甚至画图工具那样所见即所得,建议先使用工具排好版再开始写代码。
notion image

4.3 保存图片

保存图片只需要一条语句。
图片会被自动生成。 # 5 让机器人跑起来 Python 文件不会自己跑起来,让它一直跑下去也不现实。好在 Linux 上有 crontab 这种类似计划任务一样的东西可以自动执行脚本。 把写好的文件加入到 crontab 里面去就能让它自动执行了。 至于 crontab 要怎么写,文件里有模板可以用来参考。
花了一天时间终于让机器人跑起来了。记得之前弄这个东西是 9 月左右,现在快 12 月了终于把坑填上了…… 虽然不出什么意外机器人就会在每周官网更新时抓新数据发推,在物品快要过期时自动读取数据发推提醒。懒果然是第一生产力啊。 坑数量 - 1(剩余:Infinity)

© 2021-2024 - Diru’s Daydream -

Powered by NotionNext / Theme by NotionKylin