import json from typing import TypedDict from botasaurus.browser import Driver, browser from botasaurus.request import Request, request from fastapi import FastAPI class Coordinates(TypedDict): longitude: float latitude: float @browser(headless=True, output=None) def get_ozon(driver: Driver, data: Coordinates) -> dict: # 55.73475686704202 # 37.58319787710864 longitude = data["longitude"] latitude = data["latitude"] driver.get( f"https://pvz-map.ozon.ru/api/task/creation-availability?location.lat={latitude}&location.lon={longitude}" ) driver.short_random_sleep() page_json = json.loads(driver.page_text) return page_json @request(output=None) def get_wb(request: Request, data: Coordinates) -> dict: # 55.73475686704202 # 37.58319787710864 longitude = data["longitude"] latitude = data["latitude"] response = request.get( f"https://pvz-map-backend.wildberries.ru/api/v2/map/check-point?point.latitude={latitude}&point.longitude={longitude}" ) return response.json() @request(output=None) def get_yandex(request: Request, data: Coordinates) -> dict: # 55.73475686704202 # 37.58319787710864 longitude = data["longitude"] latitude = data["latitude"] response = request.get( f"https://hubs.market.yandex.ru/api/partner-gateway/outlet-map/point-available?lat={latitude}&lng={longitude}" ) return response.json() app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/check") def check_point(longitude: float, latitude: float): ozon_response = get_ozon(data={"longitude": longitude, "latitude": latitude}) wb_response = get_wb(data={"longitude": longitude, "latitude": latitude}) yandex_response = get_yandex(data={"longitude": longitude, "latitude": latitude}) return {"y": yandex_response, "o": ozon_response, "w": wb_response}