38 lines
1.8 KiB
Plaintext
Executable File
38 lines
1.8 KiB
Plaintext
Executable File
import asyncio
|
|
import httpx
|
|
from sqlalchemy import text
|
|
from app.db.session import engine
|
|
from datetime import datetime
|
|
|
|
async def log_discovery(conn, category, brand, model, action):
|
|
await conn.execute(text("""
|
|
INSERT INTO data.bot_discovery_logs (category, brand_name, model_name, action_taken)
|
|
VALUES (:c, :b, :m, :a)
|
|
"""), {"c": category, "b": brand, "m": model, "a": action})
|
|
|
|
async def run_discovery():
|
|
async with engine.begin() as conn:
|
|
print(f"🚀 Jármű felfedezés indul: {datetime.now()}")
|
|
|
|
# Jelenleg a CAR kategóriára fókuszálunk egy külső API segítségével (pl. NHTSA - Ingyenes)
|
|
# Itt egy példa, hogyan bővül dinamikusan a rendszer
|
|
async with httpx.AsyncClient() as client:
|
|
# Autók lekérése
|
|
response = await client.get("https://vpic.nhtsa.dot.gov/api/vehicles/getallmakes?format=json")
|
|
if response.status_code == 200:
|
|
makes = response.json().get('Results', [])[:100] # Tesztként az első 100
|
|
|
|
for make in makes:
|
|
brand_name = make['Make_Name'].strip()
|
|
# Megnézzük, megvan-e már
|
|
res = await conn.execute(text("SELECT id FROM data.vehicle_brands WHERE name = :n"), {"n": brand_name})
|
|
if not res.scalar():
|
|
await conn.execute(text("INSERT INTO data.vehicle_brands (category_id, name) VALUES (1, :n)"), {"n": brand_name})
|
|
await log_discovery(conn, "CAR", brand_name, "ALL", "NEW_BRAND")
|
|
print(f"✨ Új márka találva: {brand_name}")
|
|
|
|
await conn.commit()
|
|
print("✅ Bot futása befejeződött.")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(run_discovery()) |