移植自 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 带网关原话 / 正常返回)。
78 lines
3.5 KiB
YAML
78 lines
3.5 KiB
YAML
# AVE v2.0 配置文件模板
|
||
# 复制到 agent-local/tools/ave/config/local.yaml 并填入真实值
|
||
|
||
# === 火山引擎 (豆包语音 2.0) ===
|
||
volcano:
|
||
api_key: "sk-xxx" # ARK → API Key 管理
|
||
app_id: "xxx" # 语音控制台 → App ID
|
||
access_token: "xxx" # 语音控制台 → Access Token
|
||
speaker_id: "xxx" # 声音复刻 → 训练后获取
|
||
tts_model: "volcano_tts_2.0"
|
||
|
||
# === 阿里云百炼 ===
|
||
aliyun:
|
||
api_key: "sk-xxx" # 百炼 → API Key
|
||
wan_model: "wan2.2-s2v"
|
||
# TTS 模型(实测可用的只有 4 个):
|
||
# cosyvoice-v3-flash ← 推荐(支持 88 个音色,含全部 _v3 后缀音色)
|
||
# cosyvoice-v3-plus (只支持 longanyang / longanhuan 两个音色)
|
||
# cosyvoice-v2 / cosyvoice-v1
|
||
# ⚠️ 音色必须与模型匹配,否则报 InvalidParameter(418);音色目录见
|
||
# 09_ave/config/cosyvoice_voices.yaml
|
||
cosyvoice_model: "cosyvoice-v3-flash"
|
||
|
||
# === Pexels ===
|
||
pexels:
|
||
api_key: "xxx" # Pexels API Dashboard
|
||
rate_limit: 200 # 请求/小时
|
||
|
||
# === 大模型 (文案解析) ===
|
||
llm:
|
||
provider: "openai" # openai | deepseek | volc
|
||
api_key: "sk-xxx"
|
||
base_url: "https://api.deepseek.com" # 或 openai/volc 地址
|
||
model: "deepseek-chat" # 或 gpt-4o / doubao-pro
|
||
|
||
# === 输出设置 ===
|
||
output:
|
||
resolution: "1080x1920" # 竖屏
|
||
fps: 30
|
||
codec: "h264"
|
||
bitrate: "8M"
|
||
|
||
# === 缓存 ===
|
||
cache:
|
||
enabled: true
|
||
max_size_gb: 10
|
||
ttl_days: 7
|
||
|
||
# === 人物置换 (person_swap, 阿里云百炼 Wan2.2-Animate-Mix 视频换人) ===
|
||
# 用途: 原视频(人物A动作+场景) + 参考图(人物B形象) → 输出「B 保留动作与场景」的新视频
|
||
# 官方模型: wan2.2-animate-mix (2026-10-02 实测校准: 接口 image2video/video-synthesis,
|
||
# 字段 input.image_url / input.video_url / parameters.mode)
|
||
person_swap:
|
||
model: "wan2.2-animate-mix" # 官方模型 id (换人; 另有 wan2.2-animate-move 图生动作)
|
||
mode: "std" # 档位: std(¥0.6/秒) | pro(增强版 ¥0.9/秒)
|
||
price_per_sec: 0.6 # 单价 元/秒 (std 官方价; pro 改 0.9)
|
||
max_duration: 10 # 单条源视频最长秒数(超长自动截取; 按模型支持范围调整)
|
||
image_max_side: 2048 # 参考图长边上限
|
||
monthly_budget: 300.0 # 月度费用护栏(元), 超预算拒绝新任务
|
||
max_retries: 2 # 生成失败自动重试次数(损耗系数 ~1.4 由预算兜底)
|
||
timeout_sec: 900 # 单次生成轮询上限(秒)
|
||
|
||
# ── 可灵 AI(Kling)──
|
||
# 用途: 定妆照/角色图 文生图、图生图(character_sheet.py provider=kling)
|
||
# 鉴权两种方式二选一(api_key 优先):
|
||
# api_key : Bearer 方式(新版/第三方发放 key,格式 api-key-kling-xxx)
|
||
# access_key + secret_key : 官方 AK/SK(JWT HS256 签名)
|
||
# ⚠️ 真实密钥放 agent-local/tools/ave/config/local.yaml(不同步、不进 git),此处仅占位
|
||
# 接口: POST {base_url}/v1/images/generations(异步任务)→ GET .../{task_id} 查询
|
||
kling:
|
||
api_key: "" # Bearer key(优先)
|
||
access_key: "" # 官方 AK(回退 JWT 方式)
|
||
secret_key: "" # 官方 SK(回退 JWT 方式)
|
||
base_url: "https://api-beijing.klingai.com"
|
||
default_model: "kling-v1" # 文生图模型
|
||
poll_interval: 5 # 任务轮询间隔(秒)
|
||
timeout_sec: 300 # 单任务轮询上限(秒)
|