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
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}
|