Files
keyhunter-parser/sync_keys_live.py

83 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""sync_keys_live.py — авто-синхронизатор: keys.db WORKING → rotator + one-api
Одним запуском: читает все WORKING DashScope-ключи из мастер-базы, добавляет в
dashscope_keys.json (ротатор) и one-api каналы. Дубликаты пропускает по точному
совпадению ключа.
Usage: python sync_keys_live.py
"""
import json, time, sqlite3
DB = r"C:\Users\User\Desktop\keyhunter\data\keys.db"
ROTATOR = r"C:\Users\User\.omp\agent\dashscope_keys.json"
ONEAPI = r"C:\Users\User\tmp\gw-run\one-api.db"
BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode"
def load_live_keys():
"""Все WORKING DashScope-ключи из мастер-базы."""
conn = sqlite3.connect(DB)
rows = conn.execute("""
SELECT id, hash, prov, val, plan FROM keys
WHERE prov IN ('DASHSCOPE','gh_blitz','gh_expanded','gitlab_public')
AND status='WORKING'
ORDER BY id
""").fetchall()
conn.close()
return rows
def sync_rotator(live_keys):
"""Добавить недостающие ключи в dashscope_keys.json."""
data = json.loads(open(ROTATOR).read())
existing = set(data.get("keys", []))
added = []
for row in live_keys:
k = row[3] # val
if k not in existing:
data["keys"].append(k)
existing.add(k)
added.append(k)
if added:
data["synced_at"] = time.strftime("%Y-%m-%dT%H:%M:%SZ")
json.dump(data, open(ROTATOR, "w"), indent=2, ensure_ascii=False)
return added
def sync_oneapi(live_keys):
"""Добавить недостающие ключи как каналы в one-api."""
conn = sqlite3.connect(ONEAPI)
existing = set(row[0] for row in conn.execute(
"SELECT key FROM channels WHERE type=1 AND base_url LIKE '%dashscope%'"))
ts = int(time.time())
added = []
for row in live_keys:
k = row[3]
if k in existing:
continue
name = f"dashscope-sync-{row[0]}" # по id из keys.db
conn.execute("""
INSERT INTO channels (type, key, status, name, weight, created_time,
test_time, response_time, base_url, other, balance, balance_updated_time,
models, "group", used_quota, priority, auto_ban, other_info)
VALUES (1, ?, 1, ?, 0, ?, 0, 0, ?, '', 0, 0, '', 'default', 0, 0, 1, '')
""", (k, name, ts, BASE_URL))
added.append((name, k))
conn.commit()
conn.close()
return added
def main():
live = load_live_keys()
print(f"WORKING DashScope keys in DB: {len(live)}")
for r in live:
print(f" id={r[0]} hash={r[1]} prov={r[2]} plan={r[4]}")
rot_added = sync_rotator(live)
api_added = sync_oneapi(live)
print(f"\n→ Rotator: +{len(rot_added)} keys (total: {len(json.loads(open(ROTATOR).read())['keys'])})")
for k in rot_added:
print(f" + {k[:40]}...")
print(f"→ One-API: +{len(api_added)} channels")
for name, k in api_added:
print(f" + {name} {k[:30]}...")
print("Done.")
if __name__ == "__main__":
main()