File size: 2,934 Bytes
69b2f98
 
89dd025
 
69b2f98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89dd025
 
69b2f98
89dd025
69b2f98
89dd025
69b2f98
 
89dd025
 
69b2f98
89dd025
69b2f98
89dd025
69b2f98
 
89dd025
 
69b2f98
89dd025
69b2f98
89dd025
69b2f98
 
89dd025
 
69b2f98
89dd025
69b2f98
89dd025
69b2f98
 
89dd025
 
69b2f98
89dd025
69b2f98
89dd025
69b2f98
 
89dd025
69b2f98
 
89dd025
69b2f98
 
 
 
89dd025
69b2f98
 
 
 
89dd025
69b2f98
 
 
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
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'}