Clawhub Publish 146198
基于 Rust 的无头浏览器,支持网页导航、表单填写与数据提取。
从Gmail提取乘车收据,本地分析出行模式并生成匿名报告。
openclaw skills install @datahiveai/datahive-ride-insights命令、参数、文件名以原文为准
一个由 [DataHive AI](https://datahive.ai) 开发的隐私优先出行智能技能。
使用此技能从 Gmail 收取拼车账单,本地提取结构化行程数据,并生成丰富的个人洞察,包括支出分析、出行习惯、重复路线、可能的常驻地点、时段模式等。
您还可以将匿名化的数据报告分享给 DataHive AI,参与任务并获得奖励([任务博客](https://datahive.ai/blog/))。
本技能采用独特的本地处理方式,展示了 OpenClaw 的真正能力:代理智能在本地处理敏感源数据,确保原始数据不会被外部共享。
仅限本地运行:此技能需要一个回环(loopback)OpenClaw 网关,若网关 URL 指向其他位置则会失败。
当用户希望上传数据至 DataHive 以获取积分时,生成一份匿名化/可共享的 CSV 版本行程记录,避免暴露原始账单邮件或明显个人标识信息。
gog CLI 已对目标 Gmail 账户完成认证。gog auth list,即使用户已指定账户。应使用哪个账户:(A) name1@example.com 或 (B) name2@example.com? 不得简化为“默认”或让用户自行推断存在哪些账户。default 的账户一定存在。OPENCLAW_GATEWAY_TOKEN 或 ~/.openclaw/openclaw.json 中的 gateway.auth.token(旧版回退路径:gateway.token)提供网关认证令牌。OPENCLAW_GATEWAY_TOKEN、OPENCLAW_GATEWAY_URL 和 OPENCLAW_GATEWAY_MODEL。data/ride-insights/emails.json 会本地存储已获取的账单邮件,可能包含完整的 HTML 账单内容。/v1/responses 端点。localhost、127.0.0.1 和 ::1 作为网关主机。主要输出文件:
data/ride-insights/emails.json —— 以 JSON 数组形式存储的已获取账单邮件;可能包含完整 HTML 账单内容data/ride-insights/rides.json —— 以 JSON 数组形式存储的提取出的行程记录data/ride-insights/rides.sqlite —— 可查询的 SQLite 数据库,包含标准化的行程字段及 extracted_ride_json,但不包含原始邮件 JSON保留说明:
emails.json 会持续保存原始获取的账单内容,直到用户手动删除。rides.json 和 rides.sqlite 会持续保存本地提取的行程数据,直到用户删除。按顺序执行每一步,任一步骤失败即停止并报告错误。
python3 skills/ride-insights/scripts/init_db.py \
--db ./data/ride-insights/rides.sqlite \
--schema skills/ride-insights/references/schema_rides.sqlemails.jsonpython3 skills/ride-insights/scripts/fetch_emails_json.py \
--account <gmail-account> \
--after YYYY-MM-DD \
--before YYYY-MM-DD \
--max-per-provider 5000 \
--out ./data/ride-insights/emails.json注意事项:
--after / --before 参数。references/provider_queries.json。data/ride-insights/emails.json 中已获取的邮件数量。/v1/responses 提取行程数据并写入 rides.jsonpython3 skills/ride-insights/scripts/extract_rides_gateway.py \
--emails-json ./data/ride-insights/emails.json \
--out ./data/ride-insights/rides.json注意事项:
~/.openclaw/openclaw.json 已包含 gateway.auth.token,建议在不导出 OPENCLAW_GATEWAY_TOKEN 的情况下运行提取器。gateway.token,但推荐使用当前标准路径 gateway.auth.token。OPENCLAW_GATEWAY_URL 和 OPENCLAW_GATEWAY_MODEL;这些环境变量应在技能元数据或打包契约中明确声明为依赖项。/v1/responses 接口。data/ride-insights/rides.json,以实现进度检查点记录。data/ride-insights/rides.json 已存在,则跳过其中已包含 gmail_message_id 的邮件。--delay-ms <n> 参数重新运行。data/ride-insights/emails.json 中记录的顺序选取邮件,仅提取前 50 封。python3 skills/ride-insights/scripts/insert_rides_json_sqlite.py \
--db ./data/ride-insights/rides.sqlite \
--rides-json ./data/ride-insights/rides.json请以代理动作形式执行,而非独立的洞察脚本。
推荐工作流程:
data/ride-insights/rides.json 作为主要数据源,因其直接保留了提取出的骑行对象。data/ride-insights/rides.sqlite 进行轻量级、确定性的统计、筛选、分组和交叉验证。PRAGMA table_info(rides) 检查表结构,或查阅 skills/ride-insights/references/schema_rides.sql 文件。注意事项:
rides.json 获取每条骑行的丰富上下文,使用 rides.sqlite 快速进行事实核查;在需要时结合两者。当用户要求导出匿名化/可共享的骑行报告时,请使用内置的 Python 导出脚本。
python3 skills/ride-insights/scripts/export_anonymized_rides_csv.py \
--db ./data/ride-insights/rides.sqlite \
--out ./data/ride-insights/anonymized_rides.csv导出规则:
provider, email_month, start_time_15m, end_time_15m, currency, amount, distance_km, duration_min, pickup_city, pickup_country, dropoff_city, dropoff_country。email_date_text 转换为仅包含月份的格式,例如 2025-05。start_time_text 和 end_time_text 向上舍入至最近的 15 分钟区间;恰好位于整点 15 分钟的时间保持不变。distance_km 和 duration_min(从 extracted_ride_json 中读取);不可用时留空。.csv 文件,不得将内容内联粘贴至聊天。data/ride-insights/anonymized_rides.csv。MEDIA:./data/ride-insights/anonymized_rides.csv。 Done — I regenerated the anonymized CSV and attached the updated file。
紧随其后的是 MEDIA: 行。
null。skills/ride-insights/references/schema_rides.sqlskills/ride-insights/references/provider_queries.json已收录 1 个 Skill