This commit is contained in:
2025-08-01 10:33:50 -04:00
parent 82fd1cb2da
commit 9c13118a05
24 changed files with 1160 additions and 38 deletions

View File

@@ -3,6 +3,9 @@ from datetime import datetime, timedelta
import csv
import io
from app.services.external_api.base_external_service import BaseExternalService
import aiohttp
import logging
logger = logging.getLogger(__name__)
class TCGCSVService(BaseExternalService):
def __init__(self):
@@ -16,7 +19,14 @@ class TCGCSVService(BaseExternalService):
async def get_products_and_prices(self, game_id: str, group_id: int) -> str:
"""Fetch products and prices for a specific group from TCGCSV API"""
endpoint = f"tcgplayer/{game_id}/{group_id}/ProductsAndPrices.csv"
return await self._make_request("GET", endpoint, headers={"Accept": "text/csv"})
try:
return await self._make_request("GET", endpoint, headers={"Accept": "text/csv"})
except aiohttp.ClientResponseError as e:
if e.status == 403:
logger.error(f"Request failed: {e}")
return None
else:
raise
async def get_categories(self) -> Dict[str, Any]:
"""Fetch all categories from TCGCSV API"""
@@ -26,7 +36,14 @@ class TCGCSVService(BaseExternalService):
async def get_archived_prices_for_date(self, date_str: str) -> bytes:
"""Fetch archived prices from TCGCSV API"""
endpoint = f"archive/tcgplayer/prices-{date_str}.ppmd.7z"
return await self._make_request("GET", endpoint, binary=True)
try:
return await self._make_request("GET", endpoint, binary=True)
except aiohttp.ClientResponseError as e:
if e.status == 403:
logger.error(f"Request failed: {e}")
return None
else:
raise
async def get_tcgcsv_date_range(self, start_date: datetime, end_date: datetime) -> List[datetime]:
"""Get a date range for a given start and end date"""