from fastapi import FastAPI, Query from scrape import scrape, sanitize, convert from search import search, format as format_results, extract_urls, images, videos import asyncio from fastapi.responses import JSONResponse app = FastAPI() @app.get("/scrape") async def scrape_endpoint(url: str = Query('https://example.com')): html = await sanitize(await scrape(url)) md = await convert(html) return JSONResponse(content={"markdown": md}) @app.post("/sanitize") async def sanitize_endpoint(content: str): sanitized = await sanitize(content) return {"sanitized": sanitized} @app.post("/convert") async def convert_endpoint(content: str): markdown = await convert(content) return {"markdown": markdown} @app.get("/search") def search_endpoint(prompt: str, page: int = 1, region: str = 'us-en', safesearch: str = 'off', timelimit: str = 'y'): results = search(prompt, page, region, safesearch, timelimit) return {"results": list(results)} @app.get("/images") def images_endpoint(prompt: str, page: int = 1, region: str = 'us-en', safesearch: str = 'off', timelimit: str = 'y'): results = images(prompt, page, region, safesearch, timelimit) return {"results": list(results)} @app.get("/videos") def videos_endpoint(prompt: str, page: int = 1, region: str = 'us-en', safesearch: str = 'off', timelimit: str = 'y'): results = videos(prompt, page, region, safesearch, timelimit) return {"results": list(results)} @app.post("/format") def format_endpoint(results: list, prompt: str): formatted = format_results(results, prompt) return {"formatted": formatted} @app.post("/extract_urls") def extract_urls_endpoint(results: list): urls = extract_urls(results) return {"urls": urls} def run(): import uvicorn uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True) if __name__ == "__main__": run()