- matplotlib - setuptools - pyowm - pytz
import pyodide import json import matplotlib.pyplot as plt from unittest import mock from datetime import datetime import pytz from pyowm import OWM class MyResponse: def __init__(self, status_code, message, json_body): self.status_code = status_code self.text = message self.json_body = json_body def json(self): return self.json_body class JustEnoughRequests: def __init__(self): pass def get(self, uri, **kwargs): print("Sending request to:", uri) print("Got kwargs, igoring everyting other than params", kwargs) query_params = [] for k, v in kwargs["params"].items(): query_params.append(k + "=" + v) query_string = "&".join(query_params) response = pyodide.open_url(uri + "?" + query_string) json_response = response.getvalue() d = json.loads(json_response) return MyResponse(int(d["cod"]), d["message"], json.loads(json_response)) just_enough_requests = JustEnoughRequests() fig = plt.figure() with mock.patch('pyowm.commons.http_client.requests', just_enough_requests): # Get a token from https://home.openweathermap.org/users/sign_up owm = OWM('your token') mgr = owm.weather_manager() three_h_forecast = mgr.forecast_at_place('new york, us', '3h').forecast temp = [] date_time = [] for w in three_h_forecast: forecast_temp = w.temperature('celsius') utc_dt = datetime.utcfromtimestamp(w.reference_time()).replace(tzinfo=pytz.utc) tz = pytz.timezone('America/New_York') dt = utc_dt.astimezone(tz) date_time.append(dt.strftime('%Y-%m-%d %H:%M')) temp.append(forecast_temp['temp']) x = range(1, len(temp)+1) plt.plot(x, temp, 'o-') plt.xticks(x, date_time, rotation=45) fig