[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80189":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":14,"starSnapshotCount":14,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},80189,"TzFilm-Douyin-Tool","TradingAi666\u002FTzFilm-Douyin-Tool","TradingAi666","自动从抖音创作者中心导出视频数据，支持 macOS 后台定时运行",null,"JavaScript",225,54,1,0,23,44,129,69,5.22,"MIT License",false,"main",true,[],"2026-06-12 02:03:59","# 抖音创作者数据抓取 🎬\n\n> 每小时自动从抖音创作者后台导出数据，零 API Key，纯 AppleScript 硬刚 Chrome。\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green.svg)](LICENSE)\n[![Platform: macOS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-macOS-lightgrey)]()\n\n## 为什么会有这个项目\n\n我是抖音 AI\u002F科技区的创作者。每天想看视频数据，就得手动打开 `creator.douyin.com` → 切「投稿列表」→ 点「导出数据」→ 下载 Excel → 自己分析。烦。\n\n于是写了个脚本，让 AppleScript 操控 Chrome 自动化这套流程。结果发现——**这事比想象中恶心一百倍**。\n\n## 踩坑笔记 🕳️\n\n过程中踩了五个大坑，每个都卡了我好几天。全写进 `SKILL.md` 了，当反面教材看也行：\n\n| # | 坑 | 一句话 | 谁可能遇到 |\n|---|---|---|---|\n| 1 | **TCC 沙箱** | launchd 进程读不了 `~\u002FDownloads`，哪怕加了 Full Disk Access 也没用 | macOS 上跑定时任务的 |\n| 2 | **Chrome 后台 tab 静默吞下载** | AppleScript 注入的 `click()` 不算 user gesture，下载直接被 Chrome 拦截 | 做浏览器自动化的 |\n| 3 | **AppleScript 里 Unicode 转义全废** | `\\u5bfc\\u51fa` 写进 AppleScript 静默失败，必须用 `charCodeAt()` | 处理中文 UI 的 |\n| 4 | **Garfish 微前端 DOM 隔离** | 字节的 Garfish 框架让 `body.innerText` 只返回 460 个字符的导航栏 | 逆向字节系产品的 |\n| 5 | **launchd 不设 HOME** | `os.path.expanduser(\"~\")` 在后台返回错误路径 | 写 macOS launchd 的 |\n\n### 怎么绕过的？\n\n- **TCC 沙箱**：`launchd Python → osascript → do shell script → bash → mv`，利用 osascript 继承 GUI session 的 TCC 上下文\n- **后台 Tab 下载**：三行 AppleScript：`activate` + `set active tab index` + `set index of w to 1`，强制把 Chrome 拉到前台\n- **Unicode 匹配**：放弃 `\\u`，用 `\"导出数据\".charCodeAt(0) === 23548` 硬匹配\n\n## 它能做什么\n\n```\n抖音创作者中心 (creator.douyin.com)\n    │\n    │ AppleScript 操控 Chrome\n    ▼\n[切换「投稿列表」tab]\n    │\n    │ 点击「导出数据」\n    ▼\n[下载 作品列表.xlsx]\n    │\n    │ openpyxl 解析\n    ▼\n[SQLite 数据库]\n    │\n    │ 可选：Telegram Bot 推送\n    ▼\n📊 每次运行都有最新的 100 条视频数据\n```\n\n- ✅ 抓取全部视频的播放\u002F点赞\u002F评论\u002F分享\u002F收藏\u002F完播率\u002FCTR\n- ✅ 历史快照保留，可追踪增长\n- ✅ launchd 每小时自动跑，完全无人值守\n- ✅ 纯净 — 零 API Key，不需要任何第三方服务\n- 💬 **新！智能评论自动回复** — 导出评论 → AI 生成回复 → Playwright 自动发送\n\n## 5 分钟上手\n\n### 前置条件\n\n- 🍎 macOS\n- 🌐 Google Chrome\n- 🔑 已登录 [creator.douyin.com](https:\u002F\u002Fcreator.douyin.com)\n- ⚙️ Chrome 菜单 → **显示** → **开发者** → 勾选 ✅ **允许 Apple 事件中的 JavaScript**\n\n### 安装\n\n```bash\n# 1. 装依赖\npip install openpyxl\n\n# 2. 克隆\ngit clone https:\u002F\u002Fgithub.com\u002FTradingAi666\u002FTzFilm-Douyin-Tool.git\ncd TzFilm-Douyin-Tool\n```\n\n### 跑一次试试\n\n```bash\npython3 douyin_hourly.py\n```\n\n第一次跑，macOS 可能会弹窗问「允许 Terminal 控制 Google Chrome」→ 点**好**。\n\n### 设为定时任务\n\n```bash\n# 编辑 plist，把 YOUR_USERNAME 换成你的 macOS 用户名\n# 然后：\ncp com.hermes.douyin-tracker.plist ~\u002FLibrary\u002FLaunchAgents\u002F\nlaunchctl load ~\u002FLibrary\u002FLaunchAgents\u002Fcom.hermes.douyin-tracker.plist\n```\n\n搞定。以后每小时自动跑一次。\n\n### 配合 Hermes Agent 用\n\n```bash\n# 把 SKILL.md 放到 Hermes skills 目录\nmkdir -p ~\u002F.hermes\u002Fskills\u002Fdouyin\ncp SKILL.md ~\u002F.hermes\u002Fskills\u002Fdouyin\u002FTzFilm-Douyin-Tool.md\n```\n\n然后跟 Hermes 说一句：\n\n> @Hermes 拉取抖音数据\n\nAgent 会自动按 SKILL.md 里的流程操作。\n\n### 想推送到 Telegram？\n\n在 `~\u002F.hermes\u002F.env` 里加两行：\n\n```\nTELEGRAM_BOT_TOKEN=你的Bot Token\nTELEGRAM_HOME_CHANNEL=你的Chat ID\n```\n\n## 文件清单\n\n| 文件 | 说明 |\n|---|---|\n| `douyin_hourly.py` | 🔧 核心抓取脚本（~500 行 Python + 内嵌 AppleScript） |\n| `douyin_new_video_tracker.py` | 🔮 新视频追踪+预测（每30分钟采集 → 同期对比 → 预测最终播放） |\n| `prediction_query.py` | 📊 查询追踪数据：最新快照 \u002F 增长曲线 \u002F 24h倍率 |\n| `auto_reply.py` | 💬 Python 一键封装：`export` 导出评论 \u002F `reply` 批量回复 |\n| `auto-reply\u002F` | 🎭 Node.js + Playwright 浏览器自动化（评论抓取 & 发送） |\n| `schema.sql` | 🗃️ 完整数据库结构（含 video_tracking 预测表） |\n| `SKILL.md` | 📖 AI Agent 操作手册（含全部踩坑记录和正确的做法） |\n| `com.hermes.douyin-tracker.plist` | ⚙️ launchd 配置模板 |\n| `README.md` | 📄 你正在看的东西 |\n\n---\n\n## 🔮 新功能：视频播放预测\n\n上传新视频后，可以用 `douyin_new_video_tracker.py` 启动追踪：\n\n```bash\n# 初始化追踪（记录基线 + 首次预测）\npython3 douyin_new_video_tracker.py --init --title \"你的视频标题\"\n\n# 之后每30分钟跑一次，自动对比历史同期视频预测最终播放量\npython3 douyin_new_video_tracker.py --title \"你的视频标题\"\n```\n\n### 预测原理（v3 同期对比模型）\n\n```\n预测最终 = 当前播放 × 同期倍率中位数 × CTR修正 × 互动修正 × 均时长修正\n```\n\n1. **同期倍率**：从你的历史视频中，找到同一发布时长（如 2.3h）时的播放量，计算它们到最终播放的倍率中位数\n2. **三维质量修正**：CTR \u002F 互动率 \u002F 均时长 分别与同期视频做百分位对比 → 优秀者获得加成，落后则打折\n3. **置信度**：随追踪时间增长（\u003C2h→25%，≥24h→90%），初期粗、后期准\n\n### 查询追踪数据\n\n```bash\n# 所有追踪视频的最新状态\npython3 prediction_query.py latest\n\n# 完整增长曲线\npython3 prediction_query.py growth\n\n# 24h→最终倍率（模型校准）\npython3 prediction_query.py ratios\n\n# 指定视频的完整记录\npython3 prediction_query.py track \"视频标题\"\n```\n\n### 配 Hermes Agent 用\n\n把追踪脚本加入 cron，每 30 分钟自动更新：\n\n```bash\n# Hermes 里一句搞定：\n@hermes 追踪新视频 --init --title \"xxx\"\n# 然后自动生成 48 次 cron（24h × 每30min）\n```\n\n## 数据库结构\n\n完整 schema 见 [`schema.sql`](schema.sql)。两个模块共用同一数据库：\n\n| 表 | 写入方 | 用途 |\n|---|---|---|\n| `video_stats` | `douyin_hourly.py` | 每小时原始数据快照（为预测模型提供历史同期数据） |\n| `video_tracking` | `douyin_new_video_tracker.py` | 每30分钟检查点（含预测结果） |\n| `video_tracking_meta` | `douyin_new_video_tracker.py` | 追踪元信息（基线、活跃状态） |\n\n关键查询示例见 `schema.sql` 末尾。\n\n---\n\n## 💬 新功能：评论自动回复\n\n不想手动一条条回复评论？这套工具可以自动搞定：**导出评论 → AI 生成回复 → Playwright 模拟人工逐条发送**。\n\n### 首次安装\n\n```bash\n# 安装 Node.js 依赖 + Playwright 浏览器 + 登录\npython3 auto_reply.py setup\n```\n\n> 运行后会弹出 Chrome，请手动登录抖音创作者后台，回终端按回车保存。\n\n### 导出评论\n\n```bash\n# 扫描指定视频的全部评论\npython3 auto_reply.py export \"视频标题关键词\"\n```\n\n导出结果保存在 `auto-reply\u002Fcomments-output\u002Funreplied-comments.json`。\n\n### AI 生成回复文案\n\n你需要用任意 AI 工具（ChatGPT \u002F Claude \u002F Hermes 等）为这些评论生成回复，保存为：\n\n```\nauto-reply\u002Fcomments-output\u002Fauto-reply-plan.json\n```\n\n格式：\n```json\n{\n  \"selectedWork\": {\"title\": \"...\", \"publishText\": \"...\"},\n  \"comments\": [\n    {\n      \"username\": \"用户A\",\n      \"commentText\": \"原评论内容\",\n      \"replyMessage\": \"AI生成的回复\"\n    }\n  ]\n}\n```\n\n### 批量发送回复\n\n```bash\n# 试运行预览（不真正发送）\npython3 auto_reply.py reply \"视频标题关键词\" --dry-run\n\n# 正式发送（每批30条）\npython3 auto_reply.py reply \"视频标题关键词\"\n```\n\n脚本自动打开 Playwright 浏览器，逐条匹配评论 → 点击回复 → 输入文案 → 发送。支持跨平台（macOS \u002F Windows \u002F Linux），不依赖 AppleScript。\n\n---\n\n## 注意事项\n\n- 🔴 抓取时会抢占 Chrome 焦点约 30 秒（硬伤，除非改用 CDP）\n- 🟡 抖音创作者中心的 DOM 结构偶尔变动，如果抓取失败，可能是 Garfish 容器 ID 变了（SKILL.md 里有调试方法）\n- 🟢 运行频率建议 ≥ 1 小时一次，太频繁可能触发风控\n- 🟢 抖音后台最多导出最新的 ~100 条视频，旧视频的历史数据从快照中恢复\n\n## License\n\nMIT — 随便用，欢迎 PR。\n\n---\n\n⭐ 如果对你也有用，给个 Star？有什么问题直接开 Issue，或者群里找我。\n","TzFilm-Douyin-Tool 是一个用于自动从抖音创作者中心导出视频数据的工具，支持在 macOS 系统上后台定时运行。该项目通过 AppleScript 控制 Chrome 浏览器自动化执行导出操作，无需任何 API Key 或第三方服务介入，实现了对播放、点赞、评论等关键指标的数据抓取，并将结果存储于 SQLite 数据库中以便进一步分析。此外，它还具备智能评论自动回复功能，能够利用 AI 生成并发送回复。适用于需要定期监控和分析自身账号表现的抖音内容创作者，尤其是那些希望减少手动操作时间、提高工作效率的人士。",2,"2026-06-11 03:59:35","CREATED_QUERY"]