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,212 @@
# 评论语料库 v1.0
#
# 分类结构:大类 → 子类 → 评论内容/模板
# 权重越高,被选中的概率越大
# 模板用 {keyword} 动态替换为当前视频关键词
#
# 你可以手动编辑此文件:
# - 新增评论直接加在对应分类下
# - 新增分类在 categories 下加一个 key 即可
# - 不想用的分类把 weight 设为 0
categories:
# ── 1. 通用赞美 ──
praise:
label: "通用赞美"
weight: 4
comments:
- "说得太好了"
- "学到了,感谢分享"
- "很有道理"
- "好内容,值得收藏"
- "讲得很透彻"
- "支持一下"
- "确实如此"
- "说得太对了"
- "收藏了慢慢看"
- "好文,已三连"
# ── 2. 内容相关 ──
content_related:
label: "内容相关"
weight: 3
templates:
- "这个{keyword}太有意思了"
- "第一次看到{keyword}的讲解"
- "关于{keyword}讲得很透彻"
- "{keyword}还能这么理解,学习了"
- "对{keyword}又有新的认识"
comments:
- "这个角度很新颖"
- "终于有人讲明白了"
- "深入浅出,好讲解"
# ── 3. 互动提问 ──
interactive:
label: "互动提问"
weight: 2
comments:
- "有懂的大佬吗?"
- "请问这个是什么原理?"
- "能出一期详细教程吗?"
- "这个在哪里可以买到?"
- "有没有相关的推荐?"
- "请问up主用的什么设备?"
# ── 4. 引导评论(重点,可定向引导) ──
guided:
label: "引导评论"
weight: 1
description: "用于特定目的引导,根据当前养的号类型选择启用"
tags:
- "general" # 通用引导
- "promote" # 推广引导
- "debate" # 争议引导
comments:
- "有没有和我一样在看第二遍的"
- "看完这个我终于懂了"
- "我试了一下真的有用"
- "这个方法我用了三个月了"
- "推荐给所有需要的朋友"
- "有没有人组队一起学的"
# ── 5. 表情/符号 ──
emoji:
label: "表情符号"
weight: 1
comments:
- "👍"
- "❤️"
- "👏"
- "🔥"
- "太棒了👍"
- "已收藏❤️"
# ── 6. 调侃幽默 ──
humor:
label: "调侃幽默"
weight: 1
comments:
- "老师讲得很好,下次别讲了(狗头)"
- "脑子:学会了 手:???"
- "我的表情和封面一模一样"
- "建议直接发我脑子里"
- "全程张着嘴看完的"
- "这个视频是我付费能看的吗?"
# ── 7. 行业术语(可自定义) ──
industry:
label: "行业术语"
weight: 0 # 默认关闭,需要时打开
description: "根据养号领域自定义,如编程/金融/美食等"
tags:
- "tech"
- "finance"
comments:
- "这个API设计得很优雅"
- "性能优化做得很到位"
- "架构设计值得参考"
# ── 8. 纯共情弹幕(不讲医生不讲号,就讲痛) ──
empathy:
label: "纯共情弹幕"
weight: 4
tags:
- "douyin"
comments:
- "坐一天班屁股跟针扎似的,谁懂啊!"
- "吃顿火锅一时爽,厕所出来就想给嘴一巴掌"
- "痔疮犯了坐立难安,开会的时候扭来扭去像长了虫子"
- "不好意思去医院,硬扛了仨月,我真服了自己这个老六"
- "各种药膏买了一抽屉,钱花了屁用没有,纯纯大冤种"
- "大医院排队排到怀疑人生,请一天假还不够折腾的"
- "疼到凌晨四点还搁那数羊,第二天还要爬起来搬砖"
- "每次上厕所跟上刑一样,完事儿腿都是软的"
- "听说要手术直接腿软,怕疼星人当场就想跑路"
- "反复发作真的破防了,这玩意儿就跟渣男一样甩不掉"
- "久坐党太难了,屁股和工位锁死了属于是"
- "社恐人一想到去肛肠科,脚趾已经抠出三室一厅了"
# ── 9. 朱晓光主任弹幕 ──
doctor_zhu:
label: "朱晓光主任"
weight: 4
tags:
- "douyin"
comments:
- "朱晓光主任yyds,终于不用再遭罪了"
- "朱主任手法是真的轻,怕疼星人狂喜!"
- "身边好几个朋友都是找朱晓光看好的"
- "朱主任问诊贼耐心,啥都给你讲明白"
- "听朱主任的科普,才知道以前踩了多少坑"
- "朱晓光技术真的顶,老肛瘘都给我整好了"
- "朱主任说话挺温和,不会让你觉得尴尬"
- "找朱晓光看过的都懂,恢复期确实短"
- "朱主任的号我得蹲一下,口碑太好了"
- "苏州肛泰朱晓光,看肛肠我是真服气"
# ── 10. 苏州济世璞真公众号引导 ──
gh_account:
label: "公众号约号"
weight: 3
tags:
- "douyin"
comments:
- "搜苏州济世璞真功重号约就行了,不用傻排队"
- "公号苏州济世璞真直接约,到点去看不用等"
- "想约号的宝子去苏州济世璞真看看,贼方便"
- "线上就能挂号,搜苏州济世璞真,懒人福音"
- "不用现场排队,功重号苏州济世璞真搞定一切"
- "苏州济世璞真,线上约好直接去,省时buff叠满"
- "公号搜苏州济世璞真,里面有朱主任的号"
- "别再傻傻去排了,苏州济世璞真约一下不香吗"
- "约朱主任的号走苏州济世璞真,绿通懂的都懂"
- "苏州济世璞真,主打一个省事,按点去就行"
# ── 11. 捡漏绿通故事 ──
story_channel:
label: "捡漏绿通"
weight: 3
tags:
- "douyin"
comments:
- "大医院挂不上的号,公号苏州济世璞真里头能捡漏朱晓光,悄悄说"
- "朱晓光主任多点出诊,不挤大医院,苏州济世璞真就是绿通"
- "挖到宝了,苏州济世璞真里头一堆专家,朱主任的号也能约"
- "别再死磕大医院排队了,苏州济世璞真约朱主任不香吗"
- "这个小众渠道我只告诉你,苏州济世璞真,专家绿通懂的都懂"
- "大医院人挤人,苏州济世璞真线上捡漏,省心不是一星半点"
- "朱晓光主任的号在这边好约多了,苏州济世璞真yyds"
- "这算不算隐藏福利?苏州济世璞真能约到朱主任,还不咋排队"
# ── 12. 优势卖点总结 ──
selling_points:
label: "优势卖点"
weight: 3
tags:
- "douyin"
comments:
- "专科医院就是专门搞这个的,苏州肛泰没踩雷"
- "独立诊室真的救命,社恐人狠狠爱住了"
- "线上约好再去,不用请假排半天队,打工人狂喜"
- "朱主任术后还会跟进关心你,不是看完了就不管了"
- "微创恢复快,不耽误上班,这个太重要了"
- "隐私保护做得好,不用担心碰到熟人尴尬"
- "朱主任科普干货多,关注了能避开好多坑"
- "老肛肠患者表示,终于遇到个靠谱的了"
# ── 全局配置 ──
config:
# 默认启用的分类(填分类key,为空则启用所有weight>0的分类)
enabled_categories: []
# 默认禁用的分类(填分类key)
disabled_categories:
- "industry"
# 当前养号领域(用于模板填充 {keyword})
niche: "general"
# 是否优先使用模板(带{keyword}的评论)
prefer_templates: true
@@ -0,0 +1,18 @@
# Matrix 定时任务配置
# time 格式: HH:MM(每天固定时间)
# days 格式: 1,2,3,4,5,6,7(1=周一..7=周日,默认每天)
schedules:
douyin_daily_morning:
enabled: false
account: douyin_test
blueprint: douyin_daily
rounds: 3
time: "09:00"
days: "1,2,3,4,5,6,7"
xhs_daily_noon:
enabled: false
account: xhs_01
blueprint: xhs_daily
rounds: 2
time: "12:30"
days: "1,2,3,4,5,6,7"
@@ -0,0 +1,14 @@
# 视觉分析配置
# oMLX: 本地模型(优先)
omlx:
base_url: "http://127.0.0.1:8000/v1"
api_key: "omlx"
model: "Qwen2.5-VL-3B-Instruct-8bit"
# DashScope: 远程备用(阿里百炼)
# ⚠️ api_key 不入库 — 真实值在 agent-local/tools/ave/config/local.yaml → aliyun.api_key
# 或环境变量 DASHSCOPE_API_KEY (vision_bridge.get_dashscope_key 统一读取)
dashscope:
api_key: "sk-xxx"
model: "qwen-vl-plus" # 性价比高,支持图片理解
# 更便宜的选择: qwen-vl-max (更强) / qwen2.5-vl-7b (开源版)