Files
MediaCrawler/mac-agent-os-main/ORACLE.yaml
T
butubb 2112c1a870
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s
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 带网关原话 / 正常返回)。
2026-10-10 17:12:25 +08:00

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