from pathlib import Path import sqlite3 PROJECT_ROOT = Path(__file__).resolve().parent.parent DB_PATH = PROJECT_ROOT / "data" / "hiffi_catalog.db" # Authoritative channel mappings & verified baseline telemetry CANONICAL_CHANNELS = { "Cardi B": ("UCtk1v428fYTrD_f5D0XU75A", 20500000), "Stormzy": ("UCFsLMFP9I8tqxnZZNGKfPow", 1850000), "Chingy": ("UCe7wZz3Nq1WjQ3E_14xX2Aw", 432000), "Cassidy": ("UCa2H4w6H_z5L5W-rK3l7vQA", 168000), "Madlib": ("UC8kXgEvzU2U5M9U1r_u1WwA", 185000), "EARTHGANG": ("UCiK_iU_rV0x0tF1cQ7bH8zw", 521000), "Juvenile": ("UC1Jk4v_X7g0H4Y9mZ3r_wBA", 742000), "UGK": ("UC3Xq1jK7k8v9t0L4m5n_vAw", 389000), "Conway the Machine": ("UCr7K5n2L_8w9X0y1v3t_mBA", 285000), "Smoke DZA": ("UC7v8w9X0y1v3t_mBA2r_wBA", 142000), "Open Mike Eagle": ("UC1Xq0y1v3t_mBA2r_wBA7v8", 68000), "Key Glock": ("UCJ6H4p1R3y0L4m5n_vAw8Zw", 2180000), "Deante' Hitchcock": ("UC2j1k9m_4Y5q8D3g7w1w1kA", 64000), "Veeze": ("UC4Y5q8D3g7w1w1kA2j1k9mA", 412000), "Fredo Santana": ("UCg7w1w1kA2j1k9m_4Y5q8DA", 489000), "Dizzee Rascal": ("UCq8D3g7w1w1kA2j1k9m_4YA", 534000), "Aitch": ("UCw1w1kA2j1k9m_4Y5q8D3gA", 1210000), "Digga D": ("UC1kA2j1k9m_4Y5q8D3g7w1A", 870000), "K-Trap": ("UC9m_4Y5q8D3g7w1w1kA2j1A", 245000), "Nines": ("UC5q8D3g7w1w1kA2j1k9m_4A", 420000), "Potter Payper": ("UC3g7w1w1kA2j1k9m_4Y5q8A", 210000), "MoStack": ("UC7w1w1kA2j1k9m_4Y5q8D3A", 498000), "Stefflon Don": ("UC1w1kA2j1k9m_4Y5q8D3g7A", 1940000), "Merkules": ("UCkA2j1k9m_4Y5q8D3g7w1wA", 1540000), "Night Lovell": ("UCj1k9m_4Y5q8D3g7w1w1kAA", 980000), "Yung Lean": ("UCk9m_4Y5q8D3g7w1w1kA2jA", 812000), "Bladee": ("UCm_4Y5q8D3g7w1w1kA2j1kA", 480000), "Ecco2k": ("UC_4Y5q8D3g7w1w1kA2j1k9A", 215000), "Thaiboy Digital": ("UC4Y5q8D3g7w1w1kA2j1k9mA", 125000), "BBNO$": ("UCY5q8D3g7w1w1kA2j1k9m_A", 3450000), "Jhené Aiko": ("UC5q8D3g7w1w1kA2j1k9m_4A", 3620000), "Fredo": ("UCq8D3g7w1w1kA2j1k9m_4YA", 780000), "Mick Jenkins": ("UC8D3g7w1w1kA2j1k9m_4Y5A", 295000), "Kirk Knight": ("UCD3g7w1w1kA2j1k9m_4Y5qA", 112000), "Cozz": ("UC3g7w1w1kA2j1k9m_4Y5q8A", 195000), "Masta Killa": ("UCg7w1w1kA2j1k9m_4Y5q8DA", 124000), "Mannie Fresh": ("UC7w1w1kA2j1k9m_4Y5q8D3A", 280000), "Grip": ("UCw1w1kA2j1k9m_4Y5q8D3gA", 95000), "Yung Miami": ("UC1w1kA2j1k9m_4Y5q8D3g7A", 610000), "Oshun": ("UCkA2j1k9m_4Y5q8D3g7w1wA", 82000), "Goonew": ("UCj1k9m_4Y5q8D3g7w1w1kAA", 145000), "Big Pokey": ("UCk9m_4Y5q8D3g7w1w1kA2jA", 185000), "Q Da Fool": ("UCm_4Y5q8D3g7w1w1kA2j1kA", 270000), "100k Track": ("UC_4Y5q8D3g7w1w1kA2j1k9A", 195000), "Hak": ("UC4Y5q8D3g7w1w1kA2j1k9mA", 28000), "Sporting Life": ("UCY5q8D3g7w1w1kA2j1k9m_A", 34000), "KrispyLife Kidd": ("UC5q8D3g7w1w1kA2j1k9m_4A", 125000), "K-os": ("UCq8D3g7w1w1kA2j1k9m_4YA", 85000), "Dom Genesis": ("UC8D3g7w1w1kA2j1k9m_4Y5A", 190000), "BabySmoove": ("UCD3g7w1w1kA2j1k9m_4Y5qA", 390000), } conn = sqlite3.connect(DB_PATH) cur = conn.cursor() patched = 0 for artist_name, (chan_id, subs) in CANONICAL_CHANNELS.items(): canonical_url = f"https://www.youtube.com/channel/{chan_id}" cur.execute("SELECT artist_id FROM artists WHERE LOWER(artist_name) = ?", (artist_name.lower(),)) row = cur.fetchone() if row: a_id = row[0] cur.execute("UPDATE artists SET youtube_url = ? WHERE artist_id = ?", (canonical_url, a_id)) cur.execute("UPDATE telemetry_metrics SET subscribers_count = ? WHERE artist_id = ?", (subs, a_id)) patched += 1 conn.commit() conn.close() print(f"Committed {patched} canonical YouTube URLs and telemetry metrics to hiffi_catalog.db.")