/Bills-save

基于 Notion API + Python 实现支付宝与微信账单聚合

Primary LanguagePythonMozilla Public License 2.0MPL-2.0

微信支付宝账单聚合

你是否因为一笔一笔记账太繁琐,无法坚持下去(doge

你是否因为支付宝和微信账单分开统计感到厌烦(doge

此前已经有人尝试过使用 Notion API 进行记账,但手动下载解压再导入实在不够优雅。 该项目基于 Notion API + Python 实现支付宝与微信账单聚合,使用 zmail 模块以邮件的方式实现更优雅的记账

实现原理是通过解析微信与支付宝提供的账单压缩包中的 .csv 文件,使用 Notion API 向 Table 中添加记录,实现记账的功能

前置条件

  • 注册 Notion 账号并开通一个集成(integration)以使用 Notion API,获取 API 的密钥,后面需要使用,可以参考其他大佬的图文 (Notion API 探索笔记(一) - 知乎 (zhihu.com))
  • python 3.8+ 的环境
  • 两个邮箱:一个用于接收账单信息与通知,作为服务端,需要开通 POP 功能;一个用于发送解压密码与接收消息通知,作为客户端

创建 Notion 数据库

  1. 创建一个 page
  2. 在 page 中创建一个 table
  3. 在网页中打开你刚刚创建的包含 table 的页面,在网址中找到那个页面的 id,url 形如 notion.so/你的id/
  4. 编辑你的数据库,设置以下属性

注:数据库本身会创建一个不可删除的 title 属性,将其作为 <账单信息> 属性

  • 日期 类型:date
  • 星期 类型:select (周一, 周二, 周三, 周四, 周五, 周六, 周日)
  • 账单信息 类型: title(就是它)
  • 金额 类型:number
  • 交易平台 类型:select (微信, 支付宝)
  • 支付类型 类型:select (收入, 支出)
  • 交易方式 类型:text
  • 平台交易号 类型:text

配置 conf.yaml 文件

  • email.server 中填写服务端的邮箱地址与密码。注:密码一般使用的是 POP 授权码
  • email.user_address 中填写客户端的邮箱地址
  • notion.token 中填写 Notion API 的密钥
  • notion.type 中填写父页面类型,这里作为数据库使用,填写 database_id
  • notion.database_id 中填写你的数据库 id

测试

将 conf.yaml 的 test_server 属性设置为 True

运行 main.py,查看终端输出。若显示通过,则说明服务端的邮箱连接正常

运行

将 conf.yaml 的 test_server 属性设置为 False

运行 main.py,程序将会监听服务端邮箱是否收到支付宝或微信的账单邮件,收到后将会解析并向你的客户邮箱发送解压密码请求邮件,请直接对那封邮件回复6位数密码,同步完成后将会返回告知邮件