基于邮件驱动的银行消费自动化追踪:从数据抓取到可视化推送
1. 项目概述与核心价值如果你和我一样日常工作中需要处理大量重复、琐碎但又不得不做的任务比如手动整理银行交易记录、定期生成数据报告或者在不同应用间搬运数据那你一定对“自动化”这个词有很深的执念。我们总希望有个“数字助手”能默默帮我们搞定这些事把时间还给更有创造性的工作。今天要聊的这个项目openclaw-tools就是基于这个痛点诞生的一个工具箱集合。它不是一个庞大的、一体化的平台而是一个“乐高积木”式的多工具工作空间围绕 OpenClaw 的工作流理念把一个个小而美的自动化脚本封装成独立的、可复用的“技能”。简单来说openclaw-tools是一个开源仓库里面存放着各种独立的自动化工具。每个工具都像一个独立的 App有自己的脚本、配置说明和技能定义文档。目前它主要包含了一个非常实用的工具axis-spending一个基于邮件驱动的 Axis 银行消费追踪器。这个工具的价值在于它能把我们每天收到的、杂乱无章的银行交易提醒邮件自动变成结构化的、可查询、可分析的数据并最终生成可视化的仪表盘甚至把摘要推送到你的 WhatsApp。这背后涉及邮件抓取、数据解析、数据库存储、数据可视化以及消息推送等多个环节的串联正是 OpenClaw 所倡导的“工作流自动化”思想的典型体现。这个项目特别适合三类人一是像我这样的开发者或技术爱好者想学习如何构建端到端的自动化流程二是日常有记账或财务分析需求的个人用户希望摆脱手动录入的麻烦三是任何对“将通知转化为结构化数据”这个模式感兴趣的人因为它的架构可以很容易地适配其他类型的邮件或消息提醒比如电商订单、订阅续费通知等。接下来我会带你深入拆解这个工具箱的设计思路、核心工具的实现细节并分享我在搭建类似系统时踩过的坑和总结的经验。2. 工具箱的整体架构与设计哲学2.1 为什么是“多工具工作空间”初次看到openclaw-tools的仓库结构你可能会觉得它很简单甚至有点“松散”。但这恰恰是它的精妙之处。与那些把所有功能都塞进一个庞杂单体应用的项目不同它采用了“一个工具一个文件夹”的模块化设计。axis-spending工具独占一个文件夹里面包含了运行所需的一切主脚本axis_tracker.py、技能定义文件SKILL.md、环境变量示例.env.example以及详细的文档docs/。这种设计有以下几个核心优势首先是隔离性与独立性。每个工具都是自包含的它们之间的依赖和配置是隔离的。这意味着你可以单独部署、测试或修改axis-spending而完全不会影响未来可能加入的其他工具比如一个expense-splitter费用分摊工具。对于开发和维护来说这极大地降低了认知复杂度和出错风险。其次是可复用性与可组合性。每个工具都被定义为一个“OpenClaw Skill”。OpenClaw 的技能体系本质上是一套标准化的接口描述它规定了工具如何被触发、需要什么输入、产生什么输出。一旦axis-spending被封装成一个 Skill它就可以被其他 OpenClaw 工作流轻松调用。例如你可以创建一个更复杂的工作流每周一早上自动运行axis-spending抓取上周交易然后将结果数据传递给另一个“预算分析”Skill 生成报告最后再调用一个“邮件发送”Skill 把报告发给你自己。这种“乐高式”的组合能力是构建复杂自动化系统的基石。最后是易于分享与贡献。清晰的目录结构让新加入的贡献者一目了然。如果你想添加一个监控云服务器账单的新工具只需要在根目录下新建一个cloud-billing文件夹然后按照相同的结构脚本、技能定义、文档进行填充即可。这种一致性极大地降低了项目的参与门槛。2.2 核心组件.env与 Secrets 管理在项目文档中有一个非常重要的安全提示“Real deployment values should come from.envand GitHub/server secrets.” 这是现代应用开发尤其是涉及第三方 API 和敏感信息的自动化脚本中必须遵守的黄金法则。.env文件的作用是存储本地开发环境所需的配置变量比如邮箱的服务器地址、API 密钥的占位符、数据库文件路径等。项目里提供的.env.example是一个模板它列出了所有需要的环境变量名但值通常是空的或使用明显的占位符如YOUR_API_KEY_HERE。开发者需要复制这个文件为.env然后填入自己真实的配置。切记.env文件必须被加入.gitignore绝对不要提交到代码仓库否则你的敏感信息就公开了。GitHub Secrets / Server Secrets则用于生产环境或 CI/CD 流程。当你的自动化脚本部署在服务器比如通过 GitHub Actions 定时运行时你不能把密钥硬编码在代码里也不能把.env文件传上去。这时就需要使用平台提供的 Secrets 管理功能。以 GitHub Actions 为例你可以在仓库的 Settings - Secrets and variables - Actions 里添加密钥然后在 workflow 的 YAML 文件中通过${{ secrets.KEY_NAME }}的方式引用。对于直接部署在 VPS 或云函数上的脚本则可以使用服务器环境变量或专门的密钥管理服务如 AWS Secrets Manager, HashiCorp Vault。实操心得我习惯在脚本的开头使用python-dotenv库来加载.env文件同时代码里用os.getenv(KEY)读取环境变量。这样无论是在本地从.env读还是在服务器从系统环境变量读代码都无需修改只需保证同名的环境变量已被正确设置即可。这是实现“配置与代码分离”的关键一步。2.3 项目结构深度解析让我们再仔细看看仓库的结构这能帮助我们理解整个项目的运作方式openclaw-tools/ axis-spending/ # 工具一Axis银行消费追踪器 axis_tracker.py # 主逻辑脚本 SKILL.md # OpenClaw技能定义说明如何调用此工具 .env.example # 环境变量配置模板 docs/ # 详细文档 SETUP.md # 安装与配置指南 PLAN.md # 设计思路与规划文档 .github/ # GitHub相关配置 workflows/ # GitHub Actions自动化工作流目录 # 这里可能会存放定时运行axis_tracker.py的workflow文件这个结构暗示了项目的两种运行方式本地手动/定时运行你在自己的电脑上配置好.env然后直接执行python axis_tracker.py或者用系统的定时任务如 Linux 的 cron, Windows 的任务计划程序来定期执行它。云端自动化运行通过.github/workflows/下的 CI/CD 脚本利用 GitHub 提供的免费计算资源来定时执行这个工具。这对于需要 7x24 小时运行、或者不想让本地电脑一直开机的场景非常有用。axis-spending非常适合这种模式因为它只需要定期比如每半小时检查一次新邮件。3. 核心工具axis-spending实现全解析axis-spending是这个工具箱目前的明星工具它完整地展示了一个从数据采集到数据呈现的自动化流水线。我们来一步步拆解它的实现。3.1 数据入口使用 Himalaya 抓取交易邮件工具的第一步是从邮箱里获取 Axis 银行发来的交易提醒邮件。这里它选择了Himalaya。Himalaya 是一个命令行电子邮件客户端但它提供了优秀的 API 接口非常适合被脚本调用进行邮件读取和管理操作。为什么是 Himalaya 而不是传统的 IMAP虽然 Python 标准库imaplib也能实现邮件抓取但 Himalaya 提供了更抽象、更友好的接口。它帮你处理了与邮件服务器的连接、认证、协议解析等底层细节你只需要关心“获取未读邮件”、“标记为已读”这样的高级操作。这大大减少了脚本的复杂度和出错概率。当然如果你的环境无法安装 Himalaya用imaplib重写邮件获取模块也是一个可行的方案只是需要多写一些样板代码。配置关键点在.env文件中你需要配置 Himalaya 所需的邮箱账户信息。这通常包括EMAIL_ACCOUNTyour_emailgmail.com # Himalaya 通常使用应用专用密码而非你的邮箱登录密码 EMAIL_PASSWORDyour_app_specific_password EMAIL_SERVERimap.gmail.com EMAIL_PORT993对于 Gmail你需要开启“两步验证”然后生成一个“应用专用密码”给 Himalaya 使用这样更安全。其他邮箱服务商如 Outlook, QQ 邮箱也有类似的机制具体需要查阅其帮助文档。脚本中的实现逻辑在axis_tracker.py中邮件抓取部分大致会做以下几件事初始化 Himalaya 客户端连接到配置的邮箱。搜索收件箱中来自 Axis 银行特定发件地址如alertsaxisbank.com且未读的邮件。遍历这些邮件提取出主题、正文和接收时间。将处理过的邮件标记为已读避免下次重复抓取。将邮件原始文本传递给下一个环节——交易信息解析。3.2 信息提取基于正则表达式的交易分类从邮件正文的一大段文字中准确提取出交易金额、商户名称、日期、余额等信息是整个过程的核心和难点。axis-spending采用了正则表达式Regex规则来实现。为什么用正则表达式银行提醒邮件的格式通常是固定不变的。比如Axis 银行的借记卡消费邮件正文里很可能包含“亲爱的客户您尾号XXXX的账户于DD-MM-YYYY HH:MM:SS在[商户名]消费 INR[金额]。可用余额为 INR[余额]。”这样的固定句式。对于这种有固定模式的文本正则表达式是最高效、最直接的工具。它允许我们定义模式pattern来匹配和捕获我们关心的文本片段。规则分类的妙用仅仅提取信息还不够工具还需要对交易进行分类如“餐饮”、“购物”、“交通”等。axis-spending巧妙地将分类逻辑也整合进了正则规则中。它的做法可能是这样的它维护一个规则列表每条规则包含一个正则表达式和一个对应的分类标签。例如规则{‘pattern’: r’SWIGGY|ZOMATO’, ‘category’: ‘餐饮’}会匹配邮件正文中出现“SWIGGY”或“ZOMATO”的交易并将其自动归类为“餐饮”。脚本会按顺序用每条规则去匹配邮件正文。一旦某条规则匹配成功就使用它定义的分类并停止后续规则的匹配或继续匹配以获取更多信息。可以设置一个默认规则如匹配任意交易但分类为“其他”确保所有交易都能被归类。实操中的挑战与技巧邮件格式变化银行可能会更新邮件模板。一旦正则表达式匹配不上数据提取就会失败。因此规则需要定期检查和更新。一个健壮的脚本应该包含日志记录和错误告警机制当连续多次匹配失败时能通过邮件或消息通知你。规则优先级如果一条“餐饮”规则匹配“餐馆”和一条“娱乐”规则匹配“电影院”都能匹配同一封邮件谁先谁后就决定了最终分类。通常会把更具体、范围更小的规则放在前面。提取准确性正则表达式要写得尽可能精确避免误匹配。例如匹配金额时要考虑到印度卢比的格式如1,234.50使用如r’INR\s*([\d,]\.?\d*)’这样的表达式会更可靠。3.3 数据持久化SQLite 存储与去重解析出的交易数据需要被保存起来以供查询和分析。axis-spending选择了SQLite数据库。这是一个非常轻量级、无需单独服务器进程的文件型数据库整个数据库就是一个.db文件完美契合这种个人级、单机运行的应用场景。数据库表设计猜想虽然代码里没明说但一个合理的transactions表可能包含以下字段id(INTEGER PRIMARY KEY): 自增主键。transaction_date(TEXT/DATETIME): 交易日期时间。amount(REAL): 交易金额。merchant(TEXT): 商户名称。category(TEXT): 分类如餐饮、购物。account_tail(TEXT): 账户尾号。balance_after(REAL): 交易后余额。email_received_at(TEXT/DATETIME): 邮件接收时间。unique_hash(TEXT UNIQUE): 用于去重的唯一标识哈希。核心机制去重Deduplication这是数据管道中至关重要的一环。银行可能因为网络问题重复发送同一笔交易的提醒或者你的脚本可能因为意外被多次执行。如果不做去重数据库中就会出现重复记录导致统计结果错误。axis-spending实现去重的逻辑通常是这样的在解析出一笔交易的所有信息后将这些信息拼接成一个字符串例如f”{date}{amount}{merchant}{account_tail}”。对这个字符串计算一个哈希值如 MD5 或 SHA256作为该笔交易的unique_hash。在插入数据库前先检查unique_hash是否已存在于表中。如果存在则跳过插入如果不存在则插入新记录。这种方法简单有效能保证同一笔交易在数据库里只出现一次。注意事项计算哈希的字段组合必须能唯一标识一笔交易。要小心那些可能变化的字段比如邮件接收时间 (email_received_at) 就不能用来计算哈希因为同一笔交易的两封邮件接收时间肯定不同。通常使用银行提供的交易ID如果邮件里有、交易时间、金额、商户等核心不变信息。3.4 数据呈现生成动态仪表盘存储数据是为了使用。axis-spending能够生成仪表盘这意味着它内置或调用了数据可视化功能。在 Python 生态中最常用的库是matplotlib,seaborn和plotly。考虑到可能需要生成交互式图表或 HTML 报告plotly加上Dash框架或者使用Jupyter Notebook都是不错的选择。但作为一个轻量级命令行工具它更可能采用以下两种方式之一静态 HTML 报告使用plotly生成交互式图表然后保存为独立的.html文件。你可以定期运行脚本在本地打开这个 HTML 文件查看仪表盘。plotly的offline.plot功能可以轻松实现这一点。控制台文本图表使用像rich或tabulate这样的库在命令行中绘制简单的文本表格或条形图。这对于快速查看概览非常方便但表现力有限。仪表盘可能包含的视图总览本月总支出、收入、结余。分类饼图/柱状图展示各类别餐饮、交通等的支出占比。时间趋势图展示每日或每周的支出波动。商户排行榜列出消费次数最多或金额最大的前10个商户。目标进度如果你设定了月度预算可以展示各类别的预算使用进度条。“分类和目标级下钻”功能意味着仪表盘是交互式的。例如点击“餐饮”类别可以下钻看到所有餐饮类的具体交易列表或者点击某个预算目标可以看到构成该目标的所有相关交易。这在静态 HTML 中可以通过添加链接到不同报告页面来实现在Dash这类 Web 应用中则能实现真正的动态交互。3.5 消息推送通过 OpenClaw 发送 WhatsApp 摘要这是画龙点睛的一步让自动化流程形成闭环。系统不仅默默地处理数据还能主动向你汇报。axis-spending集成了通过 OpenClaw 发送 WhatsApp 消息的能力。OpenClaw 在此扮演的角色OpenClaw 可以被理解为一个“自动化中枢”或“技能执行引擎”。axis-spending工具本身被定义为一个 OpenClaw Skill。当它需要发送 WhatsApp 时它并不是自己直接去调用 WhatsApp 的 API这通常很复杂且不稳定而是“告诉” OpenClaw“嘿请执行‘发送 WhatsApp 消息’这个技能内容是这份消费摘要”。具体流程可能是axis_tracker.py脚本运行完毕生成了本日的消费摘要文本例如“今日共消费 3 笔总计 ₹1,850。主要支出餐饮 ₹600 (Swiggy)购物 ₹1,200 (Amazon)。”。脚本通过 HTTP 请求或 SDK 调用本地或远程部署的 OpenClaw 服务。调用时指定要触发的技能名如send_whatsapp_message并传入参数recipient‘YOUR_PHONE_NUMBER’,message‘生成的摘要文本’。OpenClaw 收到请求后会查找并执行对应的 WhatsApp 发送技能。这个技能背后可能使用了twilio的 WhatsApp API、whatsapp-web.js这类库或者集成了官方商业 API。消息成功发送到你的 WhatsApp。这样做的好处解耦消费追踪工具不需要关心 WhatsApp 发送的具体实现和技术细节。它只负责生成内容。复用“发送 WhatsApp”这个技能可以被仓库里任何其他工具调用比如一个服务器监控工具在检测到异常时也能发消息告警。可维护当 WhatsApp 的发送方式需要变更时比如从模拟网页切换为官方 API只需要更新 OpenClaw 中对应的那个技能所有调用它的工具都无需修改。4. 从零开始部署与实操指南理解了原理我们来动手搭建一个属于自己的axis-spending。以下步骤基于常见的 Linux/macOS 环境Windows 用户可以通过 WSL 获得类似体验。4.1 环境准备与依赖安装首先克隆仓库并进入工具目录git clone repository-url cd openclaw-tools/axis-spending接着创建并激活一个 Python 虚拟环境强烈推荐避免污染系统环境python3 -m venv venv # Linux/macOS source venv/bin/activate # Windows venv\Scripts\activate然后安装依赖。项目根目录应该有一个requirements.txt文件。如果没有我们可以根据功能推测并创建一个# requirements.txt himalaya-cli # 邮件客户端 sqlite3 # 通常Python已内置 pandas # 数据处理和分析 plotly # 数据可视化 python-dotenv # 读取.env文件 requests # 用于调用OpenClaw API如果需要使用 pip 安装pip install -r requirements.txt注意himalaya-cli可能需要从源码安装或通过其他包管理器如brew,apt安装请参考其官方文档。4.2 关键配置详解复制环境变量模板文件并开始配置cp .env.example .env现在打开.env文件你需要配置以下关键项邮箱配置 (Himalaya):HIMALAYA_ACCOUNTyour_emailgmail.com HIMALAYA_PASSWORDyour_app_specific_password # 不是邮箱密码 HIMALAYA_FOLDERINBOX # 要监控的邮箱文件夹 AXIS_SENDERalertsaxisbank.com # Axis银行发件人地址请务必为 Himalaya 创建应用专用密码。数据库路径DB_PATH./data/transactions.db建议指向一个data/目录并确保该目录存在。OpenClaw 集成配置OPENCLAW_BASE_URLhttp://localhost:8000 # OpenClaw服务地址 OPENCLAW_API_KEYyour_openclaw_api_key_here WHATSAPP_SKILL_NAMEsend_whatsapp NOTIFICATION_PHONE919876543210 # 接收摘要的WhatsApp号码国际格式如果你还没有部署 OpenClaw可以先注释掉这些配置或者将推送功能暂时改为发送邮件到你自己邮箱。分类规则配置高级分类规则可能被直接写在代码里也可能被放在一个单独的配置文件如categories.json中。如果在.env中配置可能会比较复杂。更常见的做法是在代码中定义一个规则字典或列表。4.3 首次运行与数据初始化配置完成后就可以尝试运行了python axis_tracker.py或者如果脚本被设计为模块python -m axis_tracker首次运行预期行为脚本会读取.env配置。尝试连接邮箱获取未读邮件。解析邮件提取交易数据。在指定的DB_PATH创建 SQLite 数据库和transactions表如果不存在。将解析出的交易数据插入数据库并计算哈希进行去重。可能会在控制台打印处理摘要如“成功处理了 5 笔新交易跳过了 2 笔重复交易。”如果配置了 OpenClaw可能会尝试发送 WhatsApp 摘要。检查结果使用 SQLite 命令行工具查看数据sqlite3 ./data/transactions.db .tables # 查看所有表 SELECT * FROM transactions LIMIT 5; # 查看前5条记录 .exit检查是否生成了仪表盘文件如dashboard.html并用浏览器打开它。4.4 实现自动化定时运行让工具自动定期运行才是自动化的精髓。方案一使用系统 Crontab (Linux/macOS)编辑当前用户的 cron 任务crontab -e添加一行例如每30分钟运行一次并记录日志*/30 * * * * cd /path/to/your/openclaw-tools/axis-spending /path/to/your/venv/bin/python axis_tracker.py /tmp/axis_tracker.log 21关键解释cd ...确保在正确的目录下执行这样才能找到.env和数据库文件。/path/to/your/venv/bin/python使用虚拟环境中的 Python 解释器确保依赖包可用。 /tmp/axis_tracker.log 21将脚本的标准输出和错误输出都追加到日志文件中便于排查问题。方案二使用 GitHub Actions (推荐免费且可靠)在项目根目录的.github/workflows/下创建一个 YAML 文件例如run-axis-spending.ymlname: Run Axis Spending Tracker on: schedule: # 每30分钟运行一次使用UTC时间 - cron: */30 * * * * # 也可以手动触发 workflow_dispatch: jobs: track-spending: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkoutv3 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.10 - name: Install dependencies run: | cd axis-spending pip install -r requirements.txt # 可能需要额外安装himalaya # 例如: curl -sSL https://raw.githubusercontent.com/... | bash - name: Run tracker env: # 将你在本地.env文件里的所有配置都在这里以GitHub Secrets方式设置 HIMALAYA_ACCOUNT: ${{ secrets.HIMALAYA_ACCOUNT }} HIMALAYA_PASSWORD: ${{ secrets.HIMALAYA_PASSWORD }} AXIS_SENDER: ${{ secrets.AXIS_SENDER }} DB_PATH: ./data/transactions.db # ... 其他所有环境变量 run: | cd axis-spending python axis_tracker.py你需要将.env中的所有敏感信息都在 GitHub 仓库的 Settings - Secrets 中配置好。GitHub Actions 会在云端虚拟机中按照你设定的时间表自动执行这个工作流。实操心得我更推荐使用 GitHub Actions。它免费、可靠并且与代码仓库集成度高。日志直接在 GitHub 上查看非常方便。更重要的是它不依赖你本地电脑的开机状态真正实现了“云端自动化”。唯一的限制是免费账户的 Actions 运行时间每月有一定限额但对于半小时跑一次的小脚本来说完全够用。5. 常见问题排查与进阶技巧即使按照指南操作你也可能会遇到一些问题。这里我总结了一些常见坑点和解决思路。5.1 邮件抓取失败问题现象脚本报错无法连接到邮箱或读取邮件。检查点 1应用专用密码。确保你使用的是为 Himalaya 生成的应用专用密码而不是邮箱登录密码。对于 Gmail需要在 Google 账户的“安全性”-“两步验证”-“应用专用密码”中生成。检查点 2IMAP 服务是否开启。登录你的邮箱网页版在设置中检查 IMAP 协议是否已启用Gmail 默认开启但有些邮箱需要手动打开。检查点 3防火墙或网络问题。如果你在公司网络可能屏蔽了非标准端口。尝试更换端口如 993 是 IMAPS 标准端口。检查点 4Himalaya 配置。可以先在命令行手动测试 Himalaya 是否能正常工作himalaya --account default list。你可能需要先运行himalaya add account来交互式地添加账户配置。5.2 交易解析错误或无数据问题现象脚本运行成功但数据库里没有新记录或者记录的分类、金额错误。检查点 1邮件格式是否匹配。银行可能更新了邮件模板。打开一封最新的交易邮件将正文内容复制出来和你脚本中的正则表达式进行在线测试如使用 regex101.com 看是否能正确匹配和捕获分组。检查点 2发件人地址。检查AXIS_SENDER配置是否准确。有时银行不同业务的通知邮件来自不同的地址如信用卡和储蓄卡。检查点 3去重哈希冲突。极少数情况下不同的交易可能生成相同的哈希虽然概率极低。可以临时修改脚本在处理每笔交易时打印出其计算的哈希值和详细信息进行比对。5.3 数据库锁或权限问题问题现象脚本报错提示数据库被锁定或无法写入。检查点 1并发访问。确保没有多个进程或线程同时写入同一个 SQLite 数据库文件。SQLite 在写入时会对数据库加锁。如果你的脚本可能被频繁触发考虑在代码中增加文件锁fcntl或portalocker或使用更高级的并发控制。检查点 2文件路径权限。确保运行脚本的用户对DB_PATH所在的目录有读写权限。特别是在 Docker 或 GitHub Actions 环境中要注意文件路径的映射和权限。5.4 OpenClaw 集成失败问题现象数据处理正常但 WhatsApp 摘要发送失败。检查点 1OpenClaw 服务状态。确认 OpenClaw 服务正在运行并且OPENCLAW_BASE_URL配置正确。可以通过浏览器访问http://localhost:8000/docs如果开了 API 文档或直接用curl测试一个简单接口。检查点 2技能名称与参数。确认WHATSAPP_SKILL_NAME与 OpenClaw 中注册的技能名称完全一致并且传入的参数格式符合该技能的要求。查看 OpenClaw 的日志或 API 响应通常会有更详细的错误信息。检查点 3备用通知方案。在 OpenClaw 不可用时可以降级为发送邮件通知或者将错误信息记录到日志中。不要因为一个环节失败导致整个流程中断。5.5 性能优化与扩展思路当你的交易记录积累到成千上万条时可能需要考虑性能。数据库索引为经常用于查询的字段添加索引可以极大提升仪表盘加载和分类筛选的速度。例如为transaction_date和category字段添加索引CREATE INDEX idx_date ON transactions (transaction_date); CREATE INDEX idx_category ON transactions (category);可以在数据库初始化脚本中完成这个操作。增量处理与状态标记目前的逻辑可能是每次全量扫描未读邮件。更高效的做法是记录上次处理到的邮件 UIDHimalaya 支持下次只扫描比这个 UID 更新的邮件。扩展为多银行支持axis-spending的架构很容易扩展。你可以复制axis-spending文件夹重命名为hdfc-spending然后修改其中的正则表达式规则和发件人匹配逻辑就能支持 HDFC 银行的邮件。甚至可以设计一个抽象基类让不同的银行解析器继承它实现代码复用。数据导出与备份定期将 SQLite 数据库导出为 CSV 或 Excel 文件并存放到云存储如 Google Drive, Dropbox进行备份。可以写一个简单的备份脚本也通过 GitHub Actions 定期执行。这个openclaw-tools项目虽然目前只包含一个工具但它清晰地展示了一种构建个人自动化系统的范式模块化、可组合、关注点分离。从抓取邮件到推送消息每一个环节你都可以深入下去替换成更强大的组件比如用更复杂的 NLP 模型替代正则分类用 Metabase 替代简单的 Plotly 图表。最重要的是它提供了一个可以立即上手、解决实际问题的起点。当你成功运行起自己的消费追踪器看着 WhatsApp 自动收到每日账单摘要时那种“机器替我干活”的成就感正是驱动我们不断探索自动化的最大乐趣。