Python + IFTTT Webhooks + Crontab 定时抓取微博到 Day One

最近在使用 Day One app作为日记软件,想要自动同步自己的微博 post 到 Day One。本来可以使用 IFTTT 完成,但在使用 IFTTT 的时候发现现在 IFTTT 无法调用新浪微博的 API 了。因此我在自己的VPS 上搭建了一套类似流程,每天抓取自己新浪微博的新内容,利用 IFTTT 的 Webhooks 自动导入到 Day One 中。

相关工具

IFTTT

IFTTT,是一个新生的网络服务平台,通过其他不同平台的条件来决定是否执行下一条命令。即对网络服务通过其他网络服务作出反应。IFTTT得名为其口号“if this then that”。

就是如果 A 条件触发,那么 IFTTT 会自动执行 B 动作。

Day One

一款日记 APP,界面干净清爽,对照片的支持也很棒。

Crontab

Linux 平台的定时任务工具

抓取微博更新

很多 Python 的爬虫代码都需要进行微博登录。但我需要的功能不多,因此不需要调用微博API。只需要能够访问自己的账户,获取公开的 post 即可。

我找到了这个 repo 不需要进行微博登录即可爬取指定用户的 post。 https://github.com/dataabc/weibo-crawler

以此实现用 python 抓取自己每天新更新的微博到 VPS 的 csv 文件中。

CSV文件解析

对于获取的CSV文件中的信息,我只需要得到文本信息和图片信息。对于发送的多个图片,只获取第一张。

def parse_post_info(self, path):    with open(path, 'r', encoding='UTF-8') as f:        csv_reader = csv.reader(f, delimiter=',')        line_count = 0        for row in csv_reader:            if line_count == 0:                print("Header")            else:                self.text.append(row[2])                self.image.append(row[4].split(",",1))            line_count += 1        self.num = line_count - 1        print(self.text)        print(self.image)        print("Total posts: ", self.num)

生成 Webhooks

在 IFTTT 中,生成一个 Webhook 到 Day One 的 tablet。

我只需要获取微博文字,如果有图片的话获取第一张图片。具体的设置为:


发送 Webhooks 通知

在 IFTTT 中可以获取已经创建的 Event 的 Webhooks key

在 IFTTT 的service中找到 Webhooks (https://ifttt.com/maker_webhooks)

打开 Settings,在 https://maker.ifttt.com/use/ 后面的就是 Webhooks 的 key。

然后在 Python 代码中发送解析的所有微博 post 文本到 Webhooks。

def send_notice(self):    url = f""    for num in range(0, self.num):        payload = {"value1": self.text[num], "value2": self.image[num]}        headers = {"Content-Type": "application/json"}        response = requests.request("POST", url, data=json.dumps(payload), headers=headers)        print(payload)

这样运行这个 Python 脚本,选定日期的新微博就会被爬取、解析然后发送到 Webhooks 上。

IFTTT 会根据收到的 Webhooks 内容直接在设置好的 Day One 日记本中创建一条新的条目。

Crontab 定时更新

我在 VPS 上使用了 Crontab 每天定时检查微博有没有更新,更新了的话就抓取当天的微博发送到自己的日记本。关于 Crontab 的使用方法可以参考:https://man7.org/linux/man-pages/man5/crontab.5.html

比如希望在每天晚上8:30执行一个shell:

crontab -e

然后写入:

30 20 * * *  sh /home/usr/do_something.sh

这样就在VPS上利用 python 和 IFTTT 的Webhooks 实现了一个自动同步 weibo post 到 Day One app 的工具。

本来使用一个 IFTTT 就可以搞定的事情,但由于微博的 API 并不开放给 IFTTT,或者 IFTTT 没有进行相应的更新,导致只能手动去搭建一套这样的自动化流程。

可能有这样需要同步微博到 DayOne 需求的人不多吧(摊手)。