深入解析:Social-Auto-Upload - 多平台社交媒体视频自动化上传工具

news/2025/10/1 14:49:20/文章来源:https://www.cnblogs.com/wzzkaifa/p/19122437

Social-Auto-Upload - 多平台社交媒体视频自动化上传工具

目录


项目概览

social-auto-upload 是一个功能强大的多平台社交媒体视频自动化上传工具,专为内容创作者和运营团队打造。它支持国内外主流平台的视频发布,包括抖音、Bilibili、小红书、快手、视频号、百家号和TikTok等,实现了真正的"一键多发"功能。

核心价值

支持平台

国内平台
国外平台
  • TikTok - 全球短视频平台领导者
  • YouTube - 开发中

️ 系统架构

整体架构图

数据存储层
平台上传器
核心引擎层
应用服务层
用户交互层
SQLite数据库
文件存储系统
Cookie存储
抖音上传器
B站上传器
小红书上传器
快手上传器
视频号上传器
百家号上传器
TikTok上传器
平台适配器层
Playwright自动化引擎
Cookie管理系统
定时任务调度器
Flask后端API
账号管理模块
素材管理模块
发布调度模块
Web前端界面
命令行CLI工具

技术架构详解

前端技术栈
后端技术栈
  • Flask: 轻量级Python Web框架,快速构建RESTful API
  • SQLite: 嵌入式数据库,零配置部署,适合中小型应用
  • Playwright: 微软开源的浏览器自动化框架,支持多浏览器
  • AsyncIO: Python异步编程,提高并发处理能力

项目目录结构

social-auto-upload/
├── cli_main.py                 # 命令行入口
├── sau_backend.py              # Web后端服务
├── conf.example.py             # 配置文件模板
├── uploader/                   # 平台上传器
│   ├── douyin_uploader/        # 抖音上传器
│   │   └── main.py
│   ├── bilibili_uploader/      # B站上传器
│   ├── xiaohongshu_uploader/   # 小红书上传器
│   ├── ks_uploader/            # 快手上传器
│   ├── tencent_uploader/       # 视频号上传器
│   ├── tk_uploader/            # TikTok上传器
│   └── baijiahao_uploader/     # 百家号上传器
├── sau_frontend/               # Vue3前端项目
│   ├── src/
│   │   ├── views/             # 页面组件
│   │   ├── components/        # 公共组件
│   │   ├── api/              # API接口
│   │   ├── stores/           # 状态管理
│   │   └── router/           # 路由配置
│   ├── package.json
│   └── vite.config.js
├── utils/                      # 工具模块
│   ├── base_social_media.py   # 基础平台类
│   ├── constant.py            # 常量定义
│   ├── files_times.py         # 文件时间处理
│   ├── log.py                 # 日志系统
│   └── network.py             # 网络工具
├── examples/                   # 使用示例
│   ├── upload_video_to_douyin.py
│   ├── upload_video_to_bilibili.py
│   └── ...
├── myUtils/                    # 业务工具
│   ├── auth.py                # 认证模块
│   ├── login.py               # 登录处理
│   └── postVideo.py           # 视频发布
├── db/                         # 数据库
│   └── createTable.py         # 数据表创建
├── videos/                     # 视频存储目录
└── cookies/                    # Cookie存储目录

目录结构解析

核心模块
前端项目
  • sau_frontend/: 基于Vue3的Web管理界面
  • examples/: 平台使用示例脚本,新手学习首选
数据目录

安装部署

环境要求

快速安装

1. 克隆项目
git clone https://github.com/dreammis/social-auto-upload.git
cd social-auto-upload
2. Python环境配置

使用Conda (推荐):

# 创建虚拟环境
conda create -n social-auto-upload python=3.10
conda activate social-auto-upload
# 安装依赖
pip install -r requirements.txt

使用venv:

# 创建虚拟环境
python -m venv venv
# 激活环境 (Windows)
venv\Scripts\activate
# 激活环境 (macOS/Linux)
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
3. 浏览器驱动安装
# 安装Playwright浏览器
playwright install chromium
# 可选: 安装Firefox (TikTok旧版本需要)
playwright install firefox
4. 配置文件设置

复制配置模板:

cp conf.example.py conf.py

编辑 conf.py 文件,配置关键参数:

# 基础路径配置
BASE_DIR = Path(__file__).resolve().parent
# Chrome浏览器路径 (根据实际安装路径修改)
LOCAL_CHROME_PATH = r"C:\Program Files\Google\Chrome\Application\chrome.exe"  # Windows
# LOCAL_CHROME_PATH = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"  # macOS
# 抖音发布配置
DOUYIN_PUBLISH_MODE = "immediate"  # immediate: 立即发布, scheduled: 定时发布
DOUYIN_SCHEDULE_TIMES = ["09:30", "12:00", "18:30"]  # 定时发布时间点
DOUYIN_VIDEOS_PER_DAY = 3  # 每天发布视频数量
5. 数据库初始化
cd db
python createTable.py
cd ..
6. 创建必要目录
# 创建视频和Cookie存储目录
mkdir -p videoFile cookiesFile videos cookies
7. 启动服务

后端服务:

python sau_backend.py
# 访问: http://localhost:5409

前端开发服务:

cd sau_frontend
npm install
npm run dev
# 访问: http://localhost:5173

验证安装

运行以下命令测试环境:

# 测试CLI工具
python cli_main.py --help
# 测试后端API
curl http://localhost:5409/getValidAccounts

核心功能详解

1. 账号管理系统

Cookie认证机制

项目采用Cookie方式管理平台登录状态,避免频繁输入账号密码:

# Cookie验证流程
async def cookie_auth(account_file):
async with async_playwright() as playwright:
browser = await playwright.chromium.launch(headless=True)
context = await browser.new_context(storage_state=account_file)
page = await context.new_page()
# 访问平台并验证登录状态
await page.goto("https://creator.douyin.com/creator-micro/content/upload")
# 检查是否跳转到登录页面
if await page.get_by_text('扫码登录').count():
return False  # Cookie已失效
return True  # Cookie有效

Cookie管理的优势:

  • 安全性: 不存储明文密码,降低安全风险
  • 稳定性: 模拟真实浏览器行为,不易被检测
  • 便捷性: 一次登录,长期有效
多账号支持

支持同平台多账号管理:

cookies/
├── douyin_account1.json    # 抖音账号1
├── douyin_account2.json    # 抖音账号2
├── bilibili_main.json      # B站主账号
└── xiaohongshu_brand.json  # 小红书品牌账号

2. 智能发布调度

定时发布算法

系统提供智能的定时发布算法,支持批量视频的时间分配:

def generate_schedule_time_next_day(total_videos, videos_per_day=1, daily_times=None, start_days=0):
"""
生成视频发布时间表
Args:
total_videos: 总视频数量
videos_per_day: 每天发布数量
daily_times: 每日发布时间点
start_days: 开始天数偏移
Returns:
发布时间列表
"""
if daily_times is None:
daily_times = [6, 11, 14, 16, 22]  # 默认发布时间点
schedule = []
current_time = datetime.now()
for video in range(total_videos):
day = video // videos_per_day + start_days + 1
daily_video_index = video % videos_per_day
hour = daily_times[daily_video_index]
time_offset = timedelta(
days=day,
hours=hour - current_time.hour,
minutes=-current_time.minute,
seconds=-current_time.second
)
timestamp = current_time + time_offset
schedule.append(timestamp)
return schedule

调度策略示例:

  • 10个视频,每天发布3个
  • 发布时间: 09:30, 14:00, 19:00
  • 自动计算:第1天发3个,第2天发3个,第3天发3个,第4天发1个

3. 视频元数据管理

标题和标签提取

系统支持从文本文件自动提取视频元数据:

def get_title_and_hashtags(filename):
"""
从同名txt文件提取标题和标签
文件格式:
第一行: 视频标题
第二行: #标签1 #标签2 #标签3
"""
txt_filename = filename.replace(".mp4", ".txt")
with open(txt_filename, "r", encoding="utf-8") as f:
content = f.read()
lines = content.strip().split("\n")
title = lines[0]
hashtags = lines[1].replace("#", "").split(" ")
return title, hashtags

文件组织示例:

videos/
├── product_demo.mp4      # 视频文件
├── product_demo.txt      # 元数据文件
├── product_demo.png      # 封面图片(可选)
└── tutorial_01.mp4

元数据文件内容:

产品功能演示 - 新用户必看教程
#产品演示 #新手教程 #功能介绍 #软件测评

4. 平台适配引擎

统一接口设计

所有平台上传器都继承统一的基类接口:

class BaseSocialMediaUploader:
def __init__(self, title, file_path, tags, publish_date, account_file):
self.title = title
self.file_path = file_path
self.tags = tags
self.publish_date = publish_date
self.account_file = account_file
async def setup(self, account_file, handle=False):
"""账号登录和Cookie管理"""
pass
async def upload(self, playwright):
"""执行上传流程"""
pass
async def set_schedule_time(self, page, publish_date):
"""设置定时发布"""
pass
async def main(self):
"""主入口函数"""
async with async_playwright() as playwright:
await self.upload(playwright)
抖音上传器实现解析

以抖音平台为例,深入解析上传流程:

class DouYinVideo(BaseSocialMediaUploader):
async def upload(self, playwright: Playwright) -> None:
# 1. 启动浏览器
browser = await playwright.chromium.launch(
headless=False,
executable_path=self.local_executable_path
)
# 2. 加载Cookie创建上下文
context = await browser.new_context(storage_state=self.account_file)
page = await context.new_page()
# 3. 访问上传页面
await page.goto("https://creator.douyin.com/creator-micro/content/upload")
# 4. 上传视频文件
await page.locator("div[class^='container'] input").set_input_files(self.file_path)
# 5. 等待页面跳转,兼容不同版本
while True:
try:
await page.wait_for_url(
"https://creator.douyin.com/creator-micro/content/publish*",
timeout=3000
)
break
except:
await asyncio.sleep(0.5)
# 6. 填充视频信息
await self.fill_video_info(page)
# 7. 设置发布选项
if self.publish_date != 0:
await self.set_schedule_time_douyin(page, self.publish_date)
# 8. 点击发布并等待完成
await self.publish_video(page)
# 9. 保存Cookie状态
await context.storage_state(path=self.account_file)

关键技术要点:

  1. 页面等待策略: 使用多重try-catch处理页面跳转的不确定性
  2. 元素定位技术: 采用相对定位避免页面改版影响
  3. 异步操作: 全异步设计提高执行效率
  4. 错误容错: 完善的异常处理和重试机制

使用场景与实践

场景1: 内容创作者日常发布

需求: 个人博主需要将制作的视频同时发布到抖音、B站、小红书

解决方案:

  1. 准备阶段:
# 1. 将视频文件放入videos目录
videos/
├── daily_vlog_001.mp4
├── daily_vlog_001.txt      # 标题: 今日穿搭分享 | #穿搭 #OOTD #时尚
└── daily_vlog_001.png      # 封面(可选)
  1. 批量上传脚本:
import asyncio
from pathlib import Path
from uploader.douyin_uploader.main import DouYinVideo
from uploader.bilibili_uploader.main import BilibiliVideo
from uploader.xiaohongshu_uploader.main import XiaoHongShuVideo
async def multi_platform_upload():
video_file = Path("videos/daily_vlog_001.mp4")
title, tags = get_title_and_hashtags(str(video_file))
# 创建上传任务
douyin_task = DouYinVideo(title, video_file, tags, 0, "cookies/douyin_main.json")
bilibili_task = BilibiliVideo(title, video_file, tags, 0, "cookies/bilibili_main.json")
xhs_task = XiaoHongShuVideo(title, video_file, tags, 0, "cookies/xhs_main.json")
# 并发执行
await asyncio.gather(
douyin_task.main(),
bilibili_task.main(),
xhs_task.main()
)
# 执行上传
asyncio.run(multi_platform_upload())

总结

本文档提供了 social-auto-upload 项目的完整入门指南,包括:

  1. 项目概览 - 了解项目的核心价值和支持平台
  2. 系统架构 - 深入理解项目的技术架构和设计模式
  3. 安装部署 - 详细的环境搭建和配置指南
  4. 核心功能 - 账号管理、智能调度、平台适配等关键功能解析
  5. 使用场景 - 多种实际应用场景的解决方案
  6. 开发指南 - 为开发者提供的扩展和贡献指南
  7. 故障排查 - 常见问题的诊断和解决方案
  8. 性能优化 - 提升系统性能的最佳实践

关键特性回顾

技术亮点

  1. 适配器模式: 统一的平台接口设计,便于扩展
  2. 异步编程: 全异步架构,提高并发性能
  3. 智能调度: 灵活的发布时间策略
  4. 容错机制: 完善的错误处理和重试逻辑
  5. 模块化设计: 清晰的目录结构和组件划分

应用价值

社区贡献

欢迎开发者参与项目建设:

  • 提交Bug报告和Feature请求
  • 贡献代码和文档改进
  • 分享使用经验和最佳实践
  • 帮助完善项目文档

未来发展

项目roadmap包括:


免责声明: 本项目仅供学习和研究使用,请遵守各平台的使用条款和相关法律法规。使用本工具产生的任何后果由使用者自行承担。

版权说明: 本文档遵循MIT开源协议,欢迎转载和分享,请保留原文链接和作者信息。


项目地址: https://github.com/dreammis/social-auto-upload

官方文档: https://sap-doc.nasdaddy.com/

作者: @dreammis

最后更新: 2024年12月

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MX Round 11 解题报告

MX Round 11 解题报告 T1 水题,直接枚举计算即可。 T2 场切了,很爽!!! 因为操作是可以被覆盖的,所以考虑倒序考虑操作:一个位置一旦有了数,就再也不会变了。 然后我们考虑:有数的位置一定是一段连续的区间。这…

用 C# 打造企业资产管理系统雏形——从控制台到完整模块设计 - 详解

用 C# 打造企业资产管理系统雏形——从控制台到完整模块设计 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

青岛网站设计流程做网站的说3年3年包括什么

大家好,我是 🐟💨。前天,星球 的一位大学生朋友问了我几个问题:你大学时如何安排每日的时间?为什么能学那么多技术?你会学习到很晚吗?你是如何保持自律的?我觉得这几个问…

html5 网站设计网站模板 山

申请该结构体数组,容量为5,初始化5个学生的信息 使用fprintf将数组中的5个学生信息,保存到文件中去 下一次程序运行的时候,使用fscanf,将文件中的5个学生信息,写入(加载)到数组中去,并直接输出学…

java开发之微信机器人的二次开发

java开发之微信机器人的二次开发个微API服务能处理用户微信中的各种事件,并辅助微信执行各种操作,提供了开发者与个人号对接的能力,是一款基于微信提供的个人号开放性API,使用简单,操作快捷,支持多种微信方式接入…

10.1刷题计划一

力扣33题 搜索旋转排序数组 设x=nums[mid]是我们现在二分取到的数,需要判断x和target的位置关系。 (1)如果x和target在不同的递增段: 1.如果target在第一段,x在第二段,说明target在x在左边。 2.如果x在第一段,…

实用指南:渗透测试入门:从网络抓包到Web安全基础

实用指南:渗透测试入门:从网络抓包到Web安全基础2025-10-01 14:38 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

笔记本电脑重装系统后找不到5G WIFI无线网或蓝牙模块消失的解决方案

问题描述:笔记本电脑,重装系统后,蓝牙模块消失,且无线网显示不了5G校园网WIFI 问题解决: 电脑品牌网站下载更新驱动(如我的是联想服务官网https://newsupport.lenovo.com.cn/driveDownloads_index.html)1 查询并…

网站建设实施规范青岛市网页设计公司

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 🔆 OpenCV项目地址及源代码:点击这里 文章目录 图像模糊操作均值滤波高斯滤波中值滤波双边滤波 图像模糊操作 关于图片的噪声:指的是图片中存在的不必要或者多余的干扰数…

完整教程:降低fullgc停顿时间

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AI+传统工作流:Photoshop/Excel的智能插件开发指南 - 实践

AI+传统工作流:Photoshop/Excel的智能插件开发指南 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

菜鸟坚持记录-开头篇

这个世界上有两种事:一种是你能掌控的,另一种是你不能掌控的。我们只能做好我们能掌控的事,而对于我们掌控不了的事,不用太关注,也不用太在意。 人生匆匆百年,如梦幻泡影。人活在这个世界上是为了什么?无非是走…

菜鸟坚持记录-开头篇

这个世界上有两种事:一种是你能掌控的,另一种是你不能掌控的。我们只能做好我们能掌控的事,而对于我们掌控不了的事,不用太关注,也不用太在意。 人生匆匆百年,如梦幻泡影。人活在这个世界上是为了什么?无非是走…

淄博网站建设hiddd网站发展历程

题目有39级台阶,每一步只能走1阶或者2阶。如果需要走偶数步,求上台阶的方案数。分析拿到题目就是一通分析,39是奇数,一次走1阶或者两阶。。。那么就有:1*x2y39,x得是个奇数。。。要求走偶数步,那…

Typora 笔记迁移 Obsidian 图片附件库批量移动方法,适用于笔记整理。

解决了Typora 笔记迁移 Obsidian 图片附件库批量移动问题,在ypora 笔记迁移 Obsidian 图片附件库过程中,之前的笔记都是采用的相对路径方法,而现在准备采用`wiki`索引方法,因此得检查不能是否冲突,对文件夹(含子文…

小学网站建设报告闵行网页设计培训学校

概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET…

2025年确有专长培训权威推荐榜:专业资质与特色诊疗口碑之选

2025年确有专长培训权威推荐榜:专业资质与特色诊疗口碑之选 中医药作为我国独特的医疗资源,近年来在政策支持与市场需求的双重推动下蓬勃发展。确有专长医师作为中医药服务体系中的重要组成部分,其专业能力与诊疗水…

开源 C# 快速构建(五)自定义控件--仪表盘

开源 C# 快速构建(五)自定义控件--仪表盘pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

2025中医师承培训、考试、认证机构权威推荐榜:名师传承与临床实践口碑之选

2025中医师承培训、考试、认证机构权威推荐榜:名师传承与临床实践口碑之选 在中医药事业蓬勃发展的今天,中医师承教育作为传统医学传承的重要方式,正受到越来越多从业者的关注与重视。随着国家对中医药传承创新支持…