Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI | |
| from fastapi.responses import FileResponse, StreamingResponse | |
| from ddgs import DDGS | |
| import json | |
| from utils import findImages, findVideos, findNews, findBooks, findSearchResults | |
| from fastapi.middleware.cors import CORSMiddleware | |
| import os | |
| from io import BytesIO | |
| from playwright.sync_api import sync_playwright | |
| app = FastAPI() | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # Allow all origins | |
| allow_credentials=True, | |
| allow_methods=["*"], # Allow all HTTP methods (GET, POST, etc.) | |
| allow_headers=["*"], # Allow all headers | |
| ) | |
| def read_root(): | |
| return {"message": "Hello, World!"} | |
| def search( | |
| query: str, | |
| region: str = "us-en", | |
| safesearch: str = "moderate", | |
| timelimit: str | None = None, | |
| max_results: int | None = 10, | |
| page: int = 1, | |
| backend: str = "auto" | |
| ): | |
| results = findSearchResults(query, region, safesearch, timelimit, max_results, page, backend) | |
| return results | |
| def images( | |
| query: str, | |
| region: str = "us-en", | |
| safesearch: str = "moderate", | |
| timelimit: str | None = None, | |
| max_results: int | None = 10, | |
| page: int = 1, | |
| backend: str = "auto", | |
| size: str | None = None, | |
| color: str | None = None, | |
| type_image: str | None = None, | |
| layout: str | None = None, | |
| license_image: str | None = None, | |
| ): | |
| results = findImages(query, region, safesearch, timelimit, max_results, page, backend, size, color, type_image, layout, license_image) | |
| return results | |
| def videos( | |
| query: str, | |
| region: str = "us-en", | |
| safesearch: str = "moderate", | |
| timelimit: str | None = None, | |
| max_results: int | None = 10, | |
| page: int = 1, | |
| backend: str = "auto", | |
| resolution: str | None = None, | |
| duration: str | None = None, | |
| license_videos: str | None = None, | |
| ): | |
| results = findVideos(query, region, safesearch, timelimit, max_results, page, backend, resolution, duration, license_videos) | |
| return results | |
| def news( | |
| query: str, | |
| region: str = "us-en", | |
| safesearch: str = "moderate", | |
| timelimit: str | None = None, | |
| max_results: int | None = 10, | |
| page: int = 1, | |
| backend: str = "auto", | |
| ): | |
| results = findNews(query, region, safesearch, timelimit, max_results, page, backend) | |
| return results | |
| def books( | |
| query: str, | |
| max_results: int | None = 10, | |
| page: int = 1, | |
| backend: str = "auto", | |
| ): | |
| results = findBooks(query, max_results, page, backend) | |
| return results | |
| def screenshot(url: str): | |
| with sync_playwright() as p: | |
| browser = p.chromium.launch(channel="chromium", headless=True) # uses system Chrome | |
| page = browser.new_page() | |
| page.goto(url) | |
| img_bytes = page.screenshot() | |
| browser.close() | |
| img_data = BytesIO(img_bytes) | |
| img_data.seek(0) | |
| return StreamingResponse(img_data, media_type="image/png", headers={"Content-Disposition": "inline; filename=screenshot.png"}) | |