与zotero联用整理文献条目

  1. notion创建institution:Notion - 登录

  2. 复制template到自己的notion

  3. 下载并安装zotero的插件notero

  4. 在设置中链接到notion的page(刚才的template)

  5. 在zotero中右键将文献同步到notion

自动记账

1. 简介

基于 BSync,用于将微信和支付宝的账单流水自动同步到 SQLite 数据库、Notion 或飞书多维表格中进行分析。

核心工作流:手机 App 导出账单 -> 发送到指定中转邮箱 -> Python 脚本通过 POP3 读取邮件 -> 下载附件 -> 输入密码解压 -> 解析数据 -> 同步至目标平台。

当前状态:已修复所有已知阻碍性 bug,可稳定处理最新的微信 (.xlsx + AES加密) 和支付宝账单。

2. 环境准备

2.1 基础环境

  • Python 3.10+

  • Git (可选,用于拉取代码)

2.2 安装依赖

除了基础依赖外,为适配新版账单,额外增加了以下关键库:

zmail: 处理邮件接收。

pyyaml: 读取配置文件。

openpyxl: 用于读取微信最新的 .xlsx 格式账单。

pyzipper: 用于解压使用 AES-256 加密的账单压缩包(解决标准库提示密码错误的问题)。

3. 项目配置

3.1 目录结构初始化

在项目根目录下,必须手动创建以下文件夹结构,否则会导致运行时找不到路径错误:

1
2
3
4
5
6
7
BSync/
├── bsync_save/
│ └── temp/ <-- 用于存放下载的临时账单文件
├── config/
│ └── conf.yaml <-- 配置文件
├── BSync_main.py <-- 主程序
...

3.2 配置文件 (config/conf.yaml)

确保配置了正确的中转邮箱(需开启 POP3 服务)和目标平台信息(Notion/飞书)。

1
2
3
4
5
email:
main:
address: "your_server_email@example.com" # 中转邮箱地址
password: "your_pop3_password" # POP3 授权码
# ... 其他配置

4. 关键代码修正

为了适配最新的微信账单格式,我们对源代码进行了三次关键修正。如果你在新环境部署,务必应用这些修改。

文件 修改点 原因
Bmail.py 更新正则表达式匹配 tenpay.wechatpay.cn 域名 微信更改了账单下载链接的域名,旧正则失效
Bmail.py 在 get_email 中增加 start_time 过滤 (获取最近24小时邮件) 防止程序错误地抓取并处理邮箱中已有的历史旧账单
BFile.py 完全重写,引入 openpyxl 和 pyzipper 适配微信从 .csv 改为 .xlsx 格式,以及采用了 Python 原生不支持的 AES 加密
BSync_main.py (可选) 注释掉飞书/Notion相关代码 如果只使用本地 SQLite 存储,需按需禁用云端同步代码以防报错

修正一:更新微信账单下载链接正则 (Bmail.py)

微信更改了账单下载域名的前缀,导致老版本无法识别下载链接。

  • 文件Bmail.py (约第 88 行)

  • 修改前re.findall(r'https://download\.bill\.weixin\.qq\.com/[^"]*', content)

  • 修改后

    1
    2
    # 适配新的 tenpay.wechatpay.cn 域名
    url = re.findall(r'https://tenpay\.wechatpay\.cn/[^"]*', content)

修正二 & 三:支持 .xlsx 格式与 AES 解压 (BFile.py)

微信现默认导出 .xlsx 格式,且压缩包使用 AES-256 加密,Python 内置库无法处理。我们将整个 BFile.py 进行了重写以支持 openpyxlpyzipper

  • 文件BFile.py

  • 操作:使用我们最终调试成功的完整代码替换原文件。(该版本同时支持 .csv.xlsx,并使用 pyzipper 进行强力解压)。

5. 日常使用流程

4.1 准备

  1. 环境确认:确保安装了所有必要依赖 (pip install requests pyyaml zmail openpyxl pyzipper)。

  2. 目录检查:确认项目根目录下存在 bsync_save/temp 文件夹。

4.2 执行同步

  1. 导出账单:

    1. 在微信/支付宝 App 中选择 “用于个人对账” 导出。
    2. 接收邮箱必须填写配置文件 conf.yaml 中指定的那个中转邮箱。
  2. 清理旧信 (可选但推荐):

    1. 尽量确保中转邮箱收件箱中没有未处理的旧账单邮件,或信赖代码中的时间过滤功能。
  3. 运行程序:

    1. 修改 BSync_main.py 中的 bill_platform 为 “wechat” 或 “alipay”。
    2. 在终端运行 python BSync_main.py。
  4. 输入密码:

    1. 等待终端提示按需输入密码:,输入微信/支付宝下发的 6 位解压密码。
  5. 查看结果:

    1. 程序自动完成下载、解压、解析。
    2. 数据最终会存入 bsync_save/bills.db (SQLite) 或同步至你配置的 Notion/飞书。

6. 常见问题排查

问题现象 可能原因 解决方案
FileNotFoundError: [Errno 2] ... '' 临时目录不存在,或未找到邮件导致路径为空 1. 手动创建 bsync_save/temp/ 目录
2. 确保账单是直接导出到中转邮箱,而非转发
IndexError: list index out of range (在 Bmail.py 中) 未找到下载链接 检查 Bmail.py 中的正则表达式是否匹配当前邮件中的链接域名
RuntimeError: Bad password (确认密码正确时) 不支持的加密方式 确保已安装 pyzipper 并使用了最新的 BFile.py 代码
KeyError: 'results' (Notion同步时) Notion机器人没权限 在 Notion 数据库页面右上角 -> Connect to -> 添加你的集成机器人

本站总访问量次!

本站由 Yantares 使用 Stellar 1.33.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

发表了 96 篇文章 · 总计 175k 字