wangzhibo
2025-07-27 e0fb1b468f7d607ff78232d250271c46f603c3a9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import os
import threading
from auto_media_publisher.utils.uploader_helper import create_and_run_uploader
from auto_media_publisher.config.conf_base import COOKIE_DIR,VIDEO_DIR_FINAL,MAX_VIDEO_FILES
from auto_media_publisher.utils.logger import PLATFORM_LOGGER
from auto_media_publisher.utils.utils_file import load_json
from auto_media_publisher.proxy.proxy_manager import get_user_proxy
from auto_media_publisher.task.task_generator import UserManager
import asyncio
user_manager = UserManager()
 
def find_pending_medias(user_dir):
        video_json_paths = []
        for root, dirs, files in os.walk(user_dir):
            for file in files:
                if file.endswith(".json") and not file.endswith(".json.ok"):
                    json_path = os.path.join(root, file)
                    if os.path.exists(json_path):
                        video_json_paths.append(json_path)
                        if len(video_json_paths) >= MAX_VIDEO_FILES:
                            return video_json_paths
        return video_json_paths
    
async def upload_user_medias(user):
    PLATFORM_LOGGER.info(f"[THREAD] Starting upload for user: {user}")
    cookie_path = os.path.join(COOKIE_DIR, user)
    video_dir_path = os.path.join(VIDEO_DIR_FINAL, user)
 
    #platforms = [f.split(".")[0] for f in os.listdir(cookie_path) if f.endswith(".json")]
    platforms = user_manager.get_user_platforms(user)
    PLATFORM_LOGGER.info(f"[THREAD] user {user} has {len(platforms)} platforms . which is/are:{platforms}")
    video_jsons = find_pending_medias(video_dir_path)
    proxy = get_user_proxy(user)
 
    for video_json_path in video_jsons:
        video_json_data = load_json(video_json_path)
        for platform in platforms:
            PLATFORM_LOGGER.info(f"[INFO] User {user} -> Platform {platform}, uploading {len(video_jsons)} medias")
            await create_and_run_uploader(platform=platform,json_data=video_json_data,proxy=proxy)
            video_json_data["platform"] = platform
            user_manager.insert_upload_logs_from_json(video_json_data)
        os.rename(video_json_path, video_json_path + ".ok")
            
 
 
def start_user_threads():
    users = user_manager.get_enabled_users()
    PLATFORM_LOGGER.info(f"[INFO] Found users: {users}")
 
    threads = []
 
    def run_async_upload(user):
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        try:
            loop.run_until_complete(upload_user_medias(user))
        finally:
            loop.close()
 
    for user in users:
        thread = threading.Thread(target=run_async_upload, args=(user,))
        thread.start()
        threads.append(thread)
 
    # 🔴 等待所有线程完成再退出主进程
    for thread in threads:
        thread.join()
 
 
if __name__ == "__main__":
    start_user_threads()