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 需求的人不多吧(摊手)。