import json import requests import os import time # --- 配置部分 --- # 服务器地址 (根据你的实际情况修改) SERVER_URL = "http://45.137.220.138:8888" # API 端点 API_ENDPOINT = f"{SERVER_URL}/api/account/add" # 本地账号文件路径 ACCOUNT_FILE = "registered_accounts.json" def post_account(pool_name, username, password, extra_data): """发送单个账号数据到服务器""" payload = { "pool_name": pool_name, "username": username, "password": password, "extra_data": extra_data } headers = { "authorization": "Bearer tok_e1696f7d20f14e0f9a0b30e116aab396" } try: response = requests.post(API_ENDPOINT, headers=headers, json=payload, timeout=5) if response.status_code == 200: res_json = response.json() print(f"✅ [{pool_name}] {username} -> {res_json.get('message', 'Success')}") return True else: print(f"❌ [{pool_name}] {username} -> 上传失败 (HTTP {response.status_code}): {response.text}") return False except Exception as e: print(f"❌ [{pool_name}] {username} -> 异常: {e}") return False def process_dict_format(data): """处理旧格式: {'pool_name': [accounts...]}""" print("📋 检测到格式: 字典 (Pool -> List)") count = 0 for pool_name, accounts in data.items(): for acc in accounts: username = acc.get("username") password = acc.get("password") # 把 ID 放入 extra_data extra = {"original_id": acc.get("id"), "source": "dict_upload"} if username and pool_name: if post_account(pool_name, username, password, extra): count += 1 return count def process_list_format(data): """处理新格式: [{'pool_name': '...', ...}, ...]""" print("📋 检测到格式: 列表 (Flat List)") count = 0 for acc in data: # 1. 提取核心字段 pool_name = acc.get("pool_name") username = acc.get("username") password = acc.get("password") # 2. 提取剩余字段作为 extra_data (country_code, phone 等) # 我们把除了上面三个字段以外的所有字段都塞进 extra_data exclude_keys = {"pool_name", "username", "password"} extra = {k: v for k, v in acc.items() if k not in exclude_keys} # 标记来源 extra["source"] = "list_upload" if not pool_name: print(f"⚠️ 跳过数据: 缺少 pool_name -> {acc}") continue if not username: print(f"⚠️ 跳过数据: 缺少 username -> {acc}") continue if post_account(pool_name, username, password, extra): count += 1 return count def main(): if not os.path.exists(ACCOUNT_FILE): print(f"[错误] 找不到文件: {ACCOUNT_FILE}") return try: with open(ACCOUNT_FILE, 'r', encoding='utf-8') as f: data = json.load(f) except json.JSONDecodeError: print(f"[错误] JSON 格式无效") return success_count = 0 # 智能识别结构 if isinstance(data, dict): success_count = process_dict_format(data) elif isinstance(data, list): success_count = process_list_format(data) else: print("❌ 未知的 JSON 结构,必须是对象或数组") print("\n" + "="*30) print(f"📊 任务完成,成功上传: {success_count} 个") print("="*30) if __name__ == "__main__": main()