├── .gitignore
├── README.md
├── __init__.py
├── cli_main.py
├── conf.example.py
├── db
└── createTable.py
├── examples
├── __init__.py
├── get_baijiahao_cookie.py
├── get_bilibili_cookie.py
├── get_douyin_cookie.py
├── get_kuaishou_cookie.py
├── get_tencent_cookie.py
├── get_tk_cookie.py
├── get_xiaohongshu_cookie.py
├── upload_video_to_baijiahao.py
├── upload_video_to_bilibili.py
├── upload_video_to_douyin.py
├── upload_video_to_kuaishou.py
├── upload_video_to_tencent.py
├── upload_video_to_tiktok.py
├── upload_video_to_xhs.py
└── upload_video_to_xiaohongshu.py
├── media
├── 20231009111131.png
├── 20231009111214.png
├── QR.png
├── edan-qrcode.png
├── get_bili_cookie.png
├── group-qr.png
├── mp.jpg
├── show
│ ├── pdf3.gif
│ └── tkupload.gif
├── tk_login.png
└── xhs_error_cookie.png
├── myUtils
├── __init__.py
├── auth.py
├── login.py
└── postVideo.py
├── requirements.txt
├── sau_backend.py
├── sau_backend
└── README.md
├── sau_frontend
├── .env.development
├── .env.production
├── README.md
├── index.html
├── package.json
├── public
│ └── vite.svg
├── src
│ ├── App.vue
│ ├── api
│ │ ├── account.js
│ │ ├── index.js
│ │ ├── material.js
│ │ └── user.js
│ ├── assets
│ │ └── vue.svg
│ ├── components
│ │ └── helloworld.vue
│ ├── main.js
│ ├── router
│ │ └── index.js
│ ├── stores
│ │ ├── account.js
│ │ ├── app.js
│ │ ├── index.js
│ │ └── user.js
│ ├── styles
│ │ ├── index.scss
│ │ ├── reset.scss
│ │ └── variables.scss
│ ├── utils
│ │ └── request.js
│ └── views
│ │ ├── About.vue
│ │ ├── AccountManagement.vue
│ │ ├── Dashboard.vue
│ │ ├── Home.vue
│ │ ├── MaterialManagement.vue
│ │ └── PublishCenter.vue
└── vite.config.js
├── uploader
├── __init__.py
├── baijiahao_uploader
│ ├── __init__.py
│ └── main.py
├── bilibili_uploader
│ ├── __init__.py
│ ├── biliup.exe
│ └── main.py
├── douyin_uploader
│ ├── __init__.py
│ └── main.py
├── ks_uploader
│ ├── __init__.py
│ └── main.py
├── tencent_uploader
│ ├── __init__.py
│ └── main.py
├── tk_uploader
│ ├── __init__.py
│ ├── main.py
│ ├── main_chrome.py
│ └── tk_config.py
├── xhs_uploader
│ ├── __init__.py
│ ├── accounts.ini
│ ├── main.py
│ └── xhs_login_qrcode.py
└── xiaohongshu_uploader
│ ├── __init__.py
│ └── main.py
├── utils
├── __init__.py
├── base_social_media.py
├── constant.py
├── files_times.py
├── log.py
├── network.py
└── stealth.min.js
└── videos
├── demo.mp4
├── demo.png
└── demo.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | share/python-wheels/
24 | *.egg-info/
25 | .installed.cfg
26 | *.egg
27 | MANIFEST
28 |
29 | # PyInstaller
30 | # Usually these files are written by a python script from a template
31 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
32 | *.manifest
33 | *.spec
34 |
35 | # Installer logs
36 | pip-log.txt
37 | pip-delete-this-directory.txt
38 |
39 | # Unit test / coverage reports
40 | htmlcov/
41 | .tox/
42 | .nox/
43 | .coverage
44 | .coverage.*
45 | .cache
46 | nosetests.xml
47 | coverage.xml
48 | *.cover
49 | *.py,cover
50 | .hypothesis/
51 | .pytest_cache/
52 | cover/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | .pybuilder/
76 | target/
77 |
78 | # Jupyter Notebook
79 | .ipynb_checkpoints
80 |
81 | # IPython
82 | profile_default/
83 | ipython_config.py
84 |
85 | # pyenv
86 | # For a library or package, you might want to ignore these files since the code is
87 | # intended to run in multiple environments; otherwise, check them in:
88 | # .python-version
89 |
90 | # pipenv
91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
94 | # install all needed dependencies.
95 | #Pipfile.lock
96 |
97 | # poetry
98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99 | # This is especially recommended for binary packages to ensure reproducibility, and is more
100 | # commonly ignored for libraries.
101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102 | #poetry.lock
103 |
104 | # pdm
105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106 | #pdm.lock
107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108 | # in version control.
109 | # https://pdm.fming.dev/#use-with-ide
110 | .pdm.toml
111 |
112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113 | __pypackages__/
114 |
115 | # Celery stuff
116 | celerybeat-schedule
117 | celerybeat.pid
118 |
119 | # SageMath parsed files
120 | *.sage.py
121 |
122 | # Environments
123 | .env
124 | .venv
125 | env/
126 | venv/
127 | ENV/
128 | env.bak/
129 | venv.bak/
130 |
131 | # Spyder project settings
132 | .spyderproject
133 | .spyproject
134 |
135 | # Rope project settings
136 | .ropeproject
137 |
138 | # mkdocs documentation
139 | /site
140 |
141 | # mypy
142 | .mypy_cache/
143 | .dmypy.json
144 | dmypy.json
145 |
146 | # Pyre type checker
147 | .pyre/
148 |
149 | # pytype static type analyzer
150 | .pytype/
151 |
152 | # Cython debug symbols
153 | cython_debug/
154 |
155 | # PyCharm
156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158 | # and can be added to the global gitignore or merged into this file. For a more nuclear
159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160 | .idea/
161 |
162 | .DS_Store
163 |
164 | # ignore cookie file
165 | tencent_uploader/*.json
166 | youtube_uploader/*.json
167 | douyin_uploader/*.json
168 | bilibili_uploader/*.json
169 | tk_uploader/*.json
170 |
171 | # 配置文件
172 | conf.py
173 |
174 | # 账号文件
175 | cookies
176 |
177 | # Frontend
178 | .vite/
179 | dist/
180 | node_modules/
181 | package-lock.json
182 |
183 | # database
184 | db/database.db
185 |
186 | # 临时文件夹
187 | cookiesFile
188 | uploadFile
189 | videoFile
190 |
191 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # social-auto-upload
2 |
3 | `social-auto-upload` 是一个强大的自动化工具,旨在帮助内容创作者和运营者高效地将视频内容一键发布到多个国内外主流社交媒体平台。
4 | 项目实现了对 `抖音`、`Bilibili`、`小红书`、`快手`、`视频号`、`百家号` 以及 `TikTok` 等平台的视频上传、定时发布等功能。
5 | 结合各平台 `uploader` 模块,您可以轻松配置和扩展支持的平台,并通过示例脚本快速上手。
6 |
7 |
8 |
9 | ## 目录
10 |
11 | - [💡 功能特性](#💡功能特性)
12 | - [🚀 支持的平台](#🚀支持的平台)
13 | - [💾 安装指南](#💾安装指南)
14 | - [🏁 快速开始](#🏁快速开始)
15 | - [🐇 项目背景](#🐇项目背景)
16 | - [📃 详细文档](#📃详细文档)
17 | - [🐾 交流与支持](#🐾交流与支持)
18 | - [🤝 贡献指南](#🤝贡献指南)
19 | - [📜 许可证](#📜许可证)
20 | - [⭐ Star History](#⭐Star-History)
21 |
22 | ## 💡功能特性
23 |
24 | ### 已支持平台
25 |
26 | - **国内平台**:
27 | - [x] 抖音
28 | - [x] 视频号
29 | - [x] Bilibili
30 | - [x] 小红书
31 | - [x] 快手
32 | - [x] 百家号
33 | - **国外平台**:
34 | - [x] TikTok
35 |
36 | ### 核心功能
37 |
38 | - [x] 定时上传 (Cron Job / Scheduled Upload)
39 | - [ ] Cookie 管理 (部分实现,持续优化中)
40 | - [ ] 国外平台 Proxy 设置 (部分实现)
41 |
42 | ### 计划支持与开发中
43 |
44 | - **平台扩展**:
45 | - [ ] QQ视频
46 | - [ ] YouTube
47 | - **功能增强**:
48 | - [x] 更易用的版本 (GUI / CLI 交互优化)
49 | - [x] API 封装
50 | - [ ] Docker 部署
51 | - [ ] 自动化上传 (更智能的调度策略)
52 | - [ ] 多线程/异步上传优化
53 | - [ ] Slack/消息推送通知
54 |
55 | ---
56 |
57 | ## 🚀支持的平台
58 |
59 | 本项目通过各平台对应的 `uploader` 模块实现视频上传功能。您可以在 `examples` 目录下找到各个平台的使用示例脚本。
60 |
61 | 每个示例脚本展示了如何配置和调用相应的 uploader。
62 |
63 | ## 💾安装指南
64 |
65 | 1. **克隆项目**:
66 | ```bash
67 | git clone https://github.com/dreammis/social-auto-upload.git
68 | cd social-auto-upload
69 | ```
70 |
71 | 2. **安装依赖**:
72 | 建议在虚拟环境中安装依赖。
73 | ```bash
74 | conda create -n social-auto-upload python=3.10
75 | conda activate social-auto-upload
76 | # 挂载清华镜像 or 命令行代理
77 | pip install -r requirements.txt
78 | ```
79 |
80 | 3. **安装 Playwright 浏览器驱动**:
81 | ```bash
82 | playwright install chromium firefox
83 | ```
84 | 根据您的需求,至少需要安装 `chromium`。`firefox` 主要用于 TikTok 上传(旧版)。
85 |
86 | 4. **修改配置文件**:
87 | 复制 `conf.example.py` 并重命名为 `conf.py`。
88 | 在 `conf.py` 中,您需要配置以下内容:
89 | - `LOCAL_CHROME_PATH`: 本地 Chrome 浏览器的路径,比如 `C:\Program Files\Google\Chrome\Application\chrome.exe` 保存。
90 |
91 | **临时解决方案**
92 |
93 | 需要在根目录创建 `cookiesFile` 和 `videoFile` 两个文件夹,分别是 存储cookie文件 和 存储上传文件 的文件夹
94 |
95 | 5. **配置数据库**:
96 | 如果 db/database.db 文件不存在,您可以运行以下命令来初始化数据库:
97 | ```bash
98 | cd db
99 | python createTable.py
100 | ```
101 | 此命令将初始化 SQLite 数据库。
102 |
103 | 6. **启动后端项目**:
104 | ```bash
105 | python sau_backend.py
106 | ```
107 | 后端项目将在 `http://localhost:5409` 启动。
108 |
109 | 7. **启动前端项目**:
110 | ```bash
111 | cd sau_frontend
112 | npm install
113 | npm run dev
114 | ```
115 | 前端项目将在 `http://localhost:5173` 启动,在浏览器中打开此链接即可访问。
116 |
117 |
118 | > 非程序员用户可以参考:[新手级教程](https://juejin.cn/post/7372114027840208911)
119 |
120 |
121 | ## 🏁快速开始
122 |
123 | 1. **准备 Cookie**:
124 | 大多数平台需要登录后的 Cookie 信息才能进行操作。请参照 examples 目录下各 `get_xxx_cookie.py` 脚本(例如 get_douyin_cookie.py, get_ks_cookie.py)的说明,运行脚本以生成并保存 Cookie 文件(通常在 `cookies/[PLATFORM]_uploader/account.json`)。
125 |
126 | 2. **准备视频文件**:
127 | 将需要上传的视频文件(通常为 `.mp4` 格式)放置在 videos 目录下。
128 | 部分平台支持视频封面,可以将封面图片(例如 `.png` 格式,与视频同名)也放在此目录。
129 | 如果需要上传标题及标签,请在视频文件旁边创建一个同名的 `.txt` 文件,内容为标题和标签,以换行分隔。
130 |
131 | 3. **修改并运行示例脚本**:
132 | 打开 examples 目录中您想使用的平台的上传脚本(例如 upload_video_to_douyin.py)。
133 | - 根据脚本内的注释和说明,确认 Cookie 文件路径、视频文件路径等配置是否正确。
134 | - 您可以修改脚本以适应您的具体需求,例如批量上传、自定义标题、标签等。
135 |
136 | 4. **执行上传**:
137 | 运行修改后的示例脚本,例如:
138 | ```bash
139 | python examples/upload_video_to_douyin.py
140 | ```
141 |
142 | ## 🐇项目背景
143 |
144 | 该项目最初是我个人用于自动化管理社交媒体视频发布的工具。我的主要发布策略是提前一天设置定时发布,因此项目中很多定时发布相关的逻辑是基于“第二天”的时间进行计算的。
145 |
146 | 如果您需要立即发布或其他定制化的发布策略,欢迎研究源码或在社区提问。
147 |
148 | ## 📃详细文档
149 |
150 | 更详细的文档和说明,请查看:[social-auto-upload 官方文档](https://sap-doc.nasdaddy.com/)
151 |
152 | ## 🐾交流与支持
153 |
154 | [☕ Donate as u like](https://www.buymeacoffee.com/hysn2001m) - 如果您觉得这个项目对您有帮助,可以考虑赞助。
155 |
156 | 如果您也是独立开发者、技术爱好者,对 #技术变现 #AI创业 #跨境电商 #自动化工具 #视频创作 等话题感兴趣,欢迎加入社群交流。
157 |
158 | ### Creator
159 |
160 |
162 |
163 | ![]() 165 | 微信公众号 166 | 167 | 168 | 💻 169 | 170 | 关注公众号,后台回复 `上传` 获取加群方式 171 | |
172 |
173 |
174 | ![]() 176 | 交流群 (通过公众号获取) 177 | 178 | 179 | 📖 180 | 181 | 如果您觉得项目有用,可以考虑打赏支持一下 182 | |
183 |
189 |
190 | ![]() 192 | Edan Lee 193 | 194 | 195 | 💻 196 | 📖 197 | 198 | 封装了 api 接口和 web 前端管理界面 199 | 200 | (请注明来意:进群、学习、企业咨询等) 201 | |
202 |
9 | 这是一个使用 Element Plus 的示例组件 10 |
11 |这是关于页面
5 |这是一个集成了 Vue3、Vite、Element Plus、Pinia、Vue Router 和 Axios 的现代化前端项目
6 |基于 Vite 构建,提供极速的开发体验
17 |使用 Vue3 Composition API 和 setup 语法
28 |集成路由、状态管理、HTTP请求等完整解决方案
39 |文件名: {{ currentMaterial.filename }}
116 |文件大小: {{ currentMaterial.filesize }} MB
117 |上传时间: {{ currentMaterial.upload_time }}
118 |