Files
service-finder/archive/2026.02.18 Archive_old_mapps/harvester_cars.py.old

48 lines
1.9 KiB
Python
Executable File

# /opt/docker/dev/service_finder/backend/app/services/harvester_cars.py
import httpx
import asyncio
from sqlalchemy.ext.asyncio import AsyncSession
from .harvester_base import BaseHarvester
class VehicleHarvester(BaseHarvester):
def __init__(self):
super().__init__(category="car")
self.base_url = "https://www.carqueryapi.com/api/0.3/"
async def _get_api_data(self, params: dict):
async with httpx.AsyncClient() as client:
try:
response = await client.get(self.base_url, params=params, headers=self.headers, timeout=15.0)
if response.status_code == 200:
text = response.text
if text.startswith("?("): text = text[2:-2]
return response.json()
return None
except Exception as e:
print(f"CarQuery Robot Hiba: {e}")
return None
async def harvest_all(self, db: AsyncSession):
""" Automatikus CarQuery szinkronizáció MDM alapon. """
print("🚗 Személyautó Robot: Indul az adatgyűjtés...")
makes_data = await self._get_api_data({"cmd": "getMakes", "sold_in_us": 0})
if not makes_data: return
for make in makes_data.get("Makes", [])[:50]: # Teszt limit
make_id = make['make_id']
make_name = make['make_display']
models_data = await self._get_api_data({"cmd": "getModels", "make": make_id})
if not models_data: continue
for model in models_data.get("Models", []):
specs = {
"factory_data": {"api_source": "carquery", "api_make_id": make_id}
}
await self.log_entry(db, make_name, model['model_name'], specs)
await db.commit()
await asyncio.sleep(1) # Rate limiting
print("🏁 Személyautó Robot: Adatok szinkronizálva.")