Spaces:
Sleeping
Sleeping
import asyncio, httpx | |
coordinates = { | |
"New York": (40.7128, -74.0060), | |
# "Los Angeles": (34.0500, -118.2500), | |
"San Francisco": (37.7749, -122.4194), | |
"Chicago": (41.8333, -87.6167), | |
"Houston": (29.7500, -95.3500), | |
"Washington": (38.8833, -77.0333) | |
} | |
async def weather(client, city): | |
lat,lon = coordinates[city] | |
point = (await client.get(f"https://api.weather.gov/points/{lat},{lon}")).json()['properties'] | |
station_url = point['observationStations'] | |
stations = (await client.get(station_url)).json() | |
first_url = stations['features'][0]['id'] | |
try: | |
obs = (await client.get(f"{first_url}/observations/latest")).json() | |
obs = obs['properties'] | |
except: return city, dict(temp='NA',wind='NA',humid='NA') | |
def val(x): return round(x['value'], 1) if x['value'] else 'NA' | |
return city, dict(temp=val(obs['temperature']), | |
wind=val(obs['windSpeed']), | |
humid=val(obs['relativeHumidity'])) | |
async def all_weather(): | |
async with httpx.AsyncClient() as client: | |
tasks = [weather(client, city) for city in coordinates] | |
results = await asyncio.gather(*tasks) | |
return dict(results) | |