Ethanfly 4ebd86507b Enhance video publishing functionality and error handling 23 stundas atpakaļ
..
platforms 4ebd86507b Enhance video publishing functionality and error handling 23 stundas atpakaļ
utils 6a167646a2 fix 1 dienu atpakaļ
README.md 6a167646a2 fix 1 dienu atpakaļ
app.py 4ebd86507b Enhance video publishing functionality and error handling 23 stundas atpakaļ
requirements.txt 6a167646a2 fix 1 dienu atpakaļ

README.md

多平台视频发布服务

基于 matrix 项目,使用 Python + Playwright 实现多平台视频发布功能。

支持平台

平台 模块 发布方式 说明
抖音 platforms/douyin.py Playwright 浏览器自动化
小红书 platforms/xiaohongshu.py API + Playwright 优先使用 xhs SDK,更稳定
视频号 platforms/weixin.py Playwright 需要 Chrome 浏览器
快手 platforms/kuaishou.py Playwright 浏览器自动化

项目结构

server/python/
├── app.py                  # Flask 统一入口
├── requirements.txt        # 依赖文件
├── README.md              # 说明文档
├── platforms/             # 平台发布模块
│   ├── __init__.py        # 模块入口
│   ├── base.py            # 发布器基类
│   ├── douyin.py          # 抖音发布器
│   ├── xiaohongshu.py     # 小红书发布器
│   ├── weixin.py          # 视频号发布器
│   └── kuaishou.py        # 快手发布器
└── utils/                 # 工具模块
    ├── __init__.py
    └── helpers.py         # 工具函数

环境要求

  • Python 3.8 或更高版本
  • Windows 10+, macOS 12+, 或 Linux (Ubuntu 20.04+)

安装步骤

1. 创建虚拟环境

Windows (PowerShell)

# 进入 python 目录
cd server\python

# 创建虚拟环境
python -m venv venv

# 激活虚拟环境
.\venv\Scripts\Activate.ps1

# 如果遇到执行策略问题,先运行:
# Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Windows (CMD)

cd server\python
python -m venv venv
venv\Scripts\activate.bat

Linux / macOS

cd server/python

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate

2. 安装依赖

# 确保已激活虚拟环境
pip install -r requirements.txt

# 安装 Playwright 浏览器
playwright install chromium

# 如果在 Linux 服务器上,还需要安装系统依赖
playwright install-deps chromium

3. 启动服务

# 默认启动(headless 模式,端口 5005)
python app.py

# 指定端口
python app.py --port 8080

# 显示浏览器窗口(调试用)
python app.py --headless false

# 调试模式
python app.py --debug

API 接口

健康检查

GET /health

响应:
{
  "status": "ok",
  "xhs_sdk": true,
  "supported_platforms": ["douyin", "xiaohongshu", "weixin", "kuaishou"],
  "headless_mode": true
}

发布视频

POST /publish
Content-Type: application/json

{
  "platform": "douyin",              // douyin | xiaohongshu | weixin | kuaishou
  "cookie": "cookie字符串或JSON数组",
  "title": "视频标题",
  "description": "视频描述(可选)",
  "video_path": "E:/videos/test.mp4", // 视频绝对路径
  "cover_path": "E:/images/cover.jpg", // 封面绝对路径(可选)
  "tags": ["话题1", "话题2"],
  "post_time": "2024-01-20 12:00:00",  // 定时发布(可选)
  "location": "重庆市"                   // 位置(可选)
}

响应:
{
  "success": true,
  "platform": "douyin",
  "video_id": "xxx",
  "video_url": "xxx",
  "message": "发布成功"
}

批量发布(多平台)

POST /publish/batch
Content-Type: application/json

{
  "platforms": ["douyin", "xiaohongshu"],
  "cookies": {
    "douyin": "cookie字符串",
    "xiaohongshu": "cookie字符串"
  },
  "title": "视频标题",
  "video_path": "E:/videos/test.mp4",
  "tags": ["话题1", "话题2"]
}

响应:
{
  "success": true,
  "total": 2,
  "success_count": 2,
  "fail_count": 0,
  "results": [
    {"platform": "douyin", "success": true, "message": "发布成功"},
    {"platform": "xiaohongshu", "success": true, "message": "发布成功"}
  ]
}

小红书签名

POST /sign
Content-Type: application/json

{
  "uri": "API路径",
  "data": "请求数据",
  "a1": "a1 cookie",
  "web_session": "web_session cookie"
}

响应:
{
  "x-s": "签名值",
  "x-t": "时间戳"
}

检查 Cookie

POST /check_cookie
Content-Type: application/json

{
  "platform": "xiaohongshu",
  "cookie": "cookie字符串"
}

响应:
{
  "valid": true,
  "user_info": {
    "user_id": "xxx",
    "nickname": "昵称",
    "avatar": "头像URL"
  }
}

扩展新平台

如需添加新平台,请按以下步骤:

  1. platforms/ 目录创建新文件,如 bilibili.py
  2. 继承 BasePublisher 基类
  3. 实现 publish 方法
  4. platforms/__init__.py 中注册

示例:

# platforms/bilibili.py
from .base import BasePublisher, PublishParams, PublishResult

class BilibiliPublisher(BasePublisher):
    platform_name = "bilibili"
    login_url = "https://account.bilibili.com/"
    publish_url = "https://member.bilibili.com/platform/upload/video/frame"
    cookie_domain = ".bilibili.com"
    
    async def publish(self, cookies: str, params: PublishParams) -> PublishResult:
        # 实现发布逻辑
        ...
# platforms/__init__.py 添加
from .bilibili import BilibiliPublisher

PLATFORM_MAP = {
    ...
    'bilibili': BilibiliPublisher,
}

与 Node.js 服务集成

在 Node.js 服务中设置环境变量:

# .env 文件
PYTHON_PUBLISH_SERVICE_URL=http://localhost:5005

部署建议

PM2 管理

pm2 start app.py --name "publish-service" --interpreter python
pm2 logs publish-service
pm2 startup && pm2 save

Supervisor (Linux)

[program:publish-service]
directory=/path/to/server/python
command=/path/to/venv/bin/python app.py
autostart=true
autorestart=true
environment=HEADLESS="true"

Docker

FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
RUN playwright install chromium && playwright install-deps chromium

COPY . .
EXPOSE 5005
CMD ["python", "app.py"]

常见问题

视频号需要 Chrome 浏览器

视频号使用 Chromium 可能出现 H264 编码错误,已在代码中配置使用 Chrome:

browser = await playwright.chromium.launch(headless=self.headless, channel="chrome")

小红书 SDK 安装

pip install xhs -i https://pypi.tuna.tsinghua.edu.cn/simple

Cookie 格式

支持两种格式:

// JSON 数组格式
[
  {"name": "sessionid", "value": "xxx", "domain": ".douyin.com"},
  {"name": "token", "value": "xxx", "domain": ".douyin.com"}
]

// 字符串格式
"sessionid=xxx; token=xxx"

参考项目

  • matrix - 视频矩阵内容分发系统
  • xhs - 小红书 Python SDK

License

MIT