parameterize routing logic - extract api key as env var; allow searching dest by address; limit the number of listings to process to prevent accidental api key usage
This commit is contained in:
parent
57f477c54d
commit
482fff689b
5 changed files with 116 additions and 89 deletions
|
|
@ -1,50 +1,60 @@
|
|||
import enum
|
||||
import os
|
||||
from typing import Any
|
||||
import requests
|
||||
from rec.utils import nextMonday
|
||||
from collections import defaultdict
|
||||
|
||||
API_KEY = "AIzaSyBoBHzeQFgR7O-NlNsuHXQcC1B7ccEHpl8"
|
||||
url = "https://routes.googleapis.com/directions/v2:computeRoutes"
|
||||
API_KEY_ENVIRONMENT_VARIABLE = "ROUTING_API_KEY"
|
||||
|
||||
|
||||
class TravelMode(enum.StrEnum):
|
||||
TRANSIT = "TRANSIT"
|
||||
BICYCLE = "BICYCLE"
|
||||
WALK = "WALK"
|
||||
DRIVE = "DRIVE"
|
||||
|
||||
|
||||
def transit_route(
|
||||
origin_lat: float,
|
||||
origin_lon: float,
|
||||
dest_lat: float,
|
||||
dest_lon: float,
|
||||
dest_address: str,
|
||||
travel_mode: TravelMode,
|
||||
compute_alternative_routes=True,
|
||||
):
|
||||
) -> dict[str, Any]:
|
||||
monday9am = nextMonday()
|
||||
|
||||
# must be set
|
||||
api_key = os.environ[API_KEY_ENVIRONMENT_VARIABLE]
|
||||
|
||||
header = {
|
||||
"X-Goog-Api-Key":
|
||||
API_KEY,
|
||||
"Content-Type":
|
||||
"application/json",
|
||||
"X-Goog-FieldMask":
|
||||
"routes.distanceMeters,routes.duration,routes.staticDuration,routes.legs.steps.distanceMeters,routes.legs.steps.staticDuration,routes.legs.steps.travelMode",
|
||||
"X-Goog-Api-Key": api_key,
|
||||
"Content-Type": "application/json",
|
||||
"X-Goog-FieldMask": # "routes.*",
|
||||
"routes.distanceMeters,routes.duration,routes.staticDuration,routes.legs.steps.distanceMeters,routes.legs.steps.staticDuration,routes.legs.steps.travelMode",
|
||||
}
|
||||
|
||||
body = {
|
||||
"origin":
|
||||
{
|
||||
"location":
|
||||
{
|
||||
"latLng": {
|
||||
"latitude": origin_lat,
|
||||
"longitude": origin_lon
|
||||
}
|
||||
}
|
||||
},
|
||||
"destination":
|
||||
{
|
||||
"location": {
|
||||
"latLng": {
|
||||
"latitude": dest_lat,
|
||||
"longitude": dest_lon
|
||||
}
|
||||
"origin": {
|
||||
# "address": origin_address
|
||||
"location": {
|
||||
"latLng": {
|
||||
"latitude": origin_lat,
|
||||
"longitude": origin_lon
|
||||
}
|
||||
},
|
||||
"travelMode": "TRANSIT",
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"address": dest_address
|
||||
# "location": {
|
||||
# "latLng": {
|
||||
# "latitude": dest_lat,
|
||||
# "longitude": dest_lon
|
||||
# }
|
||||
# }
|
||||
},
|
||||
"travelMode": travel_mode.value,
|
||||
# "2023-10-15T15:01:23.045123456Z"
|
||||
"departureTime": monday9am.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
"computeAlternativeRoutes": compute_alternative_routes,
|
||||
|
|
@ -84,39 +94,20 @@ def extract_time(d, limit: int = 2):
|
|||
else:
|
||||
used_transit = True
|
||||
duration_per_transit[step["travelMode"]] += int(
|
||||
step["staticDuration"].strip("s")
|
||||
)
|
||||
distance_per_transit[step["travelMode"]] += step.get("distanceMeters", 0)
|
||||
step["staticDuration"].strip("s"))
|
||||
distance_per_transit[step["travelMode"]] += step.get(
|
||||
"distanceMeters", 0)
|
||||
if step["travelMode"] == "TRANSIT":
|
||||
number_of_transit_stops += 1
|
||||
|
||||
res.append(
|
||||
{
|
||||
"duration": duration,
|
||||
"distance": distance,
|
||||
"duration_static": duration_static,
|
||||
"initial_walk_duration": initial_walk_duration,
|
||||
"duration_per_transit": dict(duration_per_transit),
|
||||
"distance_per_transit": dict(distance_per_transit),
|
||||
"number_of_transit_stops": number_of_transit_stops,
|
||||
}
|
||||
)
|
||||
res.append({
|
||||
"duration": duration,
|
||||
"distance": distance,
|
||||
"duration_static": duration_static,
|
||||
"initial_walk_duration": initial_walk_duration,
|
||||
"duration_per_transit": dict(duration_per_transit),
|
||||
"distance_per_transit": dict(distance_per_transit),
|
||||
"number_of_transit_stops": number_of_transit_stops,
|
||||
})
|
||||
|
||||
return res[:limit]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import json
|
||||
|
||||
with open("code/json/routing_routeapi.json", "r") as f:
|
||||
d = json.load(f)
|
||||
|
||||
extract_time(d)
|
||||
|
||||
# if __name__ == "__main__":
|
||||
# origin = 51.5635664310333, -0.1107173751570373 # home
|
||||
# dest = 51.50475678313417, 0.04915321000190009 # london city airport
|
||||
# d = travel_time(origin[0], origin[1], dest[0], dest[1])
|
||||
# import json
|
||||
# with open('code/json/routing_routeapi.json', 'w') as f:
|
||||
# json.dump(d, f)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue