移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。
**目前能用的(真环境实测,非推断)**:
profile/other : 200, 7075 字节 —— 博主主页指标(粉丝/获赞/作品数/昵称)
aweme/detail : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)
**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
挑中的恰好是「批量拉作品列表」这个最敏感的动作。
2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
代价,过几小时要重测)。
所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。
**排查中控住变量后得到的两条事实**(都写进注释了):
· `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
(我先前猜的 sec-ch-ua 不是关键。)
· 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
从 CDP 取齐 cookie + UA + hints,而不是各自写死。
「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。
测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
4.0 KiB
4.0 KiB
name, version, description, triggers
| name | version | description | triggers | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| inbox_refine | 1.1.0 | 知识库收件箱提纯——每日将 00_inbox/ 内容分类归档到知识库,更新首页统计和变更日志 |
|
Inbox Refine 技能
概述
将 00_inbox/ 中的原始内容按知识属性分类,应用模板后归档到对应目录,并更新知识库首页和变更日志。
触发条件
- 每日凌晨 3:00 自动执行(WorkBuddy 自动化)
- 手动说"提纯"、"整理收件箱"、"inbox refine"
工作流
1. 扫描 00_inbox/ 所有 .md 文件
2. 逐个读取 → 分析内容
3. 确定分类:
- nature:fact/method/concept/reference/data/opinion/quote/axiom/regulation
- domain:从 99_system/taxonomies/domains.md 选择 1-3 个
- confidence:根据 source_type 评分
4. 应用对应模板(99_system/templates/)
5. 生成 ID:KB-YYYYMMDD-NNN
6. 写入目标目录
7. 删除 00_inbox/ 原文件
8. 更新 README.md 统计
9. 更新 CHANGELOG.md
分类决策逻辑
nature 判定
| 内容特征 | nature | 目标目录 |
|---|---|---|
| 已验证的客观事实 | fact | 30_facts/ |
| 可操作的步骤/教程 | method | 20_methods/ |
| 原子概念/基础原理 | concept | 10_concepts/ |
| 公认基础原理 | axiom | 10_concepts/ |
| 法律法规/制度 | regulation | 30_facts/ |
| 论文/文档/外部资料 | reference | 40_references/ |
| 测试数据/基准结果 | data | 30_facts/ |
| 主观看法/推测 | opinion | 60_opinions/ |
| 他人原话/语录 | quote | 60_opinions/ |
confidence 评分
| source_type | confidence |
|---|---|
| official_doc | 0.9 |
| literature | 0.8 |
| experiment | 0.7 |
| personal_exp | 0.5 |
| social_media | 0.3 |
| unknown | 0.4 |
去重规则
- 读取目标目录已有文件,提取 title 和 tags
- 标题相似度 > 0.8 → 合并(补充细节,不新建)
- 内容完全一致 → 跳过,记录日志
- 同一事实新旧矛盾 → 新事实覆盖,旧值写入 previous_version
Frontmatter 模板
---
id: KB-YYYYMMDD-NNN
title: "__标题__"
type: __concept/fact/method/opinion/reference__
status: published
nature: __fact/method/concept/...__
domain: [__领域1__, __领域2__]
subdomain: []
tags: [__标签1__, __标签2__]
confidence: 0.8
source: "__来源URL或出处__"
source_type: __official_doc/literature/personal_exp/...__
date_created: YYYY-MM-DD
date_modified: YYYY-MM-DD
version: 1
previous_version: ""
superseded_by: ""
---
更新首页统计
读取 03_knowledge/README.md,替换 ## 📊 知识统计 下的表格:
- 扫描各目录下 .md 文件数量
- 找出每个目录最近修改的文件日期
- 更新总计行
更新变更日志
在 03_knowledge/CHANGELOG.md 顶部追加:
## YYYY-MM-DD
### 归档
- [nature] title → 目标目录 (KB-YYYYMMDD-NNN)
- ...
依赖
| 包/工具 | 用途 | 安装状态 |
|---|---|---|
| file_read/file_write | 读写文件 | ✅ 内置 |
| python3 | 脚本执行 | ✅ managed |
| oMLX + Qwen3-8B-MLX-4bit | 本地 LLM 辅助分类(可选) | ✅ 已安装 |
路径约定
| 项目 | 路径 |
|---|---|
| 收件箱 | ~/workbuddy-agent-os/agent-sync/03_knowledge/00_inbox/ |
| 知识库根 | ~/workbuddy-agent-os/agent-sync/03_knowledge/ |
| 首页 | ~/workbuddy-agent-os/agent-sync/03_knowledge/README.md |
| 变更日志 | ~/workbuddy-agent-os/agent-sync/03_knowledge/CHANGELOG.md |
| 模板 | ~/workbuddy-agent-os/agent-sync/03_knowledge/99_system/templates/ |
| 分类表 | ~/workbuddy-agent-os/agent-sync/03_knowledge/99_system/taxonomies/ |
| 中文映射 | ~/workbuddy-agent-os/agent-sync/03_knowledge/99_system/taxonomies/folder-aliases.json |
错误处理
- 无法分类的内容 → 保留在 00_inbox/,添加标签
#待分类,记录日志 - 模板应用失败 → 使用最小 Frontmatter(id/title/nature/date_created)
- 首页更新失败 → 只记录日志,不阻断归档流程