SkillAgentSearch skills...

ShortVideo.AutoPublisher

ShortVideo.AutoPublisher 是套实现,抖音,百家号,小红书,视频号,头条,等平台短视频自动发布的创作者工具。

Install / Use

/learn @dorisoy/ShortVideo.AutoPublisher

README

ShortVideo.AutoPublisher 短视频自动发布创作者工具

基于 WPF 的多平台短视频一键发布解决方案

完整源码: https://shop.unitos.cn/item/8

一、产品概述

ShortVideo.AutoPublisher 是一款专为内容创作者设计的桌面应用程序,通过集成 OpenClaw AI 代理机器人技术,实现视频内容到多个主流短视频平台的自动化发布。

核心价值

  • 效率提升:一次编辑,多平台同步发布,节省重复操作时间
  • 智能自动化:AI驱动的浏览器自动化,模拟真实用户操作
  • 稳定可靠:网络监控与智能重试机制,确保发布成功率
  • 统一管理:集中管理多平台账号、视频内容和发布任务

支持平台

| 平台 | 状态 | 功能支持 | |------|------|----------| | 抖音 | ✅ 已支持 | 视频上传、标题/标签/封面设置、发布 | | 小红书 | ✅ 已支持 | 视频上传、笔记编辑、标签设置、发布 | | 百家号 | ✅ 已支持 | 视频上传、文章编辑、发布 | | 微信视频号 | ✅ 已支持 | 视频上传、描述编辑、发布 | | 今日头条 | ✅ 已支持 | 视频上传、标题/标签设置、发布 |


屏幕

<img src="Screen/1%20(1).jpg"/> <img src="Screen/1%20(1).png"/> <img src="Screen/1%20(2).png"/> <img src="Screen/1%20(3).png"/> <img src="Screen/1%20(4).png"/> <img src="Screen/1%20(5).png"/> <img src="Screen/1%20(6).png"/>

二、系统架构

2.1 技术栈

┌─────────────────────────────────────────────────────────┐
│                    表现层 (Views)                        │
│         WPF-UI 3.0.4 · Fluent Design · MVVM            │
├─────────────────────────────────────────────────────────┤
│                  视图模型层 (ViewModels)                  │
│           CommunityToolkit.Mvvm · 数据绑定              │
├─────────────────────────────────────────────────────────┤
│                   服务层 (Services)                      │
│      VideoContentService · PublishService · ...        │
├─────────────────────────────────────────────────────────┤
│              OpenClaw AI 代理模块                        │
│    IAiAgent · 平台代理 · 任务调度器 · 浏览器管理          │
├─────────────────────────────────────────────────────────┤
│                 基础设施层 (Infrastructure)              │
│   SQLite/Dapper · NetworkMonitor · FileDownloader      │
├─────────────────────────────────────────────────────────┤
│                    领域层 (Domain)                       │
│         实体 · 枚举 · 仓储接口 · 领域事件                 │
└─────────────────────────────────────────────────────────┘

2.2 核心依赖

| 组件 | 版本 | 用途 | |------|------|------| | .NET | 8.0 | 运行时框架 | | WPF-UI | 3.0.4 | 现代化 UI 组件库 | | Microsoft.Playwright | 1.40.0 | 浏览器自动化 | | SQLite | 1.0.118 | 本地数据存储 | | Dapper | 2.1.35 | 轻量级 ORM | | Polly | 8.2.0 | 弹性和瞬态故障处理 | | SixLabors.ImageSharp | 3.1.6 | 图片处理(封面裁切) | | Serilog | 3.1.1 | 结构化日志 |

2.3 项目结构

src/ShortVideo.AutoPublisher/
├── Core/                           # 核心基础设施
│   └── Configuration/              # 应用配置管理
│
├── Domain/                         # 领域层
│   ├── Entities/                   # 实体类
│   │   ├── VideoContent.cs         # 视频内容
│   │   ├── PublishTask.cs          # 发布任务
│   │   ├── CookieSession.cs        # Cookie会话
│   │   └── CoverImage.cs           # 封面图片
│   └── Enums/                      # 枚举定义
│       ├── PlatformType.cs         # 平台类型
│       └── PublishTaskStatus.cs    # 任务状态
│
├── Infrastructure/                 # 基础设施层
│   ├── Data/                       # 数据访问
│   │   ├── AppDbContext.cs         # SQLite上下文
│   │   └── Repositories/           # 仓储实现
│   ├── Network/                    # 网络服务
│   │   └── NetworkMonitor.cs       # 网络状态监控
│   └── FileSystem/                 # 文件系统
│       └── FileDownloader.cs       # 大文件下载器
│
├── OpenClaw/                       # AI代理模块
│   ├── Abstractions/               # 抽象接口
│   │   └── IAiAgent.cs             # AI代理接口
│   ├── Agents/                     # 平台代理实现
│   │   ├── AgentBase.cs            # 代理基类
│   │   ├── DouyinAgent.cs          # 抖音代理
│   │   ├── XiaohongshuAgent.cs     # 小红书代理
│   │   ├── BaijiahaoAgent.cs       # 百家号代理
│   │   ├── WeixinChannelAgent.cs   # 视频号代理
│   │   └── ToutiaoAgent.cs         # 头条代理
│   ├── TaskScheduler/              # 任务调度
│   │   └── PublishTaskScheduler.cs # 任务调度器
│   └── Browser/                    # 浏览器控制
│       └── BrowserManager.cs       # Playwright管理器
│
├── Services/                       # 应用服务层
│   ├── VideoContentService.cs      # 视频内容服务
│   ├── PublishService.cs           # 发布服务
│   └── CookieSessionService.cs     # Cookie会话服务
│
├── ViewModels/                     # 视图模型层
│   └── Pages/
│       ├── DashboardViewModel.cs   # 仪表盘
│       ├── VideoManageViewModel.cs # 视频管理
│       ├── PublishTaskViewModel.cs # 发布任务
│       └── SettingsViewModel.cs    # 系统设置
│
└── Views/                          # 视图层
    ├── Windows/
    │   └── MainWindow.xaml         # 主窗口
    └── Pages/
        ├── DashboardPage.xaml      # 仪表盘页面
        ├── VideoManagePage.xaml    # 视频管理页面
        ├── PublishTaskPage.xaml    # 发布任务页面
        ├── CookieSessionPage.xaml  # 账号管理页面
        └── SettingsPage.xaml       # 设置页面

三、核心功能

3.1 仪表盘

统一的系统概览界面,提供:

  • 统计卡片:视频总数、今日发布数、待处理任务、失败任务
  • 平台状态:实时显示各平台账号连接状态
  • 快捷操作:一键添加视频、创建任务、管理账号
  • 最近任务:显示最近5条发布任务及其状态

3.2 视频库管理

完整的视频内容 CRUD 功能:

  • 视频列表:支持搜索、筛选、排序
  • 视频详情:标题、描述、标签、时长、文件大小
  • 封面管理:为不同平台设置不同比例的封面
  • 批量操作:批量删除、批量发布

3.3 发布任务管理

任务队列化管理与监控:

  • 任务创建:选择视频、目标平台、发布时间
  • 实时进度:显示上传、处理、发布各阶段进度
  • 状态筛选:按待处理/进行中/已完成/失败筛选
  • 失败重试:一键重试失败任务
  • 任务取消:支持取消排队中或进行中的任务

3.4 账号管理

多平台 Cookie 会话统一管理:

  • 账号列表:显示所有已添加的平台账号
  • 状态监控:实时检测 Cookie 有效性
  • 自动刷新:定期检查并提醒过期会话
  • Cookie导入:支持从浏览器导出的 Cookie JSON 导入

3.5 系统设置

丰富的配置选项:

| 分类 | 配置项 | |------|--------| | 网络设置 | 连接超时、读取超时、最大重试次数、重试间隔 | | 浏览器设置 | 页面加载超时、元素等待超时、操作延迟范围、无头模式 | | 下载设置 | 最大文件大小(1GB)、缓冲区大小、断点续传开关 | | 日志设置 | 日志级别、文件日志开关、保留天数 | | 外观设置 | 主题切换(浅色/深色/跟随系统) |


四、OpenClaw AI 代理模块

4.1 架构设计

┌──────────────────────────────────────────────────────┐
│                   IAiAgent 接口                       │
│  - LoginAsync()      登录验证                        │
│  - UploadVideoAsync() 上传视频                       │
│  - SetVideoMetadataAsync() 设置元数据                │
│  - SetCoverImageAsync() 设置封面                     │
│  - PublishAsync()    发布视频                        │
├──────────────────────────────────────────────────────┤
│                   AgentBase 基类                      │
│  - 重试策略 (Polly)                                  │
│  - 浏览器控制 (Playwright)                           │
│  - 验证码检测与处理                                   │
│  - 统一的状态和进度事件                               │
├──────────────────────────────────────────────────────┤
│              平台专用代理实现                          │
│  DouyinAgent │ XiaohongshuAgent │ BaijiahaoAgent    │
│  WeixinChannelAgent │ ToutiaoAgent                  │
└──────────────────────────────────────────────────────┘

4.2 IAiAgent 接口定义

public interface IAiAgent : IDisposable
{
    // 属性
    PlatformType Platform { get; }
    string Name { get; }
    AgentStatus Status { get; }

    // 核心方法
    Task InitializeAsync(CancellationToken ct = default);
    Task<bool> LoginAsync(CookieSession session, CancellationToken ct = default);
    Task<bool> UploadVideoAsync(VideoContent video, IProgress<int>? progress = null, CancellationToken ct = default);
    Task<bool> SetVideoMetadataAsync(string title, string[] tags, string description, CancellationToken ct = default);
    Task<bool> SetCoverImageAsync(CoverImage cover, CancellationToken ct = default);
    Task<PublishResult> PublishAsync(CancellationToken ct = default);

    // 事件
    event EventHandler<AgentStatusChangedEventArgs>? StatusChanged;
    event EventHandler<AgentProgressEventArgs>? ProgressChanged;
}

4.3 任务调度器

// 任务调度器核心功能
PublishTaskScheduler scheduler = new PublishTaskScheduler(dbContext);

// 启动调度器
scheduler.Start();

// 添加任务到队列
long taskId = await scheduler.EnqueueAsync(publishTask);

// 取消任务
await scheduler.CancelTaskAsync(taskId);

// 重试失败任务
await scheduler.RetryTaskAsync(taskId);

// 事件监听
scheduler.TaskStatusChanged += (s, e) => { /* 状态变更处理 */ };
scheduler.TaskProgressChanged += (s, e) => { /* 进度更新处理 */ };

4.4 浏览器自动化

基于 Playwright 的浏览器自动化特性:

  • 反检测机制:注入脚本隐藏自动化特征
  • Cookie 管理:自动加载/保存平台 Cookie
  • 页面等待策略:智能等待页面加载完成
  • 截图功能:发布失败时自动保存截图用于调试
  • 多浏览器支持:Chromium / Firefox / WebKit

五、网络弹性设计

5.1 网络监控

NetworkMonitor monitor = new NetworkMonitor();
monitor.Start();

// 检查网络连通性
bool isConnected = await monitor.CheckConnectivityAsync();

// 测量网络延迟
int latencyMs = await monitor.MeasureLatencyAsync("www.baidu.com");

// 等待网络恢复
await monitor.WaitForConnectivityAsync(cancellationToken);

// 监听状态变化
monitor.StatusChanged += (s, e) => {
    Console.WriteLine($"网络状态: {(e.IsConnected ? "已连接" : "已断开")}");
};

5.2 重试策略

采用 Polly 实现指数退避重试:

| 参数 | 默认值 | 说明 | |------|--------|------| | MaxRetries | 3 | 最大重试次数 | | InitialDelay | 1秒 | 初始重试延迟 | | MaxDelay | 30秒 | 最大重试延迟 | | BackoffMultiplier | 2.0 | 退避倍数 |

5.3 大文件下载器

FileDownloader downloader = new FileDownloader(networkMonitor);

var result = await downloader.DownloadAsync(
    url: "https://example.com/video.mp4",
    destinationPath: "Downloads/video.mp4",
    progress: new Progress<DownloadProgress>(p => {
        Console.WriteLine($"下载进度: {p.Progress}% - {p.FormattedSpeed}");
    }),
    cancellationToken
);

if (result.Success)
{
    Console.WriteLine($"下载完成: {result.DownloadedBytes} 字节");
}

特性:

  • 最大支持 1GB 文件
  • 断点续传支持
  • 实时进度报告
  • 网络中断自动等待

七、使用指南

7.1 快速开始

  1. 添加账号

    • 进入「账号管理」页面
    • 点击「添加账号」
    • 选择平台,输入账号名称
    • 从浏览器导出 Cookie 并粘贴
  2. 导入视频

    • 进入「视频库」页面
    • 点击「添加视频」
    • 填写标题、描述、标签
    • 选择本地视频文件
  3. 创建发布任务

    • 在视频列表中选择视频
    • 点击「发布」按钮
    • 选择目标平台和账号
    • 确认后任务自动加入队列
  4. 监控任务进度

    • 进入「发布任务」页面
    • 查看任务状态和进度
    • 失败任务可一键重试

7.2 最佳实践

  • Cookie 管理:定期检查 Cookie 有效性,过期前及时更新
  • 错峰发布:避免短时间内大量发布,降低被平台限制风险
  • 封面优化:为不同平台准备合适比例的封面图片
  • 网络环境:确保网络稳定,系统会自动处理短暂的网络抖动

八、配置说明

8.1 应用配置文件

配置文件路径:appsettings.json

{
  "Database": {
    "FilePath": "Data/autopublisher.db"
  },
  "Network": {
    "ConnectionTimeoutSeconds": 30,
    "MaxRetries": 3,
    "InitialRetryDelaySeconds": 1,
    "MaxRetryDelaySeconds": 30,
    "NetworkCheckIntervalSeconds": 5
  },
  "Browser": {
    "Headless": false,
    "PageLoadTimeoutSeconds": 60,
    "ActionTimeoutSeconds": 30,
    "

Related Skills

View on GitHub
GitHub Stars96
CategoryContent
Updated2h ago
Forks15

Languages

PowerShell

Security Score

100/100

Audited on Mar 24, 2026

No findings