""" Trends Module Router API endpoints for Google Trends data """ import logging from fastapi import APIRouter, HTTPException from .schemas import ( TrendingNowRequest, TrendingNowResponse, KeywordResearchRequest, KeywordResearchResponse, YouTubeTrendsRequest, TrendingTopic ) from .services.trends_client import TrendsClient logger = logging.getLogger(__name__) router = APIRouter() # Create client instance trends_client = TrendsClient() @router.post("/trending-now", response_model=TrendingNowResponse, summary="Get trending topics", description="Get currently trending searches for a country" ) async def get_trending_now(request: TrendingNowRequest): """ Get trending searches right now. - Returns top trending topics sorted by popularity - Supports different countries """ try: results = trends_client.get_trending_now( country=request.country, limit=request.limit ) return TrendingNowResponse( success=True, count=len(results), trends=[TrendingTopic(**r) for r in results] ) except Exception as e: logger.error(f"Error getting trending now: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.post("/keyword-research", response_model=KeywordResearchResponse, summary="Keyword research", description="Get related topics and queries for a keyword" ) async def keyword_research(request: KeywordResearchRequest): """ Complete keyword research - related topics and queries. - Related Topics: topics related to the keyword - Related Queries: search queries people also search - Sorted by search volume (highest first) """ try: results = trends_client.keyword_research( keyword=request.keyword, region=request.region, timeframe=request.timeframe.value, category=request.category.value, search_type=request.search_type.value ) return KeywordResearchResponse( success=True, **results ) except Exception as e: logger.error(f"Error in keyword research: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.post("/youtube-trends", response_model=KeywordResearchResponse, summary="YouTube trends", description="Get YouTube-specific trends for a keyword" ) async def youtube_trends(request: YouTubeTrendsRequest): """ Get YouTube-specific trends and related content. """ try: results = trends_client.get_youtube_trends( keyword=request.keyword, region=request.region, timeframe=request.timeframe.value ) return KeywordResearchResponse( success=True, **results ) except Exception as e: logger.error(f"Error getting YouTube trends: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.get("/categories", summary="List categories", description="Get list of available categories" ) async def list_categories(): """Get all available trend categories""" from .services.trends_client import TrendsClient return { "categories": list(TrendsClient.CATEGORIES.keys()) } @router.get("/countries", summary="List countries", description="Get list of supported countries" ) async def list_countries(): """Get commonly used country codes""" return { "countries": [ {"code": "united_states", "name": "United States"}, {"code": "united_kingdom", "name": "United Kingdom"}, {"code": "india", "name": "India"}, {"code": "bangladesh", "name": "Bangladesh"}, {"code": "japan", "name": "Japan"}, {"code": "germany", "name": "Germany"}, {"code": "france", "name": "France"}, {"code": "brazil", "name": "Brazil"}, {"code": "canada", "name": "Canada"}, {"code": "australia", "name": "Australia"}, ] }