feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
移植自 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 带网关原话 / 正常返回)。
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
---
|
||||
name: inbox_refine
|
||||
version: 1.1.0
|
||||
description: 知识库收件箱提纯——每日将 00_inbox/ 内容分类归档到知识库,更新首页统计和变更日志
|
||||
triggers:
|
||||
- 提纯
|
||||
- 收件箱提纯
|
||||
- 归档inbox
|
||||
- inbox refine
|
||||
- 整理收件箱
|
||||
- 归档知识
|
||||
- 提纯收件箱
|
||||
---
|
||||
|
||||
# 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 |
|
||||
|
||||
## 去重规则
|
||||
|
||||
1. 读取目标目录已有文件,提取 title 和 tags
|
||||
2. 标题相似度 > 0.8 → 合并(补充细节,不新建)
|
||||
3. 内容完全一致 → 跳过,记录日志
|
||||
4. 同一事实新旧矛盾 → 新事实覆盖,旧值写入 previous_version
|
||||
|
||||
## Frontmatter 模板
|
||||
|
||||
```yaml
|
||||
---
|
||||
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` 顶部追加:
|
||||
```markdown
|
||||
## 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)
|
||||
- 首页更新失败 → 只记录日志,不阻断归档流程
|
||||
Reference in New Issue
Block a user