weibo_ifttt_dayone

原先一直用 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.jsonuser_id_list 改成自己微博 id。since_date设为 1,表示只取近 1 天的微博。
4、运行爬虫,如果微博的数据可以下载到本地 CSV 文件,代表成功了。

python weibo.py

2、用 IFTTT 发送 Day One

IFTTT 网站设置

在 IFTTT 网站上设置一个动作:如果接收到一个 Web 请求,就创建一篇日记。

image-20210619162620755

image-20210619162200131

image-20210619162104426

本地 Python 脚本

然后在本地的weibo-crawler文件夹下创建一个ifttt.py的文件,将以下内容复制进去,注意pathevent_namekey根据自己情况修改。

  • path为本地 CSV 路径。
  • event_name为自己在 IFTTT 上创建的触发器名称。
  • key为 WebHooks 的密钥,可在 [IFTTT](Webhooks works better with 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

    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)

    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。

image-20210619160457206

参考 Win10 定时任务自动运行python程序