from fastapi import FastAPI, Query, HTTPException from pydantic import BaseModel from webscout import WEBS app = FastAPI() class SearchQuery(BaseModel): q: str max_results: int = 10 timelimit: Optional[int] = None safesearch: str = 'moderate' region: str = 'wt-wt' class ImageSearchQuery(BaseModel): q: str max_results: int = 10 safesearch: str = 'moderate' region: str = 'wt-wt' class VideoSearchQuery(BaseModel): q: str max_results: int = 10 safesearch: str = 'moderate' region: str = 'wt-wt' timelimit: Optional[int] = None resolution: Optional[str] = None duration: Optional[str] = None class NewsSearchQuery(BaseModel): q: str max_results: int = 10 safesearch: str = 'moderate' region: str = 'wt-wt' timelimit: Optional[int] = None class MapSearchQuery(BaseModel): q: str place: Optional[str] = None max_results: int = 10 class TranslateQuery(BaseModel): q: str to: str = 'en' class SuggestionQuery(BaseModel): q: str @app.get("/api/search", response_model=List[dict]) async def search_text(query: SearchQuery): results = [] with WEBS() as webs: for result in webs.text(**query.dict()): results.append(result) return results @app.get("/api/images", response_model=List[dict]) async def search_images(query: ImageSearchQuery): results = [] with WEBS() as webs: for result in webs.images(**query.dict()): results.append(result) return results @app.get("/api/videos", response_model=List[dict]) async def search_videos(query: VideoSearchQuery): results = [] with WEBS() as webs: for result in webs.videos(**query.dict()): results.append(result) return results @app.get("/api/news", response_model=List[dict]) async def search_news(query: NewsSearchQuery): results = [] with WEBS() as webs: for result in webs.news(**query.dict()): results.append(result) return results @app.get("/api/maps", response_model=List[dict]) async def search_maps(query: MapSearchQuery): results = [] with WEBS() as webs: for result in webs.maps(**query.dict()): results.append(result) return results @app.get("/api/translate", response_model=dict) async def translate_text(query: TranslateQuery): with WEBS() as webs: translation = webs.translate(**query.dict()) return {'translation': translation} @app.get("/api/suggestions", response_model=List[str]) async def search_suggestions(query: SuggestionQuery): if not query.q: raise HTTPException(status_code=400, detail="Query parameter missing") results = [] with WEBS() as webs: for result in webs.suggestions(query.q): results.append(result) return results @app.get("/api/health", response_model=dict) async def health_check(): return {'status': 'working'}