Files
karuo-ai/03_卡木(木)/木叶_视频内容/多平台分发/多平台视频分发_优化总结.md

7.9 KiB
Raw Blame History

多平台视频分发系统 — 优化迭代总结

更新时间: 2026-03-10


一、五平台最终技术方案

平台 方案一(优先) 方案二(兜底) 单条耗时 状态
B站 bilibili-api-python 纯 API Playwright 可见浏览器 ~8s 已验证
抖音 douyin_pure_api 纯 APIVOD分片 ~15s 已验证
快手 Playwright Headless ~20s 已验证
视频号 Playwright Headless ~20s 已验证
小红书 Playwright Headless ~25s 已验证

方案选择逻辑

  • 纯 API 可行 → 优先用 APIB站bilibili-api-python 成熟稳定、抖音VOD 分片上传 + bd-ticket-guard
  • API 不可行 → Playwright Headless快手__NS_sig3 签名过于复杂)、视频号(无公开 API、小红书X-S/X-T 签名频繁变动)
  • B站特殊:纯 API 优先,失败自动降级到可见浏览器

二、各平台遇到的问题与解决方案

B站

问题 原因 解决方案
纯 API 403 Forbidden WAF/反爬 放弃手动逆向,改用 bilibili-api-python 库
Playwright GeeTest 验证码 headless 触发极验 改用可见浏览器模式headless=False
bilibili-api-python 406 早期版本 bug 升级到最新版,解决 preupload 问题
VideoUploader cover 空路径报错 cover="" 触发文件读取 用 ffmpeg 提取第一帧作为 cover 传入
最终方案 纯 API 7.9s 完成投稿(之前 80s+

快手

问题 原因 解决方案
"发布"按钮不是 <button> 自定义 div 实现 div[class*="button-primary"] 选择器
发布按钮在页面底部不可见 y=1287px 超出 viewport scroll_into_view_if_needed() + scrollTo(bottom)
草稿对话框阻挡 "上次未发布的视频" 检测并自动点击"放弃"
未登录storage_state 无效) login 脚本检测不准 修复 login 检测:等待 cp.kuaishou.com 域 cookie
__NS_sig3 签名太复杂 webpack + JSVMP 混淆 放弃纯 APIPlaywright 方案已足够稳定

视频号

问题 原因 解决方案
无公开上传 API 微信封闭生态 直接用 Playwright Headless
"直接发表"按钮不可见 弹窗动画延迟 force=True + JS 点击兜底
描述框不易定位 contenteditable div 动态加载 点击"添加描述" → 定位 [contenteditable="true"]:visible
原创声明弹窗 默认触发 检测并点击"直接发表"

小红书

问题 原因 解决方案
API 返回 HTML 而非 JSON session cookie 机制变更 放弃纯 API改 Playwright
"发布"按钮被 tooltip 拦截 data-tippy-root 覆盖 JS 清除 tooltip + force=True
发布按钮 disabled 状态 标题/描述未正确填入 精确选择器 + 等待 disabled 消失
发布后不跳转 页面重置而非跳转 检测"拖拽视频到此"作为成功标志
标题截断 小红书标题限 20 字 title[:20] 自动截断

抖音

问题 原因 解决方案
a_bogus 签名 JSVMP 虚拟机保护 已有 douyin_pure_api.py 解决
Cookie 2-4h 过期 抖音 session 机制 cookie_manager 定期检查 + 告警
AWS4-HMAC-SHA256 文件上传需双层签名 已在 pure_api 中实现

三、本次优化内容

3.1 B站方案升级最大改进

旧方案: Playwright 可见浏览器 → 80s/条,需桌面环境
新方案: bilibili-api-python 纯 API → 8s/条,无需浏览器
性能提升: 10x

3.2 统一发布结果结构

新增 publish_result.py 模块,所有平台统一返回 PublishResult 数据结构:

@dataclass
class PublishResult:
    platform: str         # "B站" | "快手" | "视频号" | "小红书" | "抖音"
    video_path: str
    title: str
    success: bool
    status: str           # "published" | "reviewing" | "failed" | "error"
    message: str          # 人类可读的结果描述
    error_code: str       # 机器可读的错误码NOT_LOGGED_IN 等)
    screenshot: str       # 截图路径
    content_url: str      # 发布后的链接
    elapsed_sec: float    # 耗时
    timestamp: str        # ISO 时间戳

3.3 发布日志持久化

每次发布结果自动追加到 publish_log.jsonJSON Lines 格式),支持:

  • 历史查询
  • 失败重试
  • 统计分析

3.4 汇总表输出

========================================================================
  发布结果汇总
========================================================================
  [✓] B站   | 信任不是求来的 发三个月邮件拿下德…      | reviewing
  [✓] 快手   | 懒人也能赚钱?动作简单、有利可图…     | published
  [✓] 视频号  | 易经两小时学个七七八八…              | reviewing
  [✓] 小红书  | 后端花170万搭体系…                  | published
------------------------------------------------------------------------
  成功: 4/4  |  耗时: 72.7s
========================================================================

四、各平台 API 可行性分析

平台 纯 API 难度 稳定性 当前方案 升级可能
B站 可行 已升级纯API
抖音 可行 已有纯API 维护 bd-ticket-guard
快手 可行但难维护 Playwright __NS_sig3 变动太频繁
小红书 可行官方开放API 中高 Playwright 可申请开发者资质
视频号 不可行 Playwright 微信未开放上传API

五、文件结构

03_卡木/木叶_视频内容/
├── 多平台分发/脚本/
│   ├── distribute_all.py      # 一键多平台分发(入口)
│   ├── publish_result.py      # 统一结果结构 + 日志
│   ├── cookie_manager.py      # Cookie 管理(检查/加载/过期)
│   ├── video_utils.py         # 封面提取 + 视频元数据
│   ├── publish_log.json       # 发布历史日志(自动生成)
│   └── requirements.txt
├── B站发布/脚本/
│   ├── bilibili_publish.py    # 纯API优先 + Playwright兜底
│   └── bilibili_login.py      # 扫码登录
├── 快手发布/脚本/
│   ├── kuaishou_publish.py    # Playwright Headless
│   └── kuaishou_login.py      # 扫码登录
├── 视频号发布/脚本/
│   ├── channels_publish.py    # Playwright Headless
│   └── channels_login.py      # 微信扫码登录
├── 小红书发布/脚本/
│   ├── xiaohongshu_publish.py # Playwright Headless
│   └── xiaohongshu_login.py   # 扫码/手机号登录
└── 抖音发布/脚本/
    ├── douyin_pure_api.py     # 纯APIVOD分片上传
    └── douyin_login.py        # Playwright扫码登录

六、使用方式

# 检查所有平台 Cookie 状态
python3 distribute_all.py --check

# 一键分发到所有已登录平台
python3 distribute_all.py

# 只分发到指定平台
python3 distribute_all.py --platforms B站 快手

# 分发单条视频
python3 distribute_all.py --video /path/to/video.mp4

# 自定义视频目录
python3 distribute_all.py --video-dir /path/to/videos/

七、后续优化方向

  1. 小红书官方 API:申请开发者资质后可升级为纯 API
  2. 定时发布:各平台支持设置发布时间(已有"定时发布"选项)
  3. 失败自动重试:基于 publish_log.json 的失败记录自动重试
  4. Cookie 过期预警:集成到飞书/微信通知
  5. 并行分发:不同平台间并行上传(当前为串行)