fix: 将所有后端文件都迁移到 sau_backend 文件夹内
@@ -167,4 +167,5 @@ youtube_uploader/*.json
|
|||||||
douyin_uploader/*.json
|
douyin_uploader/*.json
|
||||||
bilibili_uploader/*.json
|
bilibili_uploader/*.json
|
||||||
tk_uploader/*.json
|
tk_uploader/*.json
|
||||||
cookies
|
|
||||||
|
sau_backend/cookies
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
项目实现了对 `抖音`、`Bilibili`、`小红书`、`快手`、`视频号`、`百家号` 以及 `TikTok` 等平台的视频上传、定时发布等功能。
|
项目实现了对 `抖音`、`Bilibili`、`小红书`、`快手`、`视频号`、`百家号` 以及 `TikTok` 等平台的视频上传、定时发布等功能。
|
||||||
结合各平台 `uploader` 模块,您可以轻松配置和扩展支持的平台,并通过示例脚本快速上手。
|
结合各平台 `uploader` 模块,您可以轻松配置和扩展支持的平台,并通过示例脚本快速上手。
|
||||||
|
|
||||||
<img src="media/show/tkupload.gif" alt="tiktok show" width="800"/>
|
<img src="sau_backend/media/show/tkupload.gif" alt="tiktok show" width="800"/>
|
||||||
|
|
||||||
## 目录
|
## 目录
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
|
|
||||||
| 微信公众号 | 交流群 (通过公众号获取) |
|
| 微信公众号 | 交流群 (通过公众号获取) |
|
||||||
| :----------------------------------------: | :------------------------------------------: |
|
| :----------------------------------------: | :------------------------------------------: |
|
||||||
|  |  |
|
|  |  |
|
||||||
| 关注公众号,后台回复 `上传` 获取加群方式 | 如果您觉得项目有用,可以考虑打赏支持一下 |
|
| 关注公众号,后台回复 `上传` 获取加群方式 | 如果您觉得项目有用,可以考虑打赏支持一下 |
|
||||||
|
|
||||||
## 🤝贡献指南
|
## 🤝贡献指南
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.baijiahao_uploader.main import baijiahao_setup
|
from sau_backend.uploader.baijiahao_uploader.main import baijiahao_setup
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
account_file = Path(BASE_DIR / "cookies" / "baijiahao_uploader" / "account.json")
|
account_file = Path(BASE_DIR / "cookies" / "baijiahao_uploader" / "account.json")
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.douyin_uploader.main import douyin_setup
|
from sau_backend.uploader.douyin_uploader.main import douyin_setup
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
account_file = Path(BASE_DIR / "cookies" / "douyin_uploader" / "account.json")
|
account_file = Path(BASE_DIR / "cookies" / "douyin_uploader" / "account.json")
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.ks_uploader.main import ks_setup
|
from sau_backend.uploader.ks_uploader.main import ks_setup
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
account_file = Path(BASE_DIR / "cookies" / "ks_uploader" / "account.json")
|
account_file = Path(BASE_DIR / "cookies" / "ks_uploader" / "account.json")
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.tencent_uploader.main import weixin_setup
|
from sau_backend.uploader.tencent_uploader.main import weixin_setup
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
account_file = Path(BASE_DIR / "cookies" / "tencent_uploader" / "account.json")
|
account_file = Path(BASE_DIR / "cookies" / "tencent_uploader" / "account.json")
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.tk_uploader.main_chrome import tiktok_setup
|
from sau_backend.uploader.tk_uploader.main_chrome import tiktok_setup
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
account_file = Path(BASE_DIR / "cookies" / "tk_uploader" / "account.json")
|
account_file = Path(BASE_DIR / "cookies" / "tk_uploader" / "account.json")
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.baijiahao_uploader.main import baijiahao_setup, BaiJiaHaoVideo
|
from sau_backend.uploader.baijiahao_uploader.main import baijiahao_setup, BaiJiaHaoVideo
|
||||||
from utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
from sau_backend.utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import time
|
import time
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from uploader.bilibili_uploader.main import read_cookie_json_file, extract_keys_from_json, random_emoji, BilibiliUploader
|
from sau_backend.uploader.bilibili_uploader.main import read_cookie_json_file, extract_keys_from_json, random_emoji, BilibiliUploader
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from utils.constant import VideoZoneTypes
|
from sau_backend.utils.constant import VideoZoneTypes
|
||||||
from utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
from sau_backend.utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
filepath = Path(BASE_DIR) / "videos"
|
filepath = Path(BASE_DIR) / "videos"
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.douyin_uploader.main import douyin_setup, DouYinVideo
|
from sau_backend.uploader.douyin_uploader.main import douyin_setup, DouYinVideo
|
||||||
from utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
from sau_backend.utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.ks_uploader.main import ks_setup, KSVideo
|
from sau_backend.uploader.ks_uploader.main import ks_setup, KSVideo
|
||||||
from utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
from sau_backend.utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from uploader.tencent_uploader.main import weixin_setup, TencentVideo
|
from sau_backend.uploader.tencent_uploader.main import weixin_setup, TencentVideo
|
||||||
from utils.constant import TencentZoneTypes
|
from sau_backend.utils.constant import TencentZoneTypes
|
||||||
from utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
from sau_backend.utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
# from tk_uploader.main import tiktok_setup, TiktokVideo
|
# from tk_uploader.main import tiktok_setup, TiktokVideo
|
||||||
from uploader.tk_uploader.main_chrome import tiktok_setup, TiktokVideo
|
from sau_backend.uploader.tk_uploader.main_chrome import tiktok_setup, TiktokVideo
|
||||||
from utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
from sau_backend.utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
@@ -4,9 +4,9 @@ from time import sleep
|
|||||||
|
|
||||||
from xhs import XhsClient
|
from xhs import XhsClient
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
from utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
from sau_backend.utils.files_times import generate_schedule_time_next_day, get_title_and_hashtags
|
||||||
from uploader.xhs_uploader.main import sign_local, beauty_print
|
from sau_backend.uploader.xhs_uploader.main import sign_local, beauty_print
|
||||||
|
|
||||||
config = configparser.RawConfigParser()
|
config = configparser.RawConfigParser()
|
||||||
config.read(Path(BASE_DIR / "uploader" / "xhs_uploader" / "accounts.ini"))
|
config.read(Path(BASE_DIR / "uploader" / "xhs_uploader" / "accounts.ini"))
|
||||||
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 274 KiB After Width: | Height: | Size: 274 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 396 KiB After Width: | Height: | Size: 396 KiB |
|
Before Width: | Height: | Size: 901 KiB After Width: | Height: | Size: 901 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
@@ -1,5 +1,5 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
Path(BASE_DIR / "cookies").mkdir(exist_ok=True)
|
Path(BASE_DIR / "cookies").mkdir(exist_ok=True)
|
||||||
@@ -7,10 +7,10 @@ import os
|
|||||||
import time
|
import time
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from conf import LOCAL_CHROME_PATH
|
from sau_backend.conf import LOCAL_CHROME_PATH
|
||||||
from utils.base_social_media import set_init_script
|
from sau_backend.utils.base_social_media import set_init_script
|
||||||
from utils.log import baijiahao_logger
|
from sau_backend.utils.log import baijiahao_logger
|
||||||
from utils.network import async_retry
|
from sau_backend.utils.network import async_retry
|
||||||
|
|
||||||
|
|
||||||
async def baijiahao_cookie_gen(account_file):
|
async def baijiahao_cookie_gen(account_file):
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
Path(BASE_DIR / "cookies" / "bilibili_uploader").mkdir(exist_ok=True)
|
Path(BASE_DIR / "cookies" / "bilibili_uploader").mkdir(exist_ok=True)
|
||||||
@@ -3,7 +3,7 @@ import pathlib
|
|||||||
import random
|
import random
|
||||||
from biliup.plugins.bili_webup import BiliBili, Data
|
from biliup.plugins.bili_webup import BiliBili, Data
|
||||||
|
|
||||||
from utils.log import bilibili_logger
|
from sau_backend.utils.log import bilibili_logger
|
||||||
|
|
||||||
|
|
||||||
def extract_keys_from_json(data):
|
def extract_keys_from_json(data):
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
Path(BASE_DIR / "cookies" / "douyin_uploader").mkdir(exist_ok=True)
|
Path(BASE_DIR / "cookies" / "douyin_uploader").mkdir(exist_ok=True)
|
||||||
@@ -5,9 +5,9 @@ from playwright.async_api import Playwright, async_playwright, Page
|
|||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from conf import LOCAL_CHROME_PATH
|
from sau_backend.conf import LOCAL_CHROME_PATH
|
||||||
from utils.base_social_media import set_init_script
|
from sau_backend.utils.base_social_media import set_init_script
|
||||||
from utils.log import douyin_logger
|
from sau_backend.utils.log import douyin_logger
|
||||||
|
|
||||||
|
|
||||||
async def cookie_auth(account_file):
|
async def cookie_auth(account_file):
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
Path(BASE_DIR / "cookies" / "ks_uploader").mkdir(exist_ok=True)
|
Path(BASE_DIR / "cookies" / "ks_uploader").mkdir(exist_ok=True)
|
||||||
@@ -5,10 +5,10 @@ from playwright.async_api import Playwright, async_playwright
|
|||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from conf import LOCAL_CHROME_PATH
|
from sau_backend.conf import LOCAL_CHROME_PATH
|
||||||
from utils.base_social_media import set_init_script
|
from sau_backend.utils.base_social_media import set_init_script
|
||||||
from utils.files_times import get_absolute_path
|
from sau_backend.utils.files_times import get_absolute_path
|
||||||
from utils.log import kuaishou_logger
|
from sau_backend.utils.log import kuaishou_logger
|
||||||
|
|
||||||
|
|
||||||
async def cookie_auth(account_file):
|
async def cookie_auth(account_file):
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
Path(BASE_DIR / "cookies" / "tencent_uploader").mkdir(exist_ok=True)
|
Path(BASE_DIR / "cookies" / "tencent_uploader").mkdir(exist_ok=True)
|
||||||
@@ -5,10 +5,10 @@ from playwright.async_api import Playwright, async_playwright
|
|||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from conf import LOCAL_CHROME_PATH
|
from sau_backend.conf import LOCAL_CHROME_PATH
|
||||||
from utils.base_social_media import set_init_script
|
from sau_backend.utils.base_social_media import set_init_script
|
||||||
from utils.files_times import get_absolute_path
|
from sau_backend.utils.files_times import get_absolute_path
|
||||||
from utils.log import tencent_logger
|
from sau_backend.utils.log import tencent_logger
|
||||||
|
|
||||||
|
|
||||||
def format_str_for_short_title(origin_title: str) -> str:
|
def format_str_for_short_title(origin_title: str) -> str:
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
Path(BASE_DIR / "cookies" / "tk_uploader").mkdir(exist_ok=True)
|
Path(BASE_DIR / "cookies" / "tk_uploader").mkdir(exist_ok=True)
|
||||||
@@ -5,10 +5,10 @@ from datetime import datetime
|
|||||||
from playwright.async_api import Playwright, async_playwright
|
from playwright.async_api import Playwright, async_playwright
|
||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
from uploader.tk_uploader.tk_config import Tk_Locator
|
from sau_backend.uploader.tk_uploader.tk_config import Tk_Locator
|
||||||
from utils.base_social_media import set_init_script
|
from sau_backend.utils.base_social_media import set_init_script
|
||||||
from utils.files_times import get_absolute_path
|
from sau_backend.utils.files_times import get_absolute_path
|
||||||
from utils.log import tiktok_logger
|
from sau_backend.utils.log import tiktok_logger
|
||||||
|
|
||||||
|
|
||||||
async def cookie_auth(account_file):
|
async def cookie_auth(account_file):
|
||||||
@@ -6,11 +6,11 @@ from playwright.async_api import Playwright, async_playwright
|
|||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from conf import LOCAL_CHROME_PATH
|
from sau_backend.conf import LOCAL_CHROME_PATH
|
||||||
from uploader.tk_uploader.tk_config import Tk_Locator
|
from sau_backend.uploader.tk_uploader.tk_config import Tk_Locator
|
||||||
from utils.base_social_media import set_init_script
|
from sau_backend.utils.base_social_media import set_init_script
|
||||||
from utils.files_times import get_absolute_path
|
from sau_backend.utils.files_times import get_absolute_path
|
||||||
from utils.log import tiktok_logger
|
from sau_backend.utils.log import tiktok_logger
|
||||||
|
|
||||||
|
|
||||||
async def cookie_auth(account_file):
|
async def cookie_auth(account_file):
|
||||||
@@ -6,7 +6,7 @@ from time import sleep
|
|||||||
import requests
|
import requests
|
||||||
from playwright.sync_api import sync_playwright
|
from playwright.sync_api import sync_playwright
|
||||||
|
|
||||||
from conf import BASE_DIR, XHS_SERVER
|
from sau_backend.conf import BASE_DIR, XHS_SERVER
|
||||||
|
|
||||||
config = configparser.RawConfigParser()
|
config = configparser.RawConfigParser()
|
||||||
config.read('accounts.ini')
|
config.read('accounts.ini')
|
||||||
@@ -5,7 +5,7 @@ from time import sleep
|
|||||||
|
|
||||||
from xhs import XhsClient
|
from xhs import XhsClient
|
||||||
|
|
||||||
from uploader.xhs_uploader.main import sign
|
from sau_backend.uploader.xhs_uploader.main import sign
|
||||||
|
|
||||||
# pip install qrcode
|
# pip install qrcode
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
SOCIAL_MEDIA_DOUYIN = "douyin"
|
SOCIAL_MEDIA_DOUYIN = "douyin"
|
||||||
SOCIAL_MEDIA_TENCENT = "tencent"
|
SOCIAL_MEDIA_TENCENT = "tencent"
|
||||||
@@ -3,7 +3,7 @@ from datetime import timedelta
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
|
|
||||||
def get_absolute_path(relative_path: str, base_dir: str = None) -> str:
|
def get_absolute_path(relative_path: str, base_dir: str = None) -> str:
|
||||||
@@ -2,7 +2,7 @@ from pathlib import Path
|
|||||||
from sys import stdout
|
from sys import stdout
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from conf import BASE_DIR
|
from sau_backend.conf import BASE_DIR
|
||||||
|
|
||||||
|
|
||||||
def log_formatter(record: dict) -> str:
|
def log_formatter(record: dict) -> str:
|
||||||
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |