NCAkit / modules /trends /router.py
ismdrobiul489's picture
Fix circular import in trends module - create TrendsClient directly in router
51fe39a
"""
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"},
]
}