原先一直用 IFTTT 自动同步微博到 Day One,可以把自己日常的事情笔记方便地记录到日记中。不过 2020 年开始,微博不开放这个 API 接口了。
失效之后,一直没管它。最近心血来潮,到在网上搜索一番,找到了方法——Python + IFTTT Webhooks + Crontab 定时抓取微博到 Day One。
分三步:
- 用爬虫抓取自己的微博,缓存到本地 CSV 文件中。
- 读取本地 CSV 数据,用 Python 发给 IFTTT,IFTTT 自动发送 Day One。
- 创建定时任务,可以定时爬取、发送,发送完后清除本地缓存。
1、下载自己微博内容
爬微博的代码不用自己写,Github 上有现成的脚本,功能很强大。把代码下载到本地,然后步骤如下:
1、打开 powershell,路径切换到weibo-crawler
下。
2、安装依赖。前提是安装好了 python 和 pip。
pip install -r requirements.txt
3、修改配置文件config.json
,user_id_list
改成自己微博 id。since_date
设为 1,表示只取近 1 天的微博。
4、运行爬虫,如果微博的数据可以下载到本地 CSV 文件,代表成功了。
python weibo.py
2、用 IFTTT 发送 Day One
IFTTT 网站设置
在 IFTTT 网站上设置一个动作:如果接收到一个 Web 请求,就创建一篇日记。
本地 Python 脚本
然后在本地的weibo-crawler
文件夹下创建一个ifttt.py
的文件,将以下内容复制进去,注意path
、event_name
、key
根据自己情况修改。
path
为本地 CSV 路径。event_name
为自己在 IFTTT 上创建的触发器名称。key
为 WebHooks 的密钥,可在 IFTTT 点击Documentation
查看。
import weibo
import csv
import requests
import json
import os
class Ifttt(object):
def __init__(self, path, event_name, key):
self.path = path
self.event_name = event_name
self.key = key
self.text = []
self.image = []
self.num = 0
# 解析本地 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)
# 发送给 IFTTT
def send_notice(self):
url = f"https://maker.ifttt.com/trigger/{self.event_name}/with/key/{self.key}"
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)
def main():
config = weibo.get_config()
wb = weibo.Weibo(config)
wb.start()
path = 'weibo/微博名/1234567.csv' # 爬虫爬下来的csv路径
event_name = 'DayOne' # Webhooks 触发器名字
key = 'IF17vD4nqU6wO' # Webhooks 的 key,每个人不同
ifttt = Ifttt(path, event_name, key)
ifttt.parse_post_info(path)
ifttt.send_notice()
os.remove(path)
if __name__ == '__main__':
main()
3、Win10 每日定时任务创建
前两步完成后,功能已经实现,然后每次需要手工触发显然太麻烦了,于是决定用 Win10 定时任务每天自动跑一遍,把微博下到本地 CSV 为保护,发送给 Day One,然后清除本地 CSV 文件。
定时任务设置方法如下:
在电脑-管理-系统工具-任务计划程序库-Miscrosoft 下右键,创建基本任务,设置定时任务名称、触发时间、触发频率、触发程序、触发程序代码及触发程序代码所在路径。注,触发程序代码所在路径不能不写,否则运行时不能自动删除上一次生成的 CSV。
说明:本文同步发表于个人博客。