File size: 3,054 Bytes
83fe205
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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
)

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

@app.get("/search")
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

@app.get("/images")
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

@app.get("/videos")
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

@app.get("/news")
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

@app.get("/books")
def books(
    query: str,
    max_results: int | None = 10,
    page: int = 1,
    backend: str = "auto",
):
    results = findBooks(query, max_results, page, backend)
    return results

@app.get("/screenshot")
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"})