移植自 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 带网关原话 / 正常返回)。
331 lines
7.4 KiB
YAML
331 lines
7.4 KiB
YAML
schema_version: '1.0'
|
|
last_updated: 2026-06-15 14:40
|
|
machines:
|
|
chengzigedeAir:
|
|
hostname: chengzigedeAir
|
|
tailscale_host: macbook-air
|
|
tailscale_ip: 100.111.43.6
|
|
ssh_user: chengzige
|
|
uid_prefix: 4cf443bc
|
|
role: master
|
|
os: macOS 26.4 arm64
|
|
note: 主控机器,运行 Dashboard + 养号 + 知识库
|
|
5kechengdeAir:
|
|
hostname: 5kechengdeAir
|
|
tailscale_host: 5macbook-air
|
|
tailscale_ip: 100.72.182.121
|
|
ssh_user: 5kecheng
|
|
uid_prefix: f13b03d1
|
|
role: worker
|
|
os: macOS 25.4 arm64
|
|
note: 养号工人机器
|
|
7kecheng:
|
|
hostname: 7kecheng
|
|
tailscale_host: 7macbook-air
|
|
tailscale_ip: 100.65.35.28
|
|
ssh_user: 7kecheng
|
|
uid_prefix: d19759cf
|
|
role: worker
|
|
os: macOS arm64
|
|
note: 养号工人机器(大量账号)
|
|
accounts:
|
|
- identity: douyin_133
|
|
phone: '13382504284'
|
|
machine: chengzigedeAir
|
|
platforms:
|
|
douyin: douyin_133
|
|
- identity: douyin_133_2
|
|
phone: '13382501975'
|
|
machine: chengzigedeAir
|
|
platforms:
|
|
douyin: douyin_133_2
|
|
- identity: douyin_134
|
|
phone: '13382502745'
|
|
machine: chengzigedeAir
|
|
platforms:
|
|
douyin: douyin_134
|
|
- identity: douyin_01_camo
|
|
phone: '18513308610'
|
|
machine: 5kechengdeAir
|
|
platforms:
|
|
douyin: douyin_01
|
|
xiaohongshu: xhs_01
|
|
- identity: douyin_02_camo
|
|
phone: '18500003366'
|
|
machine: 5kechengdeAir
|
|
platforms:
|
|
douyin: douyin_02
|
|
xiaohongshu: xhs_02
|
|
- identity: douyin_camo01
|
|
phone: '15370108283'
|
|
machine: 5kechengdeAir
|
|
platforms:
|
|
douyin: douyin_camo01
|
|
xiaohongshu: xhs_03
|
|
- identity: phone_18550099569
|
|
phone: '18550099569'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_136
|
|
xiaohongshu: xhs_7
|
|
- identity: phone_15358497926
|
|
phone: '15358497926'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_137
|
|
xiaohongshu: xhs_8
|
|
- identity: phone_13382504673
|
|
phone: '13382504673'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_139
|
|
xiaohongshu: xhs_9
|
|
- identity: phone_15345247890
|
|
phone: '15345247890'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_140
|
|
xiaohongshu: xhs_10
|
|
- identity: phone_18550099363
|
|
phone: '18550099363'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_141
|
|
xiaohongshu: xhs_11
|
|
- identity: phone_13382502194
|
|
phone: '13382502194'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_142
|
|
xiaohongshu: xhs_12
|
|
- identity: phone_13382502334
|
|
phone: '13382502334'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_143
|
|
xiaohongshu: xhs_13
|
|
- identity: phone_13382504570
|
|
phone: '13382504570'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_144
|
|
xiaohongshu: xhs_14
|
|
- identity: phone_18550099050
|
|
phone: '18550099050'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_145
|
|
xiaohongshu: xhs_15
|
|
- identity: phone_15370109706
|
|
phone: '15370109706'
|
|
machine: 7kecheng
|
|
platforms:
|
|
douyin: douyin_146
|
|
xiaohongshu: xhs_16
|
|
- phone: '13382501975'
|
|
platforms:
|
|
xiaohongshu: xhs_13382501975
|
|
machine: chengzigedeAir
|
|
identity: xhs_13382501975
|
|
- phone: '13382502033'
|
|
identity: douyin_13382502033
|
|
platforms:
|
|
douyin: douyin_13382502033
|
|
machine: 5kechengdeAir
|
|
- phone: '18550095271'
|
|
identity: douyin_18550095271
|
|
platforms:
|
|
douyin: douyin_18550095271
|
|
machine: 5kechengdeAir
|
|
- phone: '18550099069'
|
|
identity: douyin_18550099069
|
|
platforms:
|
|
douyin: douyin_18550099069
|
|
machine: 5kechengdeAir
|
|
- phone: '18550099707'
|
|
identity: douyin_18550099707
|
|
platforms:
|
|
douyin: douyin_18550099707
|
|
machine: 5kechengdeAir
|
|
- phone: '18550099245'
|
|
identity: douyin_18550099245
|
|
platforms:
|
|
douyin: douyin_18550099245
|
|
machine: 5kechengdeAir
|
|
- phone: '15358427890'
|
|
identity: douyin_15358427890
|
|
platforms:
|
|
douyin: douyin_15358427890
|
|
machine: 5kechengdeAir
|
|
- phone: '18550093602'
|
|
identity: douyin_18550093602
|
|
platforms:
|
|
douyin: douyin_18550093602
|
|
machine: 5kechengdeAir
|
|
- phone: '13382504130'
|
|
identity: douyin_13382504130
|
|
platforms:
|
|
douyin: douyin_13382504130
|
|
machine: 5kechengdeAir
|
|
- phone: '18550099018'
|
|
identity: douyin_18550099018
|
|
platforms:
|
|
douyin: douyin_18550099018
|
|
machine: 5kechengdeAir
|
|
- phone: '13382502664'
|
|
identity: douyin_13382502664
|
|
platforms:
|
|
douyin: douyin_13382502664
|
|
machine: 5kechengdeAir
|
|
- phone: '13382501256'
|
|
identity: douyin_13382501256
|
|
platforms:
|
|
douyin: douyin_13382501256
|
|
machine: 5kechengdeAir
|
|
- phone: '13382502342'
|
|
identity: douyin_13382502342
|
|
platforms:
|
|
douyin: douyin_13382502342
|
|
machine: 5kechengdeAir
|
|
- phone: '13382546434'
|
|
identity: douyin_13382546434
|
|
platforms:
|
|
douyin: douyin_13382546434
|
|
machine: 5kechengdeAir
|
|
- phone: '13382548963'
|
|
identity: douyin_13382548963
|
|
platforms:
|
|
douyin: douyin_13382548963
|
|
machine: 5kechengdeAir
|
|
- phone: '13160144006'
|
|
identity: douyin_13160144006
|
|
platforms:
|
|
douyin: douyin_13160144006
|
|
machine: chengzigedeAir
|
|
- phone: '13382500738'
|
|
identity: douyin_13382500738
|
|
platforms:
|
|
douyin: douyin_13382500738
|
|
machine: chengzigedeAir
|
|
- phone: '13382504732'
|
|
identity: douyin_13382504732
|
|
platforms:
|
|
douyin: douyin_13382504732
|
|
machine: chengzigedeAir
|
|
- phone: '18550099212'
|
|
machine: chengzigedeAir
|
|
identity: douyin_18550099212
|
|
platforms:
|
|
douyin: douyin_18550099212
|
|
- phone: '13382501591'
|
|
machine: chengzigedeAir
|
|
identity: douyin_13382501591
|
|
platforms:
|
|
douyin: douyin_13382501591
|
|
- phone: '18550099523'
|
|
machine: chengzigedeAir
|
|
identity: douyin_18550099523
|
|
platforms:
|
|
douyin: douyin_18550099523
|
|
- phone: '13382504572'
|
|
machine: chengzigedeAir
|
|
identity: douyin_13382504572
|
|
platforms:
|
|
douyin: douyin_13382504572
|
|
- phone: '18550099685'
|
|
machine: chengzigedeAir
|
|
identity: douyin_18550099685
|
|
platforms:
|
|
douyin: douyin_18550099685
|
|
- phone: '13382508495'
|
|
machine: chengzigedeAir
|
|
identity: douyin_13382508495
|
|
platforms:
|
|
douyin: douyin_13382508495
|
|
- phone: '13382504927'
|
|
machine: chengzigedeAir
|
|
identity: douyin_13382504927
|
|
platforms:
|
|
douyin: douyin_13382504927
|
|
- phone: '13382502283'
|
|
machine: chengzigedeAir
|
|
identity: douyin_13382502283
|
|
platforms:
|
|
douyin: douyin_13382502283
|
|
- phone: '15370103682'
|
|
machine: 5kechengdeAir
|
|
identity: douyin_15370103682
|
|
platforms:
|
|
douyin: douyin_15370103682
|
|
tasks:
|
|
- name: nurture_morning
|
|
schedule: 30 9 * * *
|
|
on_machines:
|
|
- chengzigedeAir
|
|
- 5kechengdeAir
|
|
- 7kecheng
|
|
action: mc run
|
|
params:
|
|
blueprint: douyin_daily
|
|
rounds: 3
|
|
interval: 45-90
|
|
duration_minutes: 15
|
|
- name: nurture_evening
|
|
schedule: 0 20 * * *
|
|
on_machines:
|
|
- chengzigedeAir
|
|
- 5kechengdeAir
|
|
- 7kecheng
|
|
action: mc run
|
|
params:
|
|
blueprint: douyin_daily
|
|
rounds: 3
|
|
interval: 45-90
|
|
duration_minutes: 15
|
|
- name: xhs_nurture_evening
|
|
schedule: 30 20 * * *
|
|
on_machines:
|
|
- chengzigedeAir
|
|
- 5kechengdeAir
|
|
- 7kecheng
|
|
action: mc run
|
|
params:
|
|
blueprint: xhs_daily
|
|
rounds: 2
|
|
interval: 30-60
|
|
- name: collect_profiles
|
|
schedule: 0 3 * * *
|
|
on_machines:
|
|
- chengzigedeAir
|
|
- 5kechengdeAir
|
|
- 7kecheng
|
|
action: collect
|
|
params:
|
|
accounts: all
|
|
- name: git_sync
|
|
schedule: '*/15 * * * *'
|
|
on_machines: '*'
|
|
action: git pull
|
|
params: {}
|
|
- name: vector_rebuild
|
|
schedule: 30 3 * * *
|
|
on_machines:
|
|
- chengzigedeAir
|
|
action: rebuild_vector
|
|
params:
|
|
mode: incremental
|
|
- name: knowledge_inbox_refine
|
|
schedule: 0 4 * * *
|
|
on_machines:
|
|
- chengzigedeAir
|
|
action: inbox_refine
|
|
params: {}
|
|
global:
|
|
timezone: Asia/Shanghai
|
|
git_sync_interval_minutes: 15
|
|
heartbeat_interval_minutes: 5
|
|
defaults:
|
|
proxy: socks5://127.0.0.1:10800
|
|
dashboard_port: 9988
|
|
camouflage_port_base: 9200
|