You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.9 KiB

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}