feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s

移植自 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:
2026-10-10 17:12:25 +08:00
parent 21ff01b894
commit 2112c1a870
1601 changed files with 367425 additions and 0 deletions
@@ -0,0 +1,18 @@
# vid_20260504_8817 — 毛主席的语言艺术将失败转化为传奇
> 由 AVE 脚本工厂自动生成 | 2026-05-04
## 来源信息
| 项目 | 内容 |
|------|------|
| 核心主题 | 毛主席的语言艺术将失败转化为传奇 |
| 目标人群 | 历史爱好者/文学研究者/毛泽东思想研究者 |
| 风格 | knowledge_lecture | 钩子 | 故事性钩子 | 情绪 | 崇敬与赞叹 |
## 关键要点
- 通过命名赋予历史事件新的意义
- 语言重构改变了历史叙事的维度
## 生产备注
- **语音**: 火山引擎 **BGM**: Ace Studio **素材**: Pexels搜索+本地兜底 **分辨率**: 1080×1920竖屏
- **注意**: 脚本为AI生成,建议人工审核。配画关键词可能需要手动调整。
@@ -0,0 +1,63 @@
meta:
project_id: vid_20260504_8817
style: knowledge_lecture
voice:
provider: volcano
voice_id: my_voice
default_emotion: 崇敬与赞叹
bgm:
provider: ace_step
genre: cinematic
tempo: 110
mood: inspirational
structure:
- section: intro
- section: main
- section: climax
- section: outro
output:
resolution: 1080x1920
fps: 30
avatar:
image_url: ''
provider: wan2.2_s2v
default_position: bottom_right
material:
fallback: true
segments:
- id: 1
text: 当历史的尘埃落定,某些失败却因一句命名而成为传奇。比如‘井冈山’——这个原本只是地理坐标的名字,被赋予了‘革命摇篮’的象征意义。
duration_sec: 8
voice_emotion: 开场悬念
camera: slow_zoom_in
bgm_section: intro
material:
search: 命名赋予历史意义
subtitles: true
- id: 2
text: 毛主席擅长用语言重构历史维度。他将‘长征’从单纯的军事撤退,转化为‘战略转移’的史诗叙事,让失败成为民族精神的转折点。
duration_sec: 12
voice_emotion: 理性分析
camera: close_up
bgm_section: main
material:
search: 语言重构历史叙事
subtitles: true
- id: 3
text: 这种叙事重构不仅改变历史解释框架,更塑造了集体记忆。‘延安’从军事据点升华为‘精神圣地’,其背后是语言对历史事件的重新编码与价值赋予。
duration_sec: 15
voice_emotion: 深度解析
camera: montage
bgm_section: climax
material:
search: 历史叙事重构案例
subtitles: true
- id: 4
text: 毛主席的语言艺术,本质是用精准的符号系统将失败转化为文化资本。这种转化让历史事件超越时间维度,成为民族精神的永恒坐标。
duration_sec: 10
voice_emotion: 总结升华
camera: wide_angle
bgm_section: outro
material:
search: 失败转化为传奇案例
subtitles: true
@@ -0,0 +1,54 @@
# vid_20260505_em001 — 我爸给我打了20年电话,我从来没接过
> 由人工创作 + 参考今日头条情感爆款结构 | 2026-05-05
---
## 一、来源信息
| 项目 | 内容 |
|------|------|
| 故事类型 | 亲情/父子/子欲养而亲不待 |
| 参考对象 | 今日头条情感类爆款《我妈骂了我爸四十年》 |
| 风格定位 | bedtime_story(深夜情感故事) |
| 预计时长 | 约 100 秒(1分40秒) |
| 核心情绪 | 遗憾、愧疚、珍惜 |
## 二、结构拆解
| 段落 | 时长 | 内容 | 作用 |
|------|------|------|------|
| ① 钩子 | 12s | 最后一次通话,三个未接来电 | 悬念开场,一句话抓住 |
| ② 背景 | 18s | 父亲是农民工,30年绑钢筋 | 建立人物形象和时代感 |
| ③ 铺垫 | 14s | 二十年如一日不变的电话 | 积累情感,制造"我"的不懂事 |
| ④ 高潮积累 | 22s | 北京实习,父亲寄钱 | 父爱的极致表现——他其实知道 |
| ⑤ 高潮爆发 | 20s | 三个未接来电,再没有第四通 | 全篇最高泪点 |
| ⑥ 余韵 | 15s | 梦中重逢的对话 | 给观众消化时间 |
| ⑦ 金句收尾 | 10s | 别让那句"吃饭了吗"变成等不到的电话 | 总结升华,带传播力 |
## 三、口播脚本与标注
详见 YAML 文件 `vid_20260505_em001.yaml`,每段已标注:
- `voice_emotion` — 语气/情绪提示
- `camera` — 镜头语言建议
- `bgm_section` — 配乐段落
- `material.search` — 配画关键词
## 四、可复用的口播技法
| 技法 | 在本篇中的应用 |
|------|---------------|
| 具体日期 | "2018年3月12号" → 增加真实感 |
| 数字量化 | "三个电话"、"二十年"、"三千五留五百" |
| 场景细节 | "绑钢筋"、"下雨没活干"、"喝药酒的细节" |
| 对话还原 | "缺钱跟爸说,爸有" |
| 反转推进 | 以为是啰嗦,结果是最后的通话 |
| 梦境穿插 | "梦里我坐在老家门口" |
| 金句收尾 | 最后一句是总结也是转发点 |
## 五、生产备注
- **语音**: 火山引擎,建议用中年男声,语气稳重略低沉
- **BGM**: 钢琴独奏或弦乐,80bpm 慢速
- **画面**: 推荐黑白/暖色调滤镜,配合回忆感
- **字幕**: 逐句字幕(首段+结尾金句建议关闭字幕增强冲击力)
@@ -0,0 +1,109 @@
# ============================================
# AVE v2.0 导演脚本
# 我爸给我打了20年电话,我从来没接过
# ============================================
# 这是一个关于中国式父子关系的真实情感故事。
meta:
project_id: "vid_20260505_em001"
style: "bedtime_story" # knowledge_lecture | bedtime_story | funny_talk | tech_review
voice:
provider: "volcano"
voice_id: "my_voice"
default_emotion: "深情回忆,略带克制"
bgm:
provider: "ace_step"
genre: "cinematic"
tempo: 80
mood: "nostalgic"
structure:
- section: intro # 0-20s
- section: main # 20-120s
- section: climax # 120-220s
- section: outro # 220-280s
output:
resolution: "1080x1920"
fps: 30
avatar:
image_url: ""
provider: "wan2.2_s2v"
default_position: "bottom_right"
material:
fallback: true
# ——— 分段指令 ———
segments:
- id: 1
text: "我跟我爸的最后一次通话,是2018年3月12号。那天他打了三个电话,我一个都没接。后来我再也没有机会接了。"
duration_sec: 12
voice_emotion: "平静开场,语速缓慢"
camera: "slow_zoom_in"
bgm_section: "intro"
material:
search: "old father working construction site, cinematic"
subtitles: true
- id: 2
text: "我爸是个农民工,在工地绑钢筋,一绑就是三十年。我从小最怕两件事:一个是开学,因为要交学费;一个是下雨,因为一下雨他就没活干,没活干他就喝酒,一喝酒他就会打电话回来。"
duration_sec: 18
voice_emotion: "正常叙述,略带苦涩"
camera: "medium_shot"
bgm_section: "main"
material:
search: "construction worker in rain, Chinese countryside"
subtitles: true
- id: 3
text: "他的电话永远是那几句:吃饭了吗?天冷了多穿点。钱够不够花?翻来覆去,二十年如一日。我嫌他啰嗦。每次看到屏幕上亮起他的名字,我就按掉。"
duration_sec: 14
voice_emotion: "带一丝愧疚"
camera: "close_up"
bgm_section: "main"
material:
search: "rejected phone call, lonely father"
subtitles: true
- id: 4
text: "2012年我在北京实习,他打电话问我过得好不好。我说挺好的,公司管吃管住。他说你别骗我。我说真的挺好。他沉默了几秒,说:缺钱跟爸说,爸有。我知道他没有。他一个月工资三千五,自己留五百,剩下三千全打到我卡上。我从来没说过谢谢。"
duration_sec: 22
voice_emotion: "逐渐哽咽,真情流露"
camera: "slow_pan_right"
bgm_section: "climax"
material:
search: "father sends money to son, love letter"
subtitles: true
- id: 5
text: "2018年3月12号。他打了三个电话。第一个我在开会,按掉了。第二个我在跟朋友吃饭,没接。第三个晚上九点,我想着明天回吧。然后就再也没有第四通了。那天晚上他从脚手架上摔了下来。我妈说他的手机最后停留在我的通话记录上。三个未接来电。全是打给我的。"
duration_sec: 20
voice_emotion: "压抑悲痛,声音微颤"
camera: "hand_held"
bgm_section: "climax"
material:
search: "phone with missed calls, tragedy at construction site"
subtitles: true
- id: 6
text: "我后来经常做一个梦。梦里我坐在老家门口,远远看见他走过来。他走到跟前,笑着问我:吃饭了吗?我在梦里说:吃了,爸。你呢?然后我就醒了。醒来发现枕头是湿的。"
duration_sec: 15
voice_emotion: "深情追忆,轻声"
camera: "top_down"
bgm_section: "outro"
material:
search: "wet pillow morning, father son reunion dream"
subtitles: true
- id: 7
text: "有些电话,你永远等不到下一个了。别让你爸妈的那句吃饭了吗,变成你余生都接不到的那通电话。"
duration_sec: 10
voice_emotion: "坚定有力,字字清晰"
camera: "slow_zoom_in"
bgm_section: "outro"
material:
search: "empty chair, sunset, father and son silhouette"
subtitles: false