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,224 @@
|
||||
# mc 命令参考手册 — Matrix v5.2
|
||||
|
||||
> 统一 CLI 入口,替代旧版 matrix.py。
|
||||
> 智能体通过 mc 命令调用 Matrix,不需要直接操作 Python 脚本。
|
||||
|
||||
---
|
||||
|
||||
## 安装
|
||||
|
||||
```bash
|
||||
cd ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix
|
||||
chmod +x mc
|
||||
# 可选:ln -s $(pwd)/mc /usr/local/bin/mc
|
||||
```
|
||||
|
||||
Python 路径自动检测(AGENTOS_PYTHON > agent-os venv > 系统 python3),换机无需修改。
|
||||
|
||||
---
|
||||
|
||||
## 命令一览
|
||||
|
||||
### 录制系统(v5.1 新增)
|
||||
|
||||
```bash
|
||||
# 开始录制
|
||||
mc record start --account douyin_test
|
||||
# → 启动 Camoufox,你在浏览器操作,关键节点按数字键 1-8 标记
|
||||
# 按 0 结束录制
|
||||
|
||||
# 查看录制包
|
||||
mc record list
|
||||
|
||||
# 分析录制包
|
||||
mc record analyze <录制包路径>
|
||||
|
||||
# 导出为蓝图+代码
|
||||
mc record export <录制包路径>
|
||||
|
||||
# 删除录制包
|
||||
mc record delete <录制包路径>
|
||||
```
|
||||
|
||||
### 定向评论(v5.1 新增)
|
||||
|
||||
```bash
|
||||
# 创建一个仅包含 "打开视频→评论" 的蓝图,然后执行:
|
||||
mc run --accounts douyin_test --blueprints douyin_comment_test --rounds 1 --keep
|
||||
|
||||
# 或手动创建自定义蓝图:
|
||||
# 1. 在 blueprints/ 下创建 JSON 文件
|
||||
# 2. 包含 goto_url → wait_watch → open_comments → post_comment
|
||||
# 3. 用 mc run 执行
|
||||
```
|
||||
|
||||
### 养号执行
|
||||
|
||||
```bash
|
||||
# 批量养号(推荐)
|
||||
mc run --accounts douyin_01,douyin_02 --blueprints nurture_v1 --rounds 3 --mix --interval 45-90
|
||||
|
||||
# 指定语料库
|
||||
mc run --accounts douyin_01 --blueprints nurture_v1 --rounds 3 --corpus daily_hot
|
||||
|
||||
# 查看帮助
|
||||
mc run --help
|
||||
```
|
||||
|
||||
| 参数 | 说明 | 默认值 |
|
||||
|------|------|--------|
|
||||
| `--accounts` | 逗号分隔的账号列表 | 必填 |
|
||||
| `--blueprints` | 逗号分隔的蓝图列表 | 必填 |
|
||||
| `--rounds` | 每账号执行轮数 | 10 |
|
||||
| `--mix` | 混合随机模式(每轮随机选蓝图) | 顺序模式 |
|
||||
| `--interval` | 轮间间隔(秒),支持范围 `45-90` | 30-60 |
|
||||
| `--corpus` | 逗号分隔的语料库分类 | 无 |
|
||||
| `--daemon` | 后台运行模式 | 否 |
|
||||
| `--engine` | 引擎(auto/camoufox) | auto |
|
||||
| `--keep` | 执行完后保留浏览器(需手动关) | 否 |
|
||||
| `--json` | 输出 JSON 格式结果 | 否 |
|
||||
|
||||
### 账号管理
|
||||
|
||||
```bash
|
||||
mc account list # 列出所有账号及状态
|
||||
mc account login <name> # 首次手动登录(打开浏览器等用户操作)
|
||||
mc account status [name] # 查看账号登录状态
|
||||
mc account export # 导出账号配置
|
||||
mc account import <path> # 导入账号配置
|
||||
```
|
||||
|
||||
### 注册新账号(Dashboard 推荐)
|
||||
|
||||
在 Dashboard 上完成:
|
||||
1. 启动 Dashboard → 左侧「矩阵」→「短信与管理」
|
||||
2. 底部「注册新账号」表单
|
||||
3. 选平台、填手机号、填备注名 → 点确认
|
||||
4. 浏览器自动打开 → 扫码登录 → 后续可采集昵称
|
||||
5. 登录后点「采集昵称」获取昵称/粉丝数
|
||||
|
||||
也可以通过 CLI:
|
||||
```bash
|
||||
python scripts/matrix.py account create --platform douyin --phone 138xxxx
|
||||
```
|
||||
|
||||
### 短信 API(Dashboard 推荐)
|
||||
|
||||
Dashboard 短信页面:
|
||||
1. 左侧「矩阵」→「短信与管理」
|
||||
2. 下拉选账号 → 点「查短信」
|
||||
3. 系统自动解析抖音/小红书验证码
|
||||
|
||||
API:
|
||||
```bash
|
||||
# 查短信
|
||||
GET /api/matrix/sms/test/{phone_or_account}
|
||||
|
||||
# 查看所有账号手机号
|
||||
GET /api/matrix/sms/accounts
|
||||
```
|
||||
|
||||
### Dashboard 启动
|
||||
|
||||
```bash
|
||||
cd ~/workbuddy-agent-os/agent-sync/05_tools/10_dashboard
|
||||
nohup ~/.workbuddy/binaries/python/envs/agent-os/bin/uvicorn app:app --host 0.0.0.0 --port 9988 &
|
||||
# 浏览器打开 http://localhost:9988
|
||||
# 左侧「矩阵」:短信 / 录制 / 账号管理
|
||||
```
|
||||
|
||||
### 新机部署说明
|
||||
|
||||
新机部署后同步账号:
|
||||
```bash
|
||||
bash ~/workbuddy-agent-os/agent-sync/00_bootstrap/init.sh
|
||||
# 自动拉取仓库 → 安装依赖 → 同步本机账号
|
||||
```
|
||||
|
||||
`accounts_registry.yaml` 中 `assigned_machine` 标记为当前机器 UID 的账号会自动同步到本机。
|
||||
|
||||
### 蓝图管理
|
||||
|
||||
```bash
|
||||
mc blueprint list # 列出所有蓝图
|
||||
mc blueprint show <name> # 查看蓝图详情
|
||||
```
|
||||
|
||||
### 语料库
|
||||
|
||||
```bash
|
||||
mc corpus list # 查看语料分类
|
||||
mc corpus add <平台> "语料" # 添加语料
|
||||
```
|
||||
|
||||
### 状态查询
|
||||
|
||||
```bash
|
||||
mc status all # 全局状态(浏览器+账号)
|
||||
mc status accounts # 账号登录状态
|
||||
mc status browsers # 浏览器运行状态
|
||||
```
|
||||
|
||||
### 代理管理
|
||||
|
||||
```bash
|
||||
mc proxy list # 代理列表
|
||||
mc proxy test <name> # 测试代理
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 自动化任务
|
||||
|
||||
### 每日养号(定时执行)
|
||||
|
||||
```bash
|
||||
# 完整执行
|
||||
bash ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/scripts/nurture_daily.sh
|
||||
|
||||
# 仅查看命令(不执行)
|
||||
bash ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/scripts/nurture_daily.sh --dry
|
||||
|
||||
# 仅跑第1组
|
||||
bash ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/scripts/nurture_daily.sh --group 1
|
||||
```
|
||||
|
||||
日志:`/tmp/nurture_daily_YYYYMMDD.log`
|
||||
|
||||
### 结构化日志
|
||||
|
||||
每次 mc run 执行后自动写入:
|
||||
|
||||
`agent-local/tools/matrix/logs/run_{date}_{account}.jsonl`
|
||||
|
||||
查询:
|
||||
```python
|
||||
from mc.runlog import get_today_summary
|
||||
print(get_today_summary())
|
||||
# → {"date": "20260609", "accounts": {"douyin_01": {"runs": 3, "last_success": 8, ...}}}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 与旧版 matrix.py 对照
|
||||
|
||||
| 旧命令 | 新命令 |
|
||||
|--------|--------|
|
||||
| `python matrix.py account list` | `mc account list` |
|
||||
| `python matrix.py account login X` | `mc account login X` |
|
||||
| `python matrix.py nurture run -a X -r 10` | `mc run --accounts X --rounds 10 ...` |
|
||||
| `python matrix.py status all` | `mc status all` |
|
||||
| `python matrix.py config blueprint list` | `mc blueprint list` |
|
||||
|
||||
---
|
||||
|
||||
## 智能体调用约定
|
||||
|
||||
智能体通过 WorkBuddy 技能 `matrix` 触发。SKILL.md 定义了触发词和对应的 mc 命令。
|
||||
|
||||
当用户说"养号"、"执行蓝图"、"账号状态"时,智能体:
|
||||
1. 加载 `02_skills/matrix/SKILL.md`
|
||||
2. 根据触发词匹配对应的 mc 命令
|
||||
3. 执行命令并汇报结果
|
||||
|
||||
**不需要读源码。不需要知道 engine.py 内部细节。**
|
||||
Reference in New Issue
Block a user