diff --git a/.coverage b/.coverage deleted file mode 100644 index 803f5fa0..00000000 Binary files a/.coverage and /dev/null differ diff --git a/.gitignore b/.gitignore index c0a036cd..6c58eabc 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ htmlcov/ # uv uv.lock +reports/coverage.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 9003ff59..2feb105c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. - Main window integration for displaying discussion summaries. - AI summarization button in the nationwide dialog. - Shared `NationalDiscussionService` instance with caching. +- Added opt-in Pirate Weather minutely precipitation notifications, including "starting soon" and "stopping soon" toggles that can announce transitions like "Rain starting in 12 minutes." - Bundled `prismatoid`/`prism` in PyInstaller nightly builds (PR #294). - Added missing tests for `national_discussion_service.py` to meet coverage gate requirements. - Updated Antfarm to v0.2.2 and configured feature-dev workflow for 80% diff-coverage. diff --git a/src/accessiweather/app.py b/src/accessiweather/app.py index b72afd8e..9fc1030a 100644 --- a/src/accessiweather/app.py +++ b/src/accessiweather/app.py @@ -410,7 +410,7 @@ def _maybe_show_portable_missing_keys_hint(self) -> None: dialog = wx.MessageDialog( self.main_window, "This portable copy has no API keys yet.\n\n" - "Visual Crossing weather provider keys can be entered in Settings > Data Sources. " + "Visual Crossing and Pirate Weather provider keys can be entered in Settings > Data Sources. " "OpenRouter AI keys can be entered in Settings > AI.\n\n" "You can also create an encrypted key bundle to carry your keys with the portable install.", "Portable setup hint", @@ -506,6 +506,7 @@ def _show_onboarding_readiness_summary(self) -> None: f"- Location configured: {self._onboarding_status_text(bool(config.locations))}", f"- OpenRouter key set: {self._onboarding_status_text(self._has_saved_api_key('openrouter_api_key'))}", f"- Visual Crossing weather provider key set: {self._onboarding_status_text(self._has_saved_api_key('visual_crossing_api_key'))}", + f"- Pirate Weather provider key set: {self._onboarding_status_text(self._has_saved_api_key('pirate_weather_api_key'))}", *( [ f"- Portable key bundle created: {self._onboarding_status_text(self._portable_keys_imported_this_session)}" @@ -530,7 +531,7 @@ def _maybe_show_first_start_onboarding(self) -> None: self._run_deferred_startup_update_check() return - total_steps = 4 if self._portable_mode else 3 + total_steps = 5 if self._portable_mode else 4 step1 = wx.MessageDialog( self.main_window, @@ -592,10 +593,23 @@ def _maybe_show_first_start_onboarding(self) -> None: else: _wizard_keys["visual_crossing_api_key"] = visual_crossing_key + pirate_weather_key = self._prompt_optional_secret_with_link( + "Pirate Weather provider key (optional)", + f"Step 4 of {total_steps}: Enter your Pirate Weather provider key now, or leave blank to skip.", + "https://pirateweather.net/", + "Get Pirate Weather provider key", + ) + if pirate_weather_key is not None and pirate_weather_key: + if not self._portable_mode: + self.config_manager.update_settings(pirate_weather_api_key=pirate_weather_key) + self._maybe_offer_test_key_now("Pirate Weather provider key") + else: + _wizard_keys["pirate_weather_api_key"] = pirate_weather_key + if self._portable_mode and _wizard_keys: # Keys were entered — prompt for passphrase and write bundle directly. passphrase = self._prompt_optional_secret( - "Step 4 of 4: Secure your API keys", + "Step 5 of 5: Secure your API keys", "Enter a passphrase to encrypt your API keys into a portable bundle.\n" "This bundle travels with the app so your keys work on any machine.\n\n" "Leave blank to skip (keys will not be saved).", @@ -1145,6 +1159,15 @@ def refresh_runtime_settings(self) -> None: self.weather_client.settings = settings self.weather_client.data_source = settings.data_source self.weather_client.alerts_enabled = bool(settings.enable_alerts) + # Reset cached API clients so new keys take effect immediately + self.weather_client._visual_crossing_api_key = getattr( # pragma: no cover + settings, "visual_crossing_api_key", "" + ) + self.weather_client._visual_crossing_client = None # pragma: no cover + self.weather_client._pirate_weather_api_key = getattr( # pragma: no cover + settings, "pirate_weather_api_key", "" + ) + self.weather_client._pirate_weather_client = None # pragma: no cover if self.presenter: self.presenter.settings = settings diff --git a/src/accessiweather/app_initialization.py b/src/accessiweather/app_initialization.py index 3016cac0..4d0c0675 100644 --- a/src/accessiweather/app_initialization.py +++ b/src/accessiweather/app_initialization.py @@ -37,10 +37,10 @@ def initialize_components(app: AccessiWeatherApp) -> None: # Initialize weather client with lazy imports data_source = config.settings.data_source if config.settings else "auto" - # Note: visual_crossing_api_key and avwx_api_key are LazySecureStorage objects - # that defer keyring access until first use. We pass them directly to - # WeatherClient which accesses the values lazily when needed. + # Note: visual_crossing_api_key, pirate_weather_api_key and avwx_api_key are + # LazySecureStorage objects that defer keyring access until first use. lazy_api_key = config.settings.visual_crossing_api_key if config.settings else "" + lazy_pw_api_key = config.settings.pirate_weather_api_key if config.settings else "" lazy_avwx_key = config.settings.avwx_api_key if config.settings else "" # Lazy import WeatherDataCache from .cache import WeatherDataCache @@ -60,6 +60,7 @@ def initialize_components(app: AccessiWeatherApp) -> None: user_agent="AccessiWeather/2.0", data_source=data_source, visual_crossing_api_key=lazy_api_key, + pirate_weather_api_key=lazy_pw_api_key, avwx_api_key=lazy_avwx_key, settings=config.settings, offline_cache=offline_cache, diff --git a/src/accessiweather/config/config_manager.py b/src/accessiweather/config/config_manager.py index b5630497..680b8ee5 100644 --- a/src/accessiweather/config/config_manager.py +++ b/src/accessiweather/config/config_manager.py @@ -173,10 +173,15 @@ def _load_secure_keys(self) -> None: # In portable mode, API keys live in the bundle — not in keyring. # Only load non-API-key secrets (e.g. GitHub app credentials) from keyring. is_portable = getattr(self.app, "_portable_mode", False) - portable_api_keys = {"visual_crossing_api_key", "openrouter_api_key"} + portable_api_keys = { + "visual_crossing_api_key", + "pirate_weather_api_key", + "openrouter_api_key", + } secure_keys = [ "visual_crossing_api_key", + "pirate_weather_api_key", "openrouter_api_key", "github_app_id", "github_app_private_key", diff --git a/src/accessiweather/config/import_export.py b/src/accessiweather/config/import_export.py index 443500a0..35ed9f0b 100644 --- a/src/accessiweather/config/import_export.py +++ b/src/accessiweather/config/import_export.py @@ -24,6 +24,7 @@ PORTABLE_API_SECRET_KEYS: Final[tuple[str, ...]] = ( "visual_crossing_api_key", + "pirate_weather_api_key", "openrouter_api_key", "avwx_api_key", ) diff --git a/src/accessiweather/config/settings.py b/src/accessiweather/config/settings.py index dd1537f4..4f0a89e1 100644 --- a/src/accessiweather/config/settings.py +++ b/src/accessiweather/config/settings.py @@ -48,7 +48,7 @@ def _validate_and_fix_config(self) -> None: config_changed = False # Critical validation: data_source affects weather client selection at startup - valid_sources = ["auto", "nws", "openmeteo", "visualcrossing"] + valid_sources = ["auto", "nws", "openmeteo", "visualcrossing", "pirateweather"] if settings.data_source not in valid_sources: self.logger.warning( f"Invalid data_source '{settings.data_source}', resetting to 'auto'" @@ -56,6 +56,13 @@ def _validate_and_fix_config(self) -> None: settings.data_source = "auto" config_changed = True + if settings.data_source == "pirateweather" and not settings.pirate_weather_api_key: + self.logger.warning( + "Pirate Weather selected but no API key provided, switching to 'auto'" + ) + settings.data_source = "auto" + config_changed = True + if settings.data_source == "visualcrossing" and not settings.visual_crossing_api_key: self.logger.warning( "Visual Crossing selected but no API key provided, switching to 'auto'" @@ -179,11 +186,17 @@ def update_settings(self, **kwargs) -> bool: config = self._manager.get_config() # In portable mode, API keys live in the bundle — skip keyring writes for them. is_portable = getattr(self._manager.app, "_portable_mode", False) - portable_api_keys = {"visual_crossing_api_key", "openrouter_api_key", "avwx_api_key"} + portable_api_keys = { + "visual_crossing_api_key", + "pirate_weather_api_key", + "openrouter_api_key", + "avwx_api_key", + } # These keys should be stored in SecureStorage (non-portable, or non-API-key secrets) secure_keys = { "visual_crossing_api_key", + "pirate_weather_api_key", "openrouter_api_key", "avwx_api_key", "github_app_id", @@ -196,6 +209,7 @@ def update_settings(self, **kwargs) -> bool: redacted_keys = { "github_app_private_key", "visual_crossing_api_key", + "pirate_weather_api_key", "openrouter_api_key", "avwx_api_key", } diff --git a/src/accessiweather/config/source_priority.py b/src/accessiweather/config/source_priority.py index 39d7a31a..5d7722e6 100644 --- a/src/accessiweather/config/source_priority.py +++ b/src/accessiweather/config/source_priority.py @@ -16,9 +16,11 @@ class SourcePriorityConfig: """ # Default priorities by location type - us_default: list[str] = field(default_factory=lambda: ["nws", "openmeteo", "visualcrossing"]) + us_default: list[str] = field( + default_factory=lambda: ["nws", "openmeteo", "visualcrossing", "pirateweather"] + ) international_default: list[str] = field( - default_factory=lambda: ["openmeteo", "visualcrossing"] + default_factory=lambda: ["openmeteo", "pirateweather", "visualcrossing"] ) # Per-field overrides (field_name -> priority list) @@ -92,9 +94,11 @@ def from_dict(cls, data: dict) -> SourcePriorityConfig: """ return cls( - us_default=data.get("us_default", ["nws", "openmeteo", "visualcrossing"]), + us_default=data.get( + "us_default", ["nws", "openmeteo", "visualcrossing", "pirateweather"] + ), international_default=data.get( - "international_default", ["openmeteo", "visualcrossing"] + "international_default", ["openmeteo", "pirateweather", "visualcrossing"] ), field_priorities=data.get("field_priorities", {}), temperature_conflict_threshold=data.get("temperature_conflict_threshold", 5.0), diff --git a/src/accessiweather/display/presentation/forecast.py b/src/accessiweather/display/presentation/forecast.py index b75d6446..cd495e31 100644 --- a/src/accessiweather/display/presentation/forecast.py +++ b/src/accessiweather/display/presentation/forecast.py @@ -111,7 +111,13 @@ def build_forecast( precision = 0 if round_values else get_temperature_precision(unit_pref) periods: list[ForecastPeriodPresentation] = [] + summary_line = f"Overall: {forecast.summary}" if forecast.summary else None fallback_lines = [f"Forecast for {location.name}:\n"] + if summary_line: + fallback_lines.append(summary_line) + + hourly_hours = getattr(settings, "hourly_forecast_hours", 6) if settings else 6 + hourly_hours = max(1, min(hourly_hours, 168)) if hourly_forecast and hourly_forecast.has_data(): hourly = build_hourly_summary(hourly_forecast, unit_pref, settings=settings) @@ -235,7 +241,7 @@ def build_forecast( fallback_lines.append(f"\nForecast generated: {generated_at}") if hourly: - fallback_lines.insert(1, render_hourly_fallback(hourly)) + fallback_lines.append(render_hourly_fallback(hourly, hours=hourly_hours)) # Append cross-source confidence summary when available confidence_label: str | None = None @@ -253,6 +259,7 @@ def build_forecast( generated_at=generated_at, fallback_text=fallback_text, confidence_label=confidence_label, + summary=summary_line, ) @@ -291,7 +298,9 @@ def build_hourly_summary( include_cloud_cover = verbosity_level == "detailed" include_wind_gust = verbosity_level == "detailed" - for period in hourly_forecast.get_next_hours(6): + hourly_hours = getattr(settings, "hourly_forecast_hours", 6) if settings else 6 + hourly_hours = max(1, min(hourly_hours, 168)) + for period in hourly_forecast.get_next_hours(hourly_hours): if not period.has_data(): continue temperature = format_period_temperature(period, unit_pref, precision) @@ -383,9 +392,9 @@ def _resolve_forecast_display_time( return start_time.astimezone(target_tz) -def render_hourly_fallback(hourly: Iterable[HourlyPeriodPresentation]) -> str: +def render_hourly_fallback(hourly: Iterable[HourlyPeriodPresentation], hours: int = 6) -> str: """Render hourly periods into fallback text.""" - lines = ["Next 6 Hours:"] + lines = [f"Next {hours} Hours:"] for period in hourly: parts = [period.time] if period.temperature: diff --git a/src/accessiweather/display/presentation/html_formatters.py b/src/accessiweather/display/presentation/html_formatters.py index 140e437e..9da4c122 100644 --- a/src/accessiweather/display/presentation/html_formatters.py +++ b/src/accessiweather/display/presentation/html_formatters.py @@ -235,9 +235,10 @@ def generate_forecast_html(presentation: ForecastPresentation | None) -> str:
{temp}
{conditions}
""") + num_hourly = len(presentation.hourly_periods) hourly_html = f""" -
-

Next 6 Hours

+
+

Next {num_hourly} Hours

{"".join(hourly_items)}
diff --git a/src/accessiweather/display/weather_presenter.py b/src/accessiweather/display/weather_presenter.py index b71b9a86..065e19ef 100644 --- a/src/accessiweather/display/weather_presenter.py +++ b/src/accessiweather/display/weather_presenter.py @@ -100,6 +100,7 @@ class ForecastPresentation: generated_at: str | None = None fallback_text: str = "" confidence_label: str | None = None + summary: str | None = None @dataclass(slots=True) diff --git a/src/accessiweather/models/__init__.py b/src/accessiweather/models/__init__.py index 792dc6f3..12a1b39c 100644 --- a/src/accessiweather/models/__init__.py +++ b/src/accessiweather/models/__init__.py @@ -25,6 +25,8 @@ HourlyForecastPeriod, HourlyUVIndex, Location, + MinutelyPrecipitationForecast, + MinutelyPrecipitationPoint, SourceAttribution, SourceData, TrendInsight, @@ -40,6 +42,8 @@ "HourlyForecast", "HourlyAirQuality", "HourlyUVIndex", + "MinutelyPrecipitationPoint", + "MinutelyPrecipitationForecast", "TrendInsight", "EnvironmentalConditions", "AviationData", diff --git a/src/accessiweather/models/config.py b/src/accessiweather/models/config.py index 714bd5db..175b2382 100644 --- a/src/accessiweather/models/config.py +++ b/src/accessiweather/models/config.py @@ -40,6 +40,8 @@ # Event notifications "notify_discussion_update", "notify_severe_risk_change", + "notify_minutely_precipitation_start", + "notify_minutely_precipitation_stop", # GitHub settings "github_backend_url", "github_app_id", @@ -54,6 +56,7 @@ "custom_system_prompt", "custom_instructions", # API key settings (loaded lazily via keyring) + "pirate_weather_api_key", "visual_crossing_api_key", # Display preferences "round_values", @@ -105,6 +108,7 @@ class AppSettings: startup_enabled: bool = False data_source: str = "auto" visual_crossing_api_key: str = "" + pirate_weather_api_key: str = "" auto_update_enabled: bool = True update_channel: str = "stable" update_check_interval_hours: int = 24 @@ -116,6 +120,8 @@ class AppSettings: # Event-based notifications notify_discussion_update: bool = True notify_severe_risk_change: bool = False + notify_minutely_precipitation_start: bool = True + notify_minutely_precipitation_stop: bool = True github_backend_url: str = "" github_app_id: str = "" github_app_private_key: str = "" @@ -146,6 +152,7 @@ class AppSettings: offline_cache_max_age_minutes: int = 180 weather_history_enabled: bool = True forecast_duration_days: int = 7 + hourly_forecast_hours: int = 6 forecast_time_reference: str = "location" time_display_mode: str = "local" time_format_12hour: bool = True @@ -156,10 +163,10 @@ class AppSettings: taskbar_icon_text_format: str = "{temp} {condition}" # Source priority settings for smart auto mode source_priority_us: list[str] = field( - default_factory=lambda: ["nws", "openmeteo", "visualcrossing"] + default_factory=lambda: ["nws", "openmeteo", "visualcrossing", "pirateweather"] ) source_priority_international: list[str] = field( - default_factory=lambda: ["openmeteo", "visualcrossing"] + default_factory=lambda: ["openmeteo", "pirateweather", "visualcrossing"] ) # Open-Meteo weather model selection openmeteo_weather_model: str = "best_match" @@ -349,20 +356,28 @@ def validate_on_access(self, setting_name: str) -> bool: elif setting_name in {"source_priority_us", "source_priority_international"}: # Ensure valid list of source names - valid_sources = {"nws", "openmeteo", "visualcrossing"} + valid_sources = {"nws", "openmeteo", "visualcrossing", "pirateweather"} if not isinstance(value, list): if setting_name == "source_priority_us": - setattr(self, setting_name, ["nws", "openmeteo", "visualcrossing"]) + setattr( + self, setting_name, ["nws", "openmeteo", "visualcrossing", "pirateweather"] + ) else: - setattr(self, setting_name, ["openmeteo", "visualcrossing"]) + setattr(self, setting_name, ["openmeteo", "pirateweather", "visualcrossing"]) else: # Filter to only valid sources filtered = [s for s in value if s in valid_sources] if not filtered: if setting_name == "source_priority_us": - setattr(self, setting_name, ["nws", "openmeteo", "visualcrossing"]) + setattr( + self, + setting_name, + ["nws", "openmeteo", "visualcrossing", "pirateweather"], + ) else: - setattr(self, setting_name, ["openmeteo", "visualcrossing"]) + setattr( + self, setting_name, ["openmeteo", "pirateweather", "visualcrossing"] + ) elif filtered != value: setattr(self, setting_name, filtered) @@ -393,7 +408,7 @@ def to_dict(self) -> dict: "minimize_on_startup": self.minimize_on_startup, "startup_enabled": self.startup_enabled, "data_source": self.data_source, - # visual_crossing_api_key and github_app_* are stored in secure keyring, not JSON + # weather provider API keys and github_app_* are stored in secure keyring, not JSON "auto_update_enabled": self.auto_update_enabled, "update_channel": self.update_channel, "update_check_interval_hours": self.update_check_interval_hours, @@ -403,6 +418,8 @@ def to_dict(self) -> dict: "show_nationwide_location": self.show_nationwide_location, "notify_discussion_update": self.notify_discussion_update, "notify_severe_risk_change": self.notify_severe_risk_change, + "notify_minutely_precipitation_start": self.notify_minutely_precipitation_start, + "notify_minutely_precipitation_stop": self.notify_minutely_precipitation_stop, "github_backend_url": self.github_backend_url, "alert_radius_type": self.alert_radius_type, "alert_notifications_enabled": self.alert_notifications_enabled, @@ -430,6 +447,7 @@ def to_dict(self) -> dict: "offline_cache_max_age_minutes": self.offline_cache_max_age_minutes, "weather_history_enabled": self.weather_history_enabled, "forecast_duration_days": self.forecast_duration_days, + "hourly_forecast_hours": self.hourly_forecast_hours, "forecast_time_reference": self.forecast_time_reference, "time_display_mode": self.time_display_mode, "time_format_12hour": self.time_format_12hour, @@ -470,6 +488,7 @@ def from_dict(cls, data: dict) -> AppSettings: startup_enabled=cls._as_bool(data.get("startup_enabled"), False), data_source=data.get("data_source", "auto"), visual_crossing_api_key=data.get("visual_crossing_api_key", ""), + pirate_weather_api_key=data.get("pirate_weather_api_key", ""), auto_update_enabled=cls._as_bool(data.get("auto_update_enabled"), True), update_channel=data.get("update_channel", "stable"), update_check_interval_hours=data.get("update_check_interval_hours", 24), @@ -479,6 +498,12 @@ def from_dict(cls, data: dict) -> AppSettings: show_nationwide_location=cls._as_bool(data.get("show_nationwide_location"), True), notify_discussion_update=cls._as_bool(data.get("notify_discussion_update"), True), notify_severe_risk_change=cls._as_bool(data.get("notify_severe_risk_change"), False), + notify_minutely_precipitation_start=cls._as_bool( + data.get("notify_minutely_precipitation_start"), True + ), + notify_minutely_precipitation_stop=cls._as_bool( + data.get("notify_minutely_precipitation_stop"), True + ), github_backend_url=data.get("github_backend_url", ""), alert_radius_type=data.get("alert_radius_type", "county"), alert_notifications_enabled=cls._as_bool(data.get("alert_notifications_enabled"), True), @@ -506,6 +531,7 @@ def from_dict(cls, data: dict) -> AppSettings: offline_cache_max_age_minutes=data.get("offline_cache_max_age_minutes", 180), weather_history_enabled=cls._as_bool(data.get("weather_history_enabled"), True), forecast_duration_days=data.get("forecast_duration_days", 7), + hourly_forecast_hours=data.get("hourly_forecast_hours", 6), forecast_time_reference=data.get("forecast_time_reference", "location"), time_display_mode=data.get("time_display_mode", "local"), time_format_12hour=cls._as_bool(data.get("time_format_12hour"), True), @@ -516,10 +542,10 @@ def from_dict(cls, data: dict) -> AppSettings: ), taskbar_icon_text_format=data.get("taskbar_icon_text_format", "{temp} {condition}"), source_priority_us=data.get( - "source_priority_us", ["nws", "openmeteo", "visualcrossing"] + "source_priority_us", ["nws", "openmeteo", "visualcrossing", "pirateweather"] ), source_priority_international=data.get( - "source_priority_international", ["openmeteo", "visualcrossing"] + "source_priority_international", ["openmeteo", "pirateweather", "visualcrossing"] ), openmeteo_weather_model=data.get("openmeteo_weather_model", "best_match"), station_selection_strategy=data.get("station_selection_strategy", "hybrid_default"), diff --git a/src/accessiweather/models/weather.py b/src/accessiweather/models/weather.py index beda4e0a..ec8daf30 100644 --- a/src/accessiweather/models/weather.py +++ b/src/accessiweather/models/weather.py @@ -276,6 +276,7 @@ class Forecast: periods: list[ForecastPeriod] generated_at: datetime | None = None + summary: str | None = None def has_data(self) -> bool: """Check if we have any forecast data.""" @@ -406,6 +407,29 @@ def _to_timestamp(dt: datetime | None, *, as_utc: bool) -> float | None: return fallback[:count] +@dataclass +class MinutelyPrecipitationPoint: + """A single minute of precipitation guidance.""" + + time: datetime + precipitation_intensity: float | None = None + precipitation_probability: float | None = None + precipitation_type: str | None = None + + +@dataclass +class MinutelyPrecipitationForecast: + """Short-range precipitation guidance from a minutely provider.""" + + summary: str | None = None + icon: str | None = None + points: list[MinutelyPrecipitationPoint] = field(default_factory=list) + + def has_data(self) -> bool: + """Return True when at least one minutely point is available.""" + return len(self.points) > 0 + + @dataclass class TrendInsight: """Summary of a metric trend over a timeframe.""" @@ -510,6 +534,7 @@ class WeatherData: daily_history: list[ForecastPeriod] = field(default_factory=list) discussion: str | None = None discussion_issuance_time: datetime | None = None # NWS AFD issuance time for update detection + minutely_precipitation: MinutelyPrecipitationForecast | None = None alerts: WeatherAlerts | None = None environmental: EnvironmentalConditions | None = None aviation: AviationData | None = None @@ -544,6 +569,7 @@ def has_any_data(self) -> bool: self.current and self.current.has_data(), self.forecast and self.forecast.has_data(), self.hourly_forecast and self.hourly_forecast.has_data(), + self.minutely_precipitation and self.minutely_precipitation.has_data(), self.alerts and self.alerts.has_alerts(), self.environmental and self.environmental.has_data(), self.aviation and self.aviation.has_taf(), diff --git a/src/accessiweather/notifications/__init__.py b/src/accessiweather/notifications/__init__.py index 42b403c4..4f97dafa 100644 --- a/src/accessiweather/notifications/__init__.py +++ b/src/accessiweather/notifications/__init__.py @@ -12,6 +12,12 @@ from .alert_sound_mapper import choose_sound_event, get_candidate_sound_events # Event-based notifications +from .minutely_precipitation import ( + MinutelyPrecipitationTransition, + build_minutely_transition_signature, + detect_minutely_precipitation_transition, + parse_pirate_weather_minutely_block, +) from .notification_event_manager import ( NotificationEvent, NotificationEventManager, @@ -37,6 +43,10 @@ # Alert sound mapping "choose_sound_event", "get_candidate_sound_events", + "MinutelyPrecipitationTransition", + "parse_pirate_weather_minutely_block", + "detect_minutely_precipitation_transition", + "build_minutely_transition_signature", # Sound player "get_available_sound_packs", "get_sound_file", diff --git a/src/accessiweather/notifications/minutely_precipitation.py b/src/accessiweather/notifications/minutely_precipitation.py new file mode 100644 index 00000000..aff275bf --- /dev/null +++ b/src/accessiweather/notifications/minutely_precipitation.py @@ -0,0 +1,176 @@ +"""Pirate Weather minutely precipitation parsing and transition detection.""" + +from __future__ import annotations + +from collections.abc import Mapping +from dataclasses import dataclass +from datetime import UTC, datetime +from typing import Any + +from ..models import MinutelyPrecipitationForecast, MinutelyPrecipitationPoint + +NO_TRANSITION_SIGNATURE = "__none__" + + +@dataclass(frozen=True) +class MinutelyPrecipitationTransition: + """A dry/wet transition detected in minutely precipitation data.""" + + transition_type: str # "starting" or "stopping" + minutes_until: int + precipitation_type: str | None = None + + @property + def event_type(self) -> str: + return ( + "minutely_precipitation_start" + if self.transition_type == "starting" + else "minutely_precipitation_stop" + ) + + @property + def title(self) -> str: + precipitation_label = precipitation_type_label(self.precipitation_type) + minute_label = "minute" if self.minutes_until == 1 else "minutes" + verb = "starting" if self.transition_type == "starting" else "stopping" + return f"{precipitation_label} {verb} in {self.minutes_until} {minute_label}" + + +def parse_pirate_weather_minutely_block( + payload: Mapping[str, Any] | None, +) -> MinutelyPrecipitationForecast | None: + """ + Parse a Pirate Weather minutely block or full response. + + Accepts either the full API response containing a ``minutely`` object or the + ``minutely`` object itself. + """ + if not payload: + return None + + minutely_payload = payload.get("minutely") if "minutely" in payload else payload + if not isinstance(minutely_payload, Mapping): + return None + + raw_points = minutely_payload.get("data") + if not isinstance(raw_points, list): + return None + + points: list[MinutelyPrecipitationPoint] = [] + for raw_point in raw_points: + if not isinstance(raw_point, Mapping): + continue + raw_time = raw_point.get("time") + if not isinstance(raw_time, (int, float)): + continue + points.append( + MinutelyPrecipitationPoint( + time=datetime.fromtimestamp(raw_time, tz=UTC), + precipitation_intensity=_coerce_float(raw_point.get("precipIntensity")), + precipitation_probability=_coerce_float(raw_point.get("precipProbability")), + precipitation_type=_normalize_precipitation_type(raw_point.get("precipType")), + ) + ) + + if not points: + return None + + summary = minutely_payload.get("summary") + icon = minutely_payload.get("icon") + return MinutelyPrecipitationForecast( + summary=str(summary) if isinstance(summary, str) else None, + icon=str(icon) if isinstance(icon, str) else None, + points=points, + ) + + +def detect_minutely_precipitation_transition( + forecast: MinutelyPrecipitationForecast | None, +) -> MinutelyPrecipitationTransition | None: + """Detect the first dry/wet transition in the next hour of minutely data.""" + if forecast is None or not forecast.points: + return None + + baseline_is_wet = is_wet(forecast.points[0]) + for idx, point in enumerate(forecast.points[1:], start=1): + if is_wet(point) == baseline_is_wet: + continue + if baseline_is_wet: + return MinutelyPrecipitationTransition( + transition_type="stopping", + minutes_until=idx, + precipitation_type=_first_precipitation_type(forecast.points[:idx]), + ) + return MinutelyPrecipitationTransition( + transition_type="starting", + minutes_until=idx, + precipitation_type=_first_precipitation_type(forecast.points[idx:]), + ) + + return None + + +def build_minutely_transition_signature( + forecast: MinutelyPrecipitationForecast | None, +) -> str | None: + """ + Return a stable signature for the current minutely transition state. + + ``None`` means the forecast was unavailable. ``NO_TRANSITION_SIGNATURE`` means + the forecast was available but no dry/wet transition was detected. + """ + if forecast is None or not forecast.points: + return None + + transition = detect_minutely_precipitation_transition(forecast) + if transition is None: + return NO_TRANSITION_SIGNATURE + + precip_type = transition.precipitation_type or "precipitation" + return f"{transition.transition_type}:{transition.minutes_until}:{precip_type}" + + +def is_wet(point: MinutelyPrecipitationPoint) -> bool: + """Return True when a minutely point indicates precipitation.""" + if point.precipitation_intensity is not None: + return point.precipitation_intensity > 0 + if point.precipitation_probability is not None: + return point.precipitation_probability > 0 + return False + + +def precipitation_type_label(precipitation_type: str | None) -> str: + """Return a user-facing precipitation label.""" + if precipitation_type == "sleet": + return "Sleet" + if precipitation_type == "snow": + return "Snow" + if precipitation_type == "hail": + return "Hail" + if precipitation_type == "freezing-rain": + return "Freezing rain" + if precipitation_type == "ice": + return "Ice" + if precipitation_type == "rain": + return "Rain" + return "Precipitation" + + +def _coerce_float(value: Any) -> float | None: + if isinstance(value, (int, float)): + return float(value) + return None + + +def _normalize_precipitation_type(value: Any) -> str | None: + if not isinstance(value, str): + return None + normalized = value.strip().lower() + return normalized or None + + +def _first_precipitation_type(points: list[MinutelyPrecipitationPoint]) -> str | None: + for point in points: + if is_wet(point) and point.precipitation_type: + return point.precipitation_type + return None diff --git a/src/accessiweather/notifications/notification_event_manager.py b/src/accessiweather/notifications/notification_event_manager.py index 24af7012..7f77707b 100644 --- a/src/accessiweather/notifications/notification_event_manager.py +++ b/src/accessiweather/notifications/notification_event_manager.py @@ -4,8 +4,9 @@ This module provides state tracking and change detection for: - Area Forecast Discussion (AFD) updates (using NWS API issuanceTime) - Severe weather risk level changes +- Pirate Weather minutely precipitation start/stop transitions -Both notification types are opt-in (disabled by default) and can be +All notification types are opt-in (disabled by default) and can be enabled in Settings > Notifications. """ @@ -20,6 +21,10 @@ from typing import TYPE_CHECKING from ..runtime_state import RuntimeStateManager +from .minutely_precipitation import ( + build_minutely_transition_signature, + detect_minutely_precipitation_transition, +) if TYPE_CHECKING: from ..models import AppSettings, CurrentConditions, WeatherData @@ -165,7 +170,7 @@ def summarize_discussion_change(previous_text: str | None, current_text: str | N class NotificationEvent: """Represents a notification event to be sent.""" - event_type: str # 'discussion_update' or 'severe_risk' + event_type: str title: str message: str sound_event: str # Sound event key for the soundpack @@ -178,6 +183,7 @@ class NotificationState: last_discussion_issuance_time: datetime | None = None # NWS API issuanceTime last_discussion_text: str | None = None last_severe_risk: int | None = None + last_minutely_transition_signature: str | None = None last_check_time: datetime | None = None def to_dict(self) -> dict: @@ -190,6 +196,7 @@ def to_dict(self) -> dict: ), "last_discussion_text": self.last_discussion_text, "last_severe_risk": self.last_severe_risk, + "last_minutely_transition_signature": self.last_minutely_transition_signature, "last_check_time": self.last_check_time.isoformat() if self.last_check_time else None, } @@ -204,6 +211,7 @@ def from_dict(cls, data: dict) -> NotificationState: ), last_discussion_text=data.get("last_discussion_text"), last_severe_risk=data.get("last_severe_risk"), + last_minutely_transition_signature=data.get("last_minutely_transition_signature"), last_check_time=datetime.fromisoformat(last_check) if last_check else None, ) @@ -215,8 +223,9 @@ class NotificationEventManager: Tracks changes in: - Area Forecast Discussion (AFD) updates using NWS API issuanceTime - Severe weather risk levels (from Visual Crossing) + - Minutely precipitation start/stop transitions (from Pirate Weather) - Both notifications are opt-in (disabled by default). + All notifications are opt-in (disabled by default). """ def __init__( @@ -284,12 +293,17 @@ def _runtime_section_to_legacy_shape(section: dict) -> dict: """Convert unified runtime state to the legacy notification-state shape.""" discussion = section.get("discussion", {}) severe_risk = section.get("severe_risk", {}) + minutely_precipitation = section.get("minutely_precipitation", {}) return { "last_discussion_issuance_time": discussion.get("last_issuance_time"), "last_discussion_text": discussion.get("last_text"), "last_severe_risk": severe_risk.get("last_value"), + "last_minutely_transition_signature": minutely_precipitation.get( + "last_transition_signature" + ), "last_check_time": discussion.get("last_check_time") - or severe_risk.get("last_check_time"), + or severe_risk.get("last_check_time") + or minutely_precipitation.get("last_check_time"), } @staticmethod @@ -306,6 +320,10 @@ def _legacy_shape_to_runtime_section(data: dict) -> dict: "last_value": data.get("last_severe_risk"), "last_check_time": last_check_time, }, + "minutely_precipitation": { + "last_transition_signature": data.get("last_minutely_transition_signature"), + "last_check_time": last_check_time, + }, } def check_for_events( @@ -346,6 +364,18 @@ def check_for_events( if risk_event: events.append(risk_event) + if ( + settings.notify_minutely_precipitation_start + or settings.notify_minutely_precipitation_stop + ): + minutely_event = self._check_minutely_precipitation_transition( + weather_data.minutely_precipitation, + settings, + location_name, + ) + if minutely_event: + events.append(minutely_event) + # Update check time and save state self.state.last_check_time = datetime.now() self._save_state() @@ -506,6 +536,48 @@ def _check_severe_risk_change( self.state.last_severe_risk = severe_risk return None + def _check_minutely_precipitation_transition( + self, + minutely_precipitation, + settings: AppSettings, + location_name: str, + ) -> NotificationEvent | None: + """Check for a new dry/wet transition in Pirate Weather minutely guidance.""" + signature = build_minutely_transition_signature(minutely_precipitation) + if signature is None: + return None + + if self.state.last_minutely_transition_signature is None: + self.state.last_minutely_transition_signature = signature + logger.debug("First minutely precipitation state stored: %s", signature) + return None + + if signature == self.state.last_minutely_transition_signature: + return None + + self.state.last_minutely_transition_signature = signature + transition = detect_minutely_precipitation_transition(minutely_precipitation) + if transition is None: + return None + + if ( + transition.transition_type == "starting" + and not settings.notify_minutely_precipitation_start + ): + return None + if ( + transition.transition_type == "stopping" + and not settings.notify_minutely_precipitation_stop + ): + return None + + return NotificationEvent( + event_type=transition.event_type, + title=transition.title, + message=f"{transition.title} for {location_name}.", + sound_event="notify", + ) + def reset_state(self) -> None: """Reset all tracked state.""" self.state = NotificationState() diff --git a/src/accessiweather/pirate_weather_client.py b/src/accessiweather/pirate_weather_client.py new file mode 100644 index 00000000..b01523e4 --- /dev/null +++ b/src/accessiweather/pirate_weather_client.py @@ -0,0 +1,577 @@ +""" +Pirate Weather API client for AccessiWeather. + +This module provides a client for the Pirate Weather API +(https://pirateweather.net), which is an open-source Dark Sky API replacement. +It provides current conditions, hourly/daily forecasts, minutely precipitation, +and global WMO weather alerts. + +API endpoint: https://api.pirateweather.net/forecast/{apikey}/{lat},{lon} +""" + +from __future__ import annotations + +import logging +from datetime import UTC, datetime, timedelta, timezone + +import httpx + +from .models import ( + CurrentConditions, + Forecast, + ForecastPeriod, + HourlyForecast, + HourlyForecastPeriod, + Location, + WeatherAlert, + WeatherAlerts, +) +from .utils.retry_utils import async_retry_with_backoff +from .utils.temperature_utils import TemperatureUnit, calculate_dewpoint +from .weather_client_parsers import convert_f_to_c, degrees_to_cardinal + +logger = logging.getLogger(__name__) + +_BASE_URL = "https://api.pirateweather.net/forecast" + + +class PirateWeatherApiError(Exception): + """Exception raised for Pirate Weather API errors.""" + + def __init__(self, message: str, status_code: int | None = None): + """Initialize the instance.""" + self.message = message + self.status_code = status_code + super().__init__(message) + + +# Pirate Weather icon -> human-readable condition mapping +_ICON_TO_CONDITION: dict[str, str] = { + "clear-day": "Clear", + "clear-night": "Clear", + "rain": "Rain", + "snow": "Snow", + "sleet": "Sleet", + "wind": "Windy", + "fog": "Fog", + "cloudy": "Cloudy", + "partly-cloudy-day": "Partly Cloudy", + "partly-cloudy-night": "Partly Cloudy", + "thunderstorm": "Thunderstorm", + "hail": "Hail", + "tornado": "Tornado", +} + + +def _icon_to_condition(icon: str | None) -> str | None: + """Map a Pirate Weather icon string to a human-readable condition.""" + if not icon: + return None + return _ICON_TO_CONDITION.get(icon, icon.replace("-", " ").title()) + + +class PirateWeatherClient: + """Client for the Pirate Weather API.""" + + def __init__( + self, + api_key: str, + user_agent: str = "AccessiWeather/1.0", + units: str = "us", + ): + """ + Initialize the Pirate Weather client. + + Args: + api_key: Pirate Weather API key. + user_agent: HTTP User-Agent header value. + units: Unit system – "us" (°F, mph, in), "si" (°C, m/s, mm), + "ca" (°C, km/h, mm), or "uk2" (°C, mph, mm). + + """ + self.api_key = api_key + self.user_agent = user_agent + self.units = units + self.timeout = 15.0 + + def _build_url(self, lat: float, lon: float) -> str: + return f"{_BASE_URL}/{self.api_key}/{lat},{lon}" + + @async_retry_with_backoff(max_attempts=3, base_delay=1.0, timeout=20.0) + async def get_forecast_data(self, location: Location) -> dict | None: + """ + Fetch the full forecast payload from Pirate Weather. + + Returns the raw API response dict (with ``currently``, ``hourly``, + ``daily``, ``minutely``, ``alerts`` keys) or ``None`` on error. + """ + url = self._build_url(location.latitude, location.longitude) + params = { + "units": self.units, + "extend": "hourly", + } + try: + async with httpx.AsyncClient(timeout=self.timeout, follow_redirects=True) as client: + headers = {"User-Agent": self.user_agent} + response = await client.get(url, params=params, headers=headers) + + if response.status_code == 400: + raise PirateWeatherApiError( + "Bad request – check API key and coordinates", + response.status_code, + ) + if response.status_code == 401: + raise PirateWeatherApiError("Invalid API key", response.status_code) + if response.status_code == 429: + raise PirateWeatherApiError("API rate limit exceeded", response.status_code) + if response.status_code != 200: + raise PirateWeatherApiError( + f"API request failed: HTTP {response.status_code}", + response.status_code, + ) + + return response.json() + + except httpx.TimeoutException: + logger.error("Pirate Weather API request timed out") + raise PirateWeatherApiError("Request timed out") from None + except httpx.RequestError as e: + logger.error(f"Pirate Weather API request failed: {e}") + raise PirateWeatherApiError(f"Request failed: {e}") from e + except PirateWeatherApiError: + raise + except Exception as e: + logger.error(f"Unexpected Pirate Weather error: {e}") + raise PirateWeatherApiError(f"Unexpected error: {e}") from e + + async def get_current_conditions(self, location: Location) -> CurrentConditions | None: + """Get current weather conditions.""" + data = await self.get_forecast_data(location) + if data is None: + return None + return self._parse_current_conditions(data) + + async def get_forecast(self, location: Location, days: int = 7) -> Forecast | None: + """Get daily weather forecast.""" + data = await self.get_forecast_data(location) + if data is None: + return None + return self._parse_forecast(data, days=days) + + async def get_hourly_forecast(self, location: Location) -> HourlyForecast | None: + """Get hourly weather forecast.""" + data = await self.get_forecast_data(location) + if data is None: + return None + return self._parse_hourly_forecast(data) + + async def get_alerts(self, location: Location) -> WeatherAlerts: + """Get weather alerts.""" + try: + data = await self.get_forecast_data(location) + if data is None: + return WeatherAlerts(alerts=[]) + return self._parse_alerts(data) + except Exception: + logger.debug("Pirate Weather alerts request failed", exc_info=True) + return WeatherAlerts(alerts=[]) + + # ------------------------------------------------------------------ + # Parsing helpers + # ------------------------------------------------------------------ + + def _parse_current_conditions(self, data: dict) -> CurrentConditions: + """Parse Pirate Weather ``currently`` block into CurrentConditions.""" + current = data.get("currently", {}) + + # Temperature (PW returns °F in "us" units, °C otherwise) + temp = current.get("temperature") + using_us = self.units == "us" + + if using_us: + temp_f = float(temp) if temp is not None else None + temp_c = convert_f_to_c(temp_f) + else: + temp_c = float(temp) if temp is not None else None + temp_f = (temp_c * 9 / 5 + 32) if temp_c is not None else None + + # Humidity (0-1 in PW → 0-100) + humidity_raw = current.get("humidity") + humidity = round(humidity_raw * 100) if humidity_raw is not None else None + + # Dew point + dewpoint = current.get("dewPoint") + if using_us: + dewpoint_f = float(dewpoint) if dewpoint is not None else None + dewpoint_c = convert_f_to_c(dewpoint_f) + if dewpoint_f is None and temp_f is not None and humidity is not None: + dewpoint_f = calculate_dewpoint(temp_f, humidity, unit=TemperatureUnit.FAHRENHEIT) + dewpoint_c = convert_f_to_c(dewpoint_f) + else: + dewpoint_c = float(dewpoint) if dewpoint is not None else None + dewpoint_f = (dewpoint_c * 9 / 5 + 32) if dewpoint_c is not None else None + + # Wind – PW "us" = mph, "si" = m/s, "ca" = km/h, "uk2" = mph + wind_speed_raw = current.get("windSpeed") + if using_us or self.units == "uk2": + wind_speed_mph = float(wind_speed_raw) if wind_speed_raw is not None else None + wind_speed_kph = wind_speed_mph * 1.60934 if wind_speed_mph is not None else None + elif self.units == "ca": + wind_speed_kph = float(wind_speed_raw) if wind_speed_raw is not None else None + wind_speed_mph = wind_speed_kph / 1.60934 if wind_speed_kph is not None else None + else: # si: m/s + wind_mps = float(wind_speed_raw) if wind_speed_raw is not None else None + wind_speed_mph = wind_mps * 2.23694 if wind_mps is not None else None + wind_speed_kph = wind_mps * 3.6 if wind_mps is not None else None + + wind_direction = current.get("windBearing") # degrees + + # Pressure – PW returns mb in all unit groups + pressure_mb = current.get("pressure") + pressure_in = pressure_mb / 33.8639 if pressure_mb is not None else None + + # Visibility – PW "us" = miles, others = km + visibility_raw = current.get("visibility") + if using_us or self.units == "uk2": + visibility_miles = float(visibility_raw) if visibility_raw is not None else None + visibility_km = visibility_miles * 1.60934 if visibility_miles is not None else None + else: + visibility_km = float(visibility_raw) if visibility_raw is not None else None + visibility_miles = visibility_km / 1.60934 if visibility_km is not None else None + + # Feels like (apparent temperature) + apparent = current.get("apparentTemperature") + if using_us: + feels_like_f = float(apparent) if apparent is not None else None + feels_like_c = convert_f_to_c(feels_like_f) + else: + feels_like_c = float(apparent) if apparent is not None else None + feels_like_f = (feels_like_c * 9 / 5 + 32) if feels_like_c is not None else None + + # Wind gust + wind_gust_raw = current.get("windGust") + if using_us or self.units == "uk2": + wind_gust_mph = float(wind_gust_raw) if wind_gust_raw is not None else None + wind_gust_kph = wind_gust_mph * 1.60934 if wind_gust_mph is not None else None + elif self.units == "ca": + wind_gust_kph = float(wind_gust_raw) if wind_gust_raw is not None else None + wind_gust_mph = wind_gust_kph / 1.60934 if wind_gust_kph is not None else None + else: + wind_gust_mps = float(wind_gust_raw) if wind_gust_raw is not None else None + wind_gust_mph = wind_gust_mps * 2.23694 if wind_gust_mps is not None else None + wind_gust_kph = wind_gust_mps * 3.6 if wind_gust_mps is not None else None + + # Precipitation intensity – PW "us" = in/hr, others = mm/hr + precip_intensity = current.get("precipIntensity") + if using_us: + precip_in = float(precip_intensity) if precip_intensity is not None else None + precip_mm = precip_in * 25.4 if precip_in is not None else None + else: + precip_mm = float(precip_intensity) if precip_intensity is not None else None + precip_in = precip_mm / 25.4 if precip_mm is not None else None + + cloud_cover_raw = current.get("cloudCover") + cloud_cover = round(cloud_cover_raw * 100) if cloud_cover_raw is not None else None + + uv_index = current.get("uvIndex") + + # Sunrise/sunset come from the first daily entry + sunrise_time = None + sunset_time = None + daily_data = data.get("daily", {}).get("data", []) + if daily_data: + today = daily_data[0] + tz_offset = data.get("offset", 0) + location_tz = timezone(timedelta(hours=tz_offset)) + sr = today.get("sunriseTime") + ss = today.get("sunsetTime") + if sr: + sunrise_time = datetime.fromtimestamp(sr, tz=location_tz) + if ss: + sunset_time = datetime.fromtimestamp(ss, tz=location_tz) + + condition_str = current.get("summary") or _icon_to_condition(current.get("icon")) + + return CurrentConditions( + temperature_f=temp_f, + temperature_c=temp_c, + condition=condition_str, + humidity=humidity, + dewpoint_f=dewpoint_f, + dewpoint_c=dewpoint_c, + wind_speed_mph=wind_speed_mph, + wind_speed_kph=wind_speed_kph, + wind_direction=degrees_to_cardinal(wind_direction), + pressure_in=pressure_in, + pressure_mb=pressure_mb, + feels_like_f=feels_like_f, + feels_like_c=feels_like_c, + visibility_miles=visibility_miles, + visibility_km=visibility_km, + uv_index=uv_index, + cloud_cover=cloud_cover, + wind_gust_mph=wind_gust_mph, + wind_gust_kph=wind_gust_kph, + precipitation_in=precip_in, + precipitation_mm=precip_mm, + sunrise_time=sunrise_time, + sunset_time=sunset_time, + ) + + def _parse_forecast(self, data: dict, days: int = 7) -> Forecast: + """Parse Pirate Weather ``daily`` block into a Forecast.""" + daily_data = data.get("daily", {}).get("data", []) + tz_offset = data.get("offset", 0) + location_tz = timezone(timedelta(hours=tz_offset)) + using_us = self.units == "us" + + periods: list[ForecastPeriod] = [] + for i, day in enumerate(daily_data[:days]): + time_val = day.get("time") + if time_val: + dt = datetime.fromtimestamp(time_val, tz=location_tz) + if i == 0: + name = "Today" + elif i == 1: + name = "Tomorrow" + else: + name = dt.strftime("%A") + else: + name = f"Day {i + 1}" + + temp_high = day.get("temperatureHigh") if using_us else day.get("temperatureMax") + temp_low = day.get("temperatureLow") if using_us else day.get("temperatureMin") + + # Wind speed formatting + wind_raw = day.get("windSpeed") + if wind_raw is not None: + if using_us or self.units == "uk2": + wind_str = f"{round(wind_raw)} mph" + elif self.units == "ca": + wind_str = f"{round(wind_raw)} km/h" + else: + wind_str = f"{round(wind_raw)} m/s" + else: + wind_str = None + + wind_gust_raw = day.get("windGust") + if wind_gust_raw is not None: + if using_us or self.units == "uk2": + wind_gust_str = f"{round(wind_gust_raw)} mph" + elif self.units == "ca": + wind_gust_str = f"{round(wind_gust_raw)} km/h" + else: + wind_gust_str = f"{round(wind_gust_raw)} m/s" + else: + wind_gust_str = None + + precip_prob_raw = day.get("precipProbability") + precip_prob = round(precip_prob_raw * 100) if precip_prob_raw is not None else None + + precip_intensity = day.get("precipIntensity") + if precip_intensity is not None: + precip_amount = precip_intensity if using_us else precip_intensity / 25.4 + else: + precip_amount = None + + cloud_cover_raw = day.get("cloudCover") + cloud_cover = round(cloud_cover_raw * 100) if cloud_cover_raw is not None else None + + uv_index = day.get("uvIndex") + + condition = day.get("summary") or _icon_to_condition(day.get("icon")) + + start_time = datetime.fromtimestamp(time_val, tz=location_tz) if time_val else None + + period = ForecastPeriod( + name=name, + temperature=temp_high, + temperature_low=temp_low, + temperature_unit="F" if using_us else "C", + short_forecast=condition, + detailed_forecast=condition, + wind_speed=wind_str, + wind_direction=degrees_to_cardinal(day.get("windBearing")), + precipitation_probability=precip_prob, + uv_index=uv_index, + cloud_cover=cloud_cover, + wind_gust=wind_gust_str, + precipitation_amount=precip_amount, + start_time=start_time, + ) + periods.append(period) + + daily_summary = data.get("daily", {}).get("summary") + return Forecast(periods=periods, generated_at=datetime.now(UTC), summary=daily_summary) + + def _parse_hourly_forecast(self, data: dict) -> HourlyForecast: + """Parse Pirate Weather ``hourly`` block into an HourlyForecast.""" + hourly_items = data.get("hourly", {}).get("data", []) + tz_offset = data.get("offset", 0) + location_tz = timezone(timedelta(hours=tz_offset)) + using_us = self.units == "us" + + periods: list[HourlyForecastPeriod] = [] + for hour in hourly_items: + time_val = hour.get("time") + if time_val: + start_time = datetime.fromtimestamp(time_val, tz=location_tz) + else: + start_time = datetime.now(UTC) + + temp = hour.get("temperature") + if using_us: + temp_f = float(temp) if temp is not None else None + else: + temp_c = float(temp) if temp is not None else None + temp_f = (temp_c * 9 / 5 + 32) if temp_c is not None else temp_c + + # Pressure in mb (all unit groups) + pressure_mb = hour.get("pressure") + pressure_in = pressure_mb / 33.8639 if pressure_mb is not None else None + + wind_raw = hour.get("windSpeed") + if wind_raw is not None: + if using_us or self.units == "uk2": + wind_str = f"{round(wind_raw)} mph" + elif self.units == "ca": + wind_str = f"{round(wind_raw)} km/h" + else: + wind_str = f"{round(wind_raw)} m/s" + else: + wind_str = None + + wind_gust_raw = hour.get("windGust") + wind_gust_mph: float | None = None + if wind_gust_raw is not None: + if using_us or self.units == "uk2": + wind_gust_mph = float(wind_gust_raw) + elif self.units == "ca": + wind_gust_mph = float(wind_gust_raw) / 1.60934 + else: + wind_gust_mph = float(wind_gust_raw) * 2.23694 + + precip_prob_raw = hour.get("precipProbability") + precip_prob = round(precip_prob_raw * 100) if precip_prob_raw is not None else None + + precip_intensity = hour.get("precipIntensity") + if precip_intensity is not None: + precip_amount = precip_intensity if using_us else precip_intensity / 25.4 + else: + precip_amount = None + + cloud_cover_raw = hour.get("cloudCover") + cloud_cover = round(cloud_cover_raw * 100) if cloud_cover_raw is not None else None + + uv_index = hour.get("uvIndex") + + visibility_raw = hour.get("visibility") + if visibility_raw is not None: + if using_us or self.units == "uk2": + visibility_miles = float(visibility_raw) + visibility_km = visibility_miles * 1.60934 + else: + visibility_km = float(visibility_raw) + visibility_miles = visibility_km / 1.60934 + else: + visibility_miles = None + visibility_km = None + + apparent = hour.get("apparentTemperature") + if using_us: + feels_like_f = float(apparent) if apparent is not None else None + else: + feels_like_c = float(apparent) if apparent is not None else None + feels_like_f = (feels_like_c * 9 / 5 + 32) if feels_like_c is not None else None + + condition = hour.get("summary") or _icon_to_condition(hour.get("icon")) + + period = HourlyForecastPeriod( + start_time=start_time, + temperature=temp_f, + temperature_unit="F", + short_forecast=condition, + wind_speed=wind_str, + wind_direction=degrees_to_cardinal(hour.get("windBearing")), + pressure_mb=pressure_mb, + pressure_in=pressure_in, + precipitation_probability=precip_prob, + uv_index=uv_index, + cloud_cover=cloud_cover, + wind_gust_mph=wind_gust_mph, + precipitation_amount=precip_amount, + feels_like=feels_like_f, + visibility_miles=visibility_miles, + visibility_km=visibility_km, + ) + periods.append(period) + + return HourlyForecast(periods=periods, generated_at=datetime.now(UTC)) + + def _parse_alerts(self, data: dict) -> WeatherAlerts: + """Parse Pirate Weather ``alerts`` list into WeatherAlerts.""" + raw_alerts = data.get("alerts", []) + alerts: list[WeatherAlert] = [] + + tz_offset = data.get("offset", 0) + location_tz = timezone(timedelta(hours=tz_offset)) + + for _i, alert_data in enumerate(raw_alerts): + title = alert_data.get("title") or "Weather Alert" + description = alert_data.get("description") or title + severity = self._map_severity(alert_data.get("severity")) + uri = alert_data.get("uri") or "" + + # Use stable ID based on title + expires so it doesn't change on minor + # text updates to the description + expires_raw = alert_data.get("expires") + _id_str = f"pw-{hash(f'{title}-{expires_raw}')}" + alert_id = uri or _id_str + + onset_raw = alert_data.get("time") + expires_raw_val = alert_data.get("expires") + + onset = datetime.fromtimestamp(onset_raw, tz=location_tz) if onset_raw else None + expires = ( + datetime.fromtimestamp(expires_raw_val, tz=location_tz) if expires_raw_val else None + ) + + regions = alert_data.get("regions", []) + areas: list[str] = regions if isinstance(regions, list) else [] + + alert = WeatherAlert( + id=alert_id, + title=title, + description=description, + severity=severity, + urgency="Unknown", + certainty="Possible", + event=title, + headline=title, + instruction=None, + areas=areas, + onset=onset, + expires=expires, + sent=onset, + effective=onset, + source="PirateWeather", + ) + alerts.append(alert) + + logger.info(f"Parsed {len(alerts)} Pirate Weather alerts") + return WeatherAlerts(alerts=alerts) + + def _map_severity(self, severity: str | None) -> str: + """Map Pirate Weather severity string to standard levels.""" + if not severity: + return "Unknown" + mapping = { + "extreme": "Extreme", + "severe": "Severe", + "moderate": "Moderate", + "minor": "Minor", + "advisory": "Minor", + "watch": "Moderate", + "warning": "Severe", + } + return mapping.get(severity.lower(), "Unknown") diff --git a/src/accessiweather/ui/dialogs/settings_dialog.py b/src/accessiweather/ui/dialogs/settings_dialog.py index 99926154..3ab3f517 100644 --- a/src/accessiweather/ui/dialogs/settings_dialog.py +++ b/src/accessiweather/ui/dialogs/settings_dialog.py @@ -221,6 +221,18 @@ def _create_display_tab(self): row_forecast_duration.Add(self._controls["forecast_duration_days"], 0) sizer.Add(row_forecast_duration, 0, wx.LEFT | wx.TOP, 10) + # Hourly forecast hours + row_hourly_hours = wx.BoxSizer(wx.HORIZONTAL) + row_hourly_hours.Add( + wx.StaticText(panel, label="Hourly forecast hours:"), + 0, + wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, + 10, + ) + self._controls["hourly_forecast_hours"] = wx.SpinCtrl(panel, min=1, max=168, initial=6) + row_hourly_hours.Add(self._controls["hourly_forecast_hours"], 0) + sizer.Add(row_hourly_hours, 0, wx.LEFT | wx.TOP, 10) + # Time & Date Display Section sizer.Add( wx.StaticText(panel, label="Time & Date Display:"), @@ -320,16 +332,19 @@ def _create_data_sources_tab(self): panel, choices=[ "Automatic (merges all available sources)", - "National Weather Service (US only, with alerts)", - "Open-Meteo (International, no alerts)", - "Visual Crossing (International with alerts, requires API key)", + "National Weather Service (US only, forecast + alerts)", + "Open-Meteo (Global forecast, no alerts, no API key)", + "Visual Crossing (Global forecast, US/Canada/Europe alerts, API key)", + "Pirate Weather (Global forecast + worldwide alerts, API key)", ], ) row1.Add(self._controls["data_source"], 0) + self._controls["data_source"].Bind(wx.EVT_CHOICE, self._on_data_source_changed) sizer.Add(row1, 0, wx.ALL, 5) # Visual Crossing Configuration - sizer.Add( + self._vc_config_sizer = wx.BoxSizer(wx.VERTICAL) + self._vc_config_sizer.Add( wx.StaticText(panel, label="Visual Crossing API Configuration:"), 0, wx.ALL, @@ -338,14 +353,14 @@ def _create_data_sources_tab(self): row_key = wx.BoxSizer(wx.HORIZONTAL) row_key.Add( - wx.StaticText(panel, label="API Key:"), + wx.StaticText(panel, label="Visual Crossing API Key:"), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 10, ) self._controls["vc_key"] = wx.TextCtrl(panel, style=wx.TE_PASSWORD, size=(250, -1)) row_key.Add(self._controls["vc_key"], 1) - sizer.Add(row_key, 0, wx.LEFT | wx.EXPAND, 10) + self._vc_config_sizer.Add(row_key, 0, wx.LEFT | wx.EXPAND, 10) btn_row = wx.BoxSizer(wx.HORIZONTAL) get_key_btn = wx.Button(panel, label="Get Free API Key") @@ -355,47 +370,39 @@ def _create_data_sources_tab(self): validate_btn = wx.Button(panel, label="Validate API Key") validate_btn.Bind(wx.EVT_BUTTON, self._on_validate_vc_api_key) btn_row.Add(validate_btn, 0) - sizer.Add(btn_row, 0, wx.LEFT | wx.TOP | wx.BOTTOM, 10) + self._vc_config_sizer.Add(btn_row, 0, wx.LEFT | wx.TOP | wx.BOTTOM, 10) + sizer.Add(self._vc_config_sizer, 0, wx.EXPAND) - # AVWX Configuration (international aviation weather) - sizer.Add( - wx.StaticText(panel, label="AVWX API Configuration (International Aviation Weather):"), + # Pirate Weather Configuration + self._pw_config_sizer = wx.BoxSizer(wx.VERTICAL) + self._pw_config_sizer.Add( + wx.StaticText(panel, label="Pirate Weather API Configuration:"), 0, wx.ALL, 5, ) - sizer.Add( - wx.StaticText( - panel, - label=( - "AVWX provides TAF/METAR with translations and screen-reader speech strings " - "for non-US airports. Free registration at avwx.rest." - ), - ), - 0, - wx.LEFT | wx.BOTTOM, - 10, - ) - row_avwx_key = wx.BoxSizer(wx.HORIZONTAL) - row_avwx_key.Add( - wx.StaticText(panel, label="AVWX API Key:"), + row_pw_key = wx.BoxSizer(wx.HORIZONTAL) + row_pw_key.Add( + wx.StaticText(panel, label="Pirate Weather API Key:"), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 10, ) - self._controls["avwx_key"] = wx.TextCtrl(panel, style=wx.TE_PASSWORD, size=(250, -1)) - row_avwx_key.Add(self._controls["avwx_key"], 1) - sizer.Add(row_avwx_key, 0, wx.LEFT | wx.EXPAND, 10) - sizer.Add( - wx.StaticText( - panel, - label="Used automatically for international ICAO stations (non-K prefix).", - ), - 0, - wx.LEFT | wx.TOP | wx.BOTTOM, - 10, - ) + self._controls["pw_key"] = wx.TextCtrl(panel, style=wx.TE_PASSWORD, size=(250, -1)) + row_pw_key.Add(self._controls["pw_key"], 1) + self._pw_config_sizer.Add(row_pw_key, 0, wx.LEFT | wx.EXPAND, 10) + + btn_row_pw = wx.BoxSizer(wx.HORIZONTAL) + get_pw_key_btn = wx.Button(panel, label="Get Free API Key") + get_pw_key_btn.Bind(wx.EVT_BUTTON, self._on_get_pw_api_key) + btn_row_pw.Add(get_pw_key_btn, 0, wx.RIGHT, 10) + + validate_pw_btn = wx.Button(panel, label="Validate API Key") + validate_pw_btn.Bind(wx.EVT_BUTTON, self._on_validate_pw_api_key) + btn_row_pw.Add(validate_pw_btn, 0) + self._pw_config_sizer.Add(btn_row_pw, 0, wx.LEFT | wx.TOP | wx.BOTTOM, 10) + sizer.Add(self._pw_config_sizer, 0, wx.EXPAND) # Source Priority (Auto Mode) sizer.Add( @@ -608,6 +615,16 @@ def _create_notifications_tab(self): ) sizer.Add(self._controls["notify_severe_risk_change"], 0, wx.LEFT | wx.BOTTOM, 10) + self._controls["notify_minutely_precipitation_start"] = wx.CheckBox( + panel, label="Notify when precipitation is expected to start soon (Pirate Weather)" + ) + sizer.Add(self._controls["notify_minutely_precipitation_start"], 0, wx.LEFT, 10) + + self._controls["notify_minutely_precipitation_stop"] = wx.CheckBox( + panel, label="Notify when precipitation is expected to stop soon (Pirate Weather)" + ) + sizer.Add(self._controls["notify_minutely_precipitation_stop"], 0, wx.LEFT | wx.BOTTOM, 10) + # Rate Limiting Section sizer.Add( wx.StaticText(panel, label="Rate Limiting:"), @@ -1321,6 +1338,10 @@ def _load_settings(self): forecast_duration_map.get(forecast_duration_days, 2) ) + self._controls["hourly_forecast_hours"].SetValue( + getattr(settings, "hourly_forecast_hours", 6) + ) + forecast_time_reference = getattr(settings, "forecast_time_reference", "location") forecast_time_reference_map = {"location": 0, "user_local": 1} self._controls["forecast_time_reference"].SetSelection( @@ -1348,36 +1369,59 @@ def _load_settings(self): # Data sources tab data_source = getattr(settings, "data_source", "auto") - source_map = {"auto": 0, "nws": 1, "openmeteo": 2, "visualcrossing": 3} + source_map = { + "auto": 0, + "nws": 1, + "openmeteo": 2, + "visualcrossing": 3, + "pirateweather": 4, + } self._controls["data_source"].SetSelection(source_map.get(data_source, 0)) + self._update_api_key_visibility() vc_key = getattr(settings, "visual_crossing_api_key", "") or "" self._controls["vc_key"].SetValue(str(vc_key)) self._original_vc_key = str(vc_key) - - avwx_key = getattr(settings, "avwx_api_key", "") or "" - self._controls["avwx_key"].SetValue(str(avwx_key)) - self._original_avwx_key = str(avwx_key) + pw_key = getattr(settings, "pirate_weather_api_key", "") or "" + self._controls["pw_key"].SetValue(str(pw_key)) + self._original_pw_key = str(pw_key) # Source priority us_priority = getattr( - settings, "source_priority_us", ["nws", "openmeteo", "visualcrossing"] + settings, + "source_priority_us", + ["nws", "openmeteo", "visualcrossing", "pirateweather"], ) us_map = { + # 4-element lists (current format includes pirateweather) + ("nws", "openmeteo", "visualcrossing", "pirateweather"): 0, + ("nws", "visualcrossing", "openmeteo", "pirateweather"): 1, + ("openmeteo", "nws", "visualcrossing", "pirateweather"): 2, + # 3-element lists (legacy configs without pirateweather) ("nws", "openmeteo", "visualcrossing"): 0, ("nws", "visualcrossing", "openmeteo"): 1, ("openmeteo", "nws", "visualcrossing"): 2, } - self._controls["us_priority"].SetSelection(us_map.get(tuple(us_priority[:3]), 0)) + self._controls["us_priority"].SetSelection( + us_map.get(tuple(us_priority), us_map.get(tuple(us_priority[:3]), 0)) + ) intl_priority = getattr( - settings, "source_priority_international", ["openmeteo", "visualcrossing"] + settings, + "source_priority_international", + ["openmeteo", "pirateweather", "visualcrossing"], ) intl_map = { + # 3-element lists (current format includes pirateweather) + ("openmeteo", "pirateweather", "visualcrossing"): 0, + ("visualcrossing", "openmeteo", "pirateweather"): 1, + # 2-element lists (legacy configs without pirateweather) ("openmeteo", "visualcrossing"): 0, ("visualcrossing", "openmeteo"): 1, } - self._controls["intl_priority"].SetSelection(intl_map.get(tuple(intl_priority[:2]), 0)) + self._controls["intl_priority"].SetSelection( + intl_map.get(tuple(intl_priority), intl_map.get(tuple(intl_priority[:2]), 0)) + ) # Open-Meteo model model = getattr(settings, "openmeteo_weather_model", "best_match") @@ -1445,6 +1489,12 @@ def _load_settings(self): self._controls["notify_severe_risk_change"].SetValue( getattr(settings, "notify_severe_risk_change", False) ) + self._controls["notify_minutely_precipitation_start"].SetValue( + getattr(settings, "notify_minutely_precipitation_start", False) + ) + self._controls["notify_minutely_precipitation_stop"].SetValue( + getattr(settings, "notify_minutely_precipitation_stop", False) + ) # Audio tab self._controls["sound_enabled"].SetValue(getattr(settings, "sound_enabled", True)) @@ -1524,7 +1574,7 @@ def _save_settings(self) -> bool: """Save settings from UI controls.""" try: # Map selections back to values - source_values = ["auto", "nws", "openmeteo", "visualcrossing"] + source_values = ["auto", "nws", "openmeteo", "visualcrossing", "pirateweather"] temp_values = ["f", "c", "both"] forecast_duration_values = [3, 5, 7, 10, 14, 15] forecast_time_reference_values = ["location", "user_local"] @@ -1575,6 +1625,7 @@ def _save_settings(self) -> bool: "forecast_duration_days": forecast_duration_values[ self._controls["forecast_duration_days"].GetSelection() ], + "hourly_forecast_hours": self._controls["hourly_forecast_hours"].GetValue(), "forecast_time_reference": forecast_time_reference_values[ self._controls["forecast_time_reference"].GetSelection() ], @@ -1590,15 +1641,15 @@ def _save_settings(self) -> bool: # Data sources "data_source": source_values[self._controls["data_source"].GetSelection()], "visual_crossing_api_key": self._controls["vc_key"].GetValue(), - "avwx_api_key": self._controls["avwx_key"].GetValue(), + "pirate_weather_api_key": self._controls["pw_key"].GetValue(), "source_priority_us": [ - ["nws", "openmeteo", "visualcrossing"], - ["nws", "visualcrossing", "openmeteo"], - ["openmeteo", "nws", "visualcrossing"], + ["nws", "openmeteo", "visualcrossing", "pirateweather"], + ["nws", "visualcrossing", "openmeteo", "pirateweather"], + ["openmeteo", "nws", "visualcrossing", "pirateweather"], ][max(0, self._controls["us_priority"].GetSelection())], "source_priority_international": [ - ["openmeteo", "visualcrossing"], - ["visualcrossing", "openmeteo"], + ["openmeteo", "pirateweather", "visualcrossing"], + ["visualcrossing", "openmeteo", "pirateweather"], ][max(0, self._controls["intl_priority"].GetSelection())], "openmeteo_weather_model": model_values[ self._controls["openmeteo_model"].GetSelection() @@ -1624,6 +1675,12 @@ def _save_settings(self) -> bool: # Event-based notifications "notify_discussion_update": self._controls["notify_discussion_update"].GetValue(), "notify_severe_risk_change": self._controls["notify_severe_risk_change"].GetValue(), + "notify_minutely_precipitation_start": self._controls[ + "notify_minutely_precipitation_start" + ].GetValue(), + "notify_minutely_precipitation_stop": self._controls[ + "notify_minutely_precipitation_stop" + ].GetValue(), # Audio "sound_enabled": self._controls["sound_enabled"].GetValue(), "sound_pack": self._sound_pack_ids[self._controls["sound_pack"].GetSelection()] @@ -1652,16 +1709,16 @@ def _save_settings(self) -> bool: # Source priority us_idx = self._controls["us_priority"].GetSelection() us_priorities = [ - ["nws", "openmeteo", "visualcrossing"], - ["nws", "visualcrossing", "openmeteo"], - ["openmeteo", "nws", "visualcrossing"], + ["nws", "openmeteo", "visualcrossing", "pirateweather"], + ["nws", "visualcrossing", "openmeteo", "pirateweather"], + ["openmeteo", "nws", "visualcrossing", "pirateweather"], ] settings_dict["source_priority_us"] = us_priorities[us_idx if us_idx >= 0 else 0] intl_idx = self._controls["intl_priority"].GetSelection() intl_priorities = [ - ["openmeteo", "visualcrossing"], - ["visualcrossing", "openmeteo"], + ["openmeteo", "pirateweather", "visualcrossing"], + ["visualcrossing", "openmeteo", "pirateweather"], ] settings_dict["source_priority_international"] = intl_priorities[ intl_idx if intl_idx >= 0 else 0 @@ -1672,8 +1729,8 @@ def _save_settings(self) -> bool: # keyring load failed transiently — keep the existing keyring value. for key, orig_attr in ( ("visual_crossing_api_key", "_original_vc_key"), + ("pirate_weather_api_key", "_original_pw_key"), ("openrouter_api_key", "_original_openrouter_key"), - ("avwx_api_key", "_original_avwx_key"), ): if not settings_dict.get(key) and getattr(self, orig_attr, ""): logger.warning( @@ -1709,6 +1766,7 @@ def _setup_accessibility(self): "show_pressure_trend": "Show pressure trend", "detailed_forecast": "Show detailed forecast information", "forecast_duration_days": "Forecast duration", + "hourly_forecast_hours": "Hourly forecast hours", "forecast_time_reference": "Forecast time display", "time_display_mode": "Time zone display", "time_format_12hour": "Use 12-hour time format (e.g., 3:00 PM)", @@ -1717,6 +1775,7 @@ def _setup_accessibility(self): "severe_weather_override": "Automatically prioritize severe weather info", "data_source": "Weather Data Source", "vc_key": "API Key", + "pw_key": "Pirate Weather API Key", "us_priority": "US Locations Priority", "intl_priority": "International Locations Priority", "openmeteo_model": "Open-Meteo Weather Model", @@ -1731,6 +1790,8 @@ def _setup_accessibility(self): "notify_unknown": "Unknown - Uncategorized alerts", "notify_discussion_update": "Notify when Area Forecast Discussion is updated (NWS US only)", "notify_severe_risk_change": "Notify when severe weather risk level changes (Visual Crossing only)", + "notify_minutely_precipitation_start": "Notify when precipitation is expected to start soon (Pirate Weather)", + "notify_minutely_precipitation_stop": "Notify when precipitation is expected to stop soon (Pirate Weather)", "global_cooldown": "Global cooldown (minutes)", "per_alert_cooldown": "Per-alert cooldown (minutes)", "freshness_window": "Alert freshness window (minutes)", @@ -1778,10 +1839,82 @@ def _on_ok(self, event): wx.MessageBox("Failed to save settings.", "Error", wx.OK | wx.ICON_ERROR) # Event handlers for buttons + def _on_data_source_changed(self, event): + """Update API key section visibility when data source changes.""" + self._update_api_key_visibility() + + def _update_api_key_visibility(self): + """Show/hide API key sections based on selected data source.""" + selection = self._controls["data_source"].GetSelection() + # 0=auto, 1=nws, 2=openmeteo, 3=visualcrossing, 4=pirateweather + show_vc = selection in (0, 3) # auto or VC + show_pw = selection in (0, 4) # auto or PW + self._vc_config_sizer.ShowItems(show_vc) + self._pw_config_sizer.ShowItems(show_pw) + # Re-layout the panel + parent = self._controls["data_source"].GetParent() + parent.Layout() + parent.FitInside() + + def _on_get_pw_api_key(self, event): + """Open Pirate Weather signup page.""" + webbrowser.open("https://pirate-weather.apiable.io/signup") + def _on_get_vc_api_key(self, event): """Open Visual Crossing signup page.""" webbrowser.open("https://www.visualcrossing.com/sign-up") + def _on_validate_pw_api_key(self, event): + """Validate Pirate Weather API key.""" + key = self._controls["pw_key"].GetValue() + if not key: + wx.MessageBox("Please enter an API key first.", "Validation", wx.OK | wx.ICON_WARNING) + return + + wx.BeginBusyCursor() + try: + import asyncio + + from ...models import Location + from ...pirate_weather_client import PirateWeatherApiError, PirateWeatherClient + + test_location = Location(name="Test", latitude=40.7128, longitude=-74.0060) + client = PirateWeatherClient(api_key=key) + + async def test_key(): + try: + await client.get_current_conditions(test_location) + return True, None + except PirateWeatherApiError as e: + if e.status_code == 401: + return False, "Invalid API key" + if e.status_code == 429: + return False, "Rate limit exceeded — but key appears valid" + return False, str(e) + except Exception as e: + return False, str(e) + + loop = asyncio.new_event_loop() + try: + valid, error = loop.run_until_complete(test_key()) + finally: + loop.close() + + if valid: + wx.MessageBox( + "Pirate Weather API key is valid!", + "Validation Successful", + wx.OK | wx.ICON_INFORMATION, + ) + else: + wx.MessageBox( + f"Pirate Weather API key validation failed: {error}", + "Validation Failed", + wx.OK | wx.ICON_ERROR, + ) + finally: + wx.EndBusyCursor() + def _on_validate_vc_api_key(self, event): """Validate Visual Crossing API key.""" key = self._controls["vc_key"].GetValue() @@ -2198,7 +2331,12 @@ def _on_open_config_dir(self, event): wx.OK | wx.ICON_ERROR, ) - _PORTABLE_KEY_SETTINGS = ("visual_crossing_api_key", "openrouter_api_key", "avwx_api_key") + _PORTABLE_KEY_SETTINGS = ( + "visual_crossing_api_key", + "pirate_weather_api_key", + "openrouter_api_key", + "avwx_api_key", + ) def _maybe_update_portable_bundle_after_save(self, settings_dict: dict) -> None: """ @@ -2596,7 +2734,7 @@ def _offer_api_key_export_after_copy(self, portable_config_dir: Path) -> None: else: wx.MessageBox( "No API keys found to export. You can add keys in Settings > Data Sources " - "and export later.", + "or Settings > AI and export later.", "No keys to export", wx.OK | wx.ICON_WARNING, ) diff --git a/src/accessiweather/ui/main_window_notification_events.py b/src/accessiweather/ui/main_window_notification_events.py index 101fbdb4..62096e19 100644 --- a/src/accessiweather/ui/main_window_notification_events.py +++ b/src/accessiweather/ui/main_window_notification_events.py @@ -102,18 +102,26 @@ def process_notification_events(window: MainWindow, weather_data) -> None: Checks for: - Area Forecast Discussion (AFD) updates (NWS US only) - Severe weather risk level changes (Visual Crossing only) + - Minutely precipitation start/stop transitions (Pirate Weather) Both are opt-in notifications (disabled by default). """ try: settings = window.app.config_manager.get_settings() - if not settings.notify_discussion_update and not settings.notify_severe_risk_change: + if ( + not settings.notify_discussion_update + and not settings.notify_severe_risk_change + and not settings.notify_minutely_precipitation_start + and not settings.notify_minutely_precipitation_stop + ): logger.debug( - "[events] _process_notification_events: both discuss_update=%s and " - "severe_risk=%s disabled -- skipping", + "[events] _process_notification_events: discussion=%s severe_risk=%s " + "minutely_start=%s minutely_stop=%s disabled -- skipping", settings.notify_discussion_update, settings.notify_severe_risk_change, + settings.notify_minutely_precipitation_start, + settings.notify_minutely_precipitation_stop, ) return diff --git a/src/accessiweather/weather_client.py b/src/accessiweather/weather_client.py index 8b7ce039..8c67ce66 100644 --- a/src/accessiweather/weather_client.py +++ b/src/accessiweather/weather_client.py @@ -9,6 +9,7 @@ weather_client_trends as trends, # noqa: F401 weather_client_visualcrossing as vc_alerts, # noqa: F401 ) +from .pirate_weather_client import PirateWeatherClient # noqa: F401 from .weather_client_base import WeatherClient __all__ = ["WeatherClient"] diff --git a/src/accessiweather/weather_client_base.py b/src/accessiweather/weather_client_base.py index 23c51c99..813b78f6 100644 --- a/src/accessiweather/weather_client_base.py +++ b/src/accessiweather/weather_client_base.py @@ -1,6 +1,9 @@ """Core WeatherClient implementation with enrichment delegation.""" +from __future__ import annotations + import asyncio +import inspect import logging import os from collections.abc import Sequence @@ -32,11 +35,14 @@ Forecast, HourlyForecast, Location, + MinutelyPrecipitationForecast, SourceAttribution, SourceData, WeatherAlerts, WeatherData, ) +from .notifications.minutely_precipitation import parse_pirate_weather_minutely_block +from .pirate_weather_client import PirateWeatherApiError, PirateWeatherClient from .services import EnvironmentalDataClient from .utils.retry import APITimeoutError, retry_with_backoff from .visual_crossing_client import VisualCrossingApiError, VisualCrossingClient @@ -55,6 +61,7 @@ def __init__( user_agent: str = "AccessiWeather/1.0", data_source: str = "auto", visual_crossing_api_key: str = "", + pirate_weather_api_key: str = "", avwx_api_key: str = "", settings: AppSettings | None = None, *, @@ -83,11 +90,13 @@ def __init__( self._cache_purge_pending = True # Store the API key reference for lazy client creation - # Note: visual_crossing_api_key may be a LazySecureStorage object that defers - # keyring access until first use. We avoid checking truthiness here to prevent - # triggering the lazy load during initialization. + # Note: visual_crossing_api_key / pirate_weather_api_key may be LazySecureStorage + # objects that defer keyring access until first use. We avoid checking truthiness + # here to prevent triggering the lazy load during initialization. self._visual_crossing_api_key = visual_crossing_api_key self._visual_crossing_client: VisualCrossingClient | None = None + self._pirate_weather_api_key = pirate_weather_api_key + self._pirate_weather_client: PirateWeatherClient | None = None # AVWX API key for international aviation weather (stored as a plain string or # LazySecureStorage; resolved to str on first access via avwx_api_key property). @@ -145,6 +154,29 @@ def visual_crossing_client(self, value: VisualCrossingClient | None) -> None: """Allow direct assignment for backward compatibility and testing.""" self._visual_crossing_client = value + @property + def pirate_weather_api_key(self) -> str: + """Get the Pirate Weather API key, resolving lazy accessor if needed.""" + key = self._pirate_weather_api_key + if key is None or key == "": + return "" + return str(key) + + @property + def pirate_weather_client(self) -> PirateWeatherClient | None: + """Get the Pirate Weather client, creating it lazily on first access.""" + if self._pirate_weather_client is None: + api_key = self.pirate_weather_api_key + if api_key: + self._pirate_weather_client = PirateWeatherClient(api_key, self.user_agent) + logger.debug("Pirate Weather client created lazily") + return self._pirate_weather_client + + @pirate_weather_client.setter + def pirate_weather_client(self, value: PirateWeatherClient | None) -> None: + """Allow direct assignment for backward compatibility and testing.""" + self._pirate_weather_client = value + @property def avwx_api_key(self) -> str: """Get the AVWX API key, resolving lazy accessor if needed.""" @@ -468,9 +500,18 @@ async def get_notification_event_data(self, location: Location) -> WeatherData: alerts_task = asyncio.create_task(self.visual_crossing_client.get_alerts(location)) weather_data.current = await current_task weather_data.alerts = await alerts_task or WeatherAlerts(alerts=[]) + elif self.pirate_weather_client: + current_task = asyncio.create_task( + self.pirate_weather_client.get_current_conditions(location) + ) + alerts_task = asyncio.create_task(self.pirate_weather_client.get_alerts(location)) + weather_data.current = await current_task + weather_data.alerts = await alerts_task or WeatherAlerts(alerts=[]) else: weather_data.alerts = WeatherAlerts(alerts=[]) + weather_data.minutely_precipitation = await self._get_pirate_weather_minutely(location) + loc_key = self._location_key(location) previous_alerts = self._previous_alerts.get(loc_key) _cancel_refs = await self._fetch_nws_cancel_references() @@ -485,6 +526,34 @@ async def get_notification_event_data(self, location: Location) -> WeatherData: return weather_data + async def _get_pirate_weather_minutely( + self, location: Location + ) -> MinutelyPrecipitationForecast | None: + """Fetch Pirate Weather minutely precipitation when a client is configured.""" + client = getattr(self, "pirate_weather_client", None) + if client is None: + return None + + for method_name in ("get_minutely_forecast", "get_forecast"): + method = getattr(client, method_name, None) + if not callable(method): + continue + try: + result = method(location) + if inspect.isawaitable(result): + result = await result + if isinstance(result, dict): + return parse_pirate_weather_minutely_block(result) + except TypeError: + logger.debug( + "Pirate Weather client method %s has an unsupported signature", method_name + ) + except Exception as exc: + logger.debug("Pirate Weather minutely fetch via %s failed: %s", method_name, exc) + return None + + return None + async def _fetch_weather_data_with_dedup( self, location: Location, force_refresh: bool, skip_notifications: bool = False ) -> WeatherData: @@ -534,13 +603,56 @@ async def _do_fetch_weather_data( "nws": "NWS", "openmeteo": "Open-Meteo", "visualcrossing": "Visual Crossing", + "pirateweather": "Pirate Weather", }.get(api_choice, "NWS") logger.info(f"Using {api_name} API for {location.name} (data_source: {self.data_source})") logger.debug("Creating WeatherData object") weather_data = WeatherData(location=location) - if api_choice == "visualcrossing": + if api_choice == "pirateweather": + # Use Pirate Weather API + try: + if not self.pirate_weather_client: + raise PirateWeatherApiError("Pirate Weather API key not configured") + + # Parallelize API calls for better performance + current, forecast, hourly_forecast, alerts = await asyncio.gather( + self.pirate_weather_client.get_current_conditions(location), + self.pirate_weather_client.get_forecast( + location, + days=self._get_forecast_days_for_source(location, source="pirateweather"), + ), + self.pirate_weather_client.get_hourly_forecast(location), + self.pirate_weather_client.get_alerts(location), + ) + + weather_data.current = current + weather_data.forecast = forecast + weather_data.hourly_forecast = hourly_forecast + weather_data.discussion = "Forecast discussion not available from Pirate Weather." + weather_data.discussion_issuance_time = None + weather_data.alerts = alerts + + # Compute alert lifecycle diff + _pw_loc_key = self._location_key(location) + _pw_prev = self._previous_alerts.get(_pw_loc_key) + weather_data.alert_lifecycle_diff = diff_alerts(_pw_prev, alerts) + if alerts is not None: + self._previous_alerts[_pw_loc_key] = alerts + + # Set source attribution + weather_data.source_attribution = SourceAttribution( + contributing_sources={"pirateweather"}, + ) + + logger.info(f"Successfully fetched Pirate Weather data for {location.name}") + + except PirateWeatherApiError as e: + logger.error(f"Pirate Weather API failed for {location.name}: {e}") + self._set_empty_weather_data(weather_data) + + elif api_choice == "visualcrossing": # Use Visual Crossing API try: if not self.visual_crossing_client: @@ -715,10 +827,14 @@ async def _fetch_smart_auto_source( # Initialize components with user's source priority settings us_priority = getattr( - self.settings, "source_priority_us", ["nws", "openmeteo", "visualcrossing"] + self.settings, + "source_priority_us", + ["nws", "openmeteo", "visualcrossing", "pirateweather"], ) intl_priority = getattr( - self.settings, "source_priority_international", ["openmeteo", "visualcrossing"] + self.settings, + "source_priority_international", + ["openmeteo", "pirateweather", "visualcrossing"], ) config = SourcePriorityConfig(us_default=us_priority, international_default=intl_priority) coordinator = ParallelFetchCoordinator(timeout=5.0) @@ -758,12 +874,26 @@ async def fetch_vc(): alerts = await self.visual_crossing_client.get_alerts(location) return (current, forecast, hourly, alerts) + # Fetch from Pirate Weather if configured + async def fetch_pw(): + if not self.pirate_weather_client: + return (None, None, None, None) + current = await self.pirate_weather_client.get_current_conditions(location) + forecast = await self.pirate_weather_client.get_forecast( + location, + days=self._get_forecast_days_for_source(location, source="pirateweather"), + ) + hourly = await self.pirate_weather_client.get_hourly_forecast(location) + alerts = await self.pirate_weather_client.get_alerts(location) + return (current, forecast, hourly, alerts) + # Fetch from all sources in parallel source_results = await coordinator.fetch_all( location=location, fetch_nws=fetch_nws() if is_us else None, fetch_openmeteo=fetch_openmeteo(), fetch_visualcrossing=fetch_vc() if self.visual_crossing_client else None, + fetch_pirateweather=fetch_pw() if self.pirate_weather_client else None, ) # Check if all sources failed @@ -804,17 +934,22 @@ async def fetch_vc(): # Visual Crossing mirrors NWS alerts but lacks severity/urgency metadata nws_alerts = None vc_alerts_data = None + pw_alerts_data = None for source in source_results: if source.source == "nws" and source.alerts: nws_alerts = source.alerts elif source.source == "visualcrossing" and source.alerts: vc_alerts_data = source.alerts + elif source.source == "pirateweather" and source.alerts: + pw_alerts_data = source.alerts - # For US locations, skip VC alerts to avoid duplicates with missing metadata + # For US locations, skip VC/PW alerts to avoid duplicates with missing metadata if is_us: merged_alerts = alert_aggregator.aggregate_alerts(nws_alerts, None) else: - merged_alerts = alert_aggregator.aggregate_alerts(nws_alerts, vc_alerts_data) + # Use whichever non-NWS source has alerts (PW preferred over VC when both present) + non_nws_alerts = pw_alerts_data or vc_alerts_data + merged_alerts = alert_aggregator.aggregate_alerts(nws_alerts, non_nws_alerts) # Compute alert lifecycle diff (compare against previous fetch for this location) _loc_key = self._location_key(location) @@ -1026,11 +1161,18 @@ async def _await_enrichments( def _determine_api_choice(self, location: Location) -> str: """Determine which API to use for the given location.""" # Validate data source - valid_sources = ["auto", "nws", "openmeteo", "visualcrossing"] + valid_sources = ["auto", "nws", "openmeteo", "visualcrossing", "pirateweather"] if self.data_source not in valid_sources: logger.warning(f"Invalid data source '{self.data_source}', defaulting to 'auto'") self.data_source = "auto" + if self.data_source == "pirateweather": + if not self.pirate_weather_client: + logger.warning( + "Pirate Weather selected but no API key provided, falling back to auto" + ) + return "nws" if self._is_us_location(location) else "openmeteo" + return "pirateweather" if self.data_source == "visualcrossing": # Check if Visual Crossing client is available if not self.visual_crossing_client: @@ -1178,6 +1320,7 @@ def _get_forecast_days_for_source(self, location: Location, source: str) -> int: source_limits = { "openmeteo": 16, "visualcrossing": 15, + "pirateweather": 8, "nws": 7, } return min(configured, source_limits.get(source, 16)) diff --git a/src/accessiweather/weather_client_fusion.py b/src/accessiweather/weather_client_fusion.py index 1cc0e4b3..518fec5f 100644 --- a/src/accessiweather/weather_client_fusion.py +++ b/src/accessiweather/weather_client_fusion.py @@ -233,16 +233,16 @@ def merge_forecasts( return None, field_sources # Select single source based on location (no merging to avoid duplicates) - # US: prefer NWS for 7-day forecasts, Open-Meteo for extended ranges - # International: prefer Open-Meteo > Visual Crossing + # US: prefer NWS for 7-day, Open-Meteo for extended ranges; PW as fallback + # International: prefer Open-Meteo > Pirate Weather > Visual Crossing if is_us: preferred_order = ( - ["openmeteo", "nws", "visualcrossing"] + ["openmeteo", "nws", "visualcrossing", "pirateweather"] if requested_days > 7 - else ["nws", "openmeteo", "visualcrossing"] + else ["nws", "openmeteo", "visualcrossing", "pirateweather"] ) else: - preferred_order = ["openmeteo", "visualcrossing"] + preferred_order = ["openmeteo", "pirateweather", "visualcrossing"] # Find the first available source in preferred order selected_source = None @@ -300,12 +300,12 @@ def merge_hourly_forecasts( return None, field_sources # Select single source based on location (no merging for hourly data) - # US: prefer NWS > Open-Meteo > Visual Crossing - # International: prefer Open-Meteo > Visual Crossing + # US: prefer NWS > Open-Meteo > Visual Crossing > Pirate Weather + # International: prefer Open-Meteo > Pirate Weather > Visual Crossing if is_us: - preferred_order = ["nws", "openmeteo", "visualcrossing"] + preferred_order = ["nws", "openmeteo", "visualcrossing", "pirateweather"] else: - preferred_order = ["openmeteo", "visualcrossing"] + preferred_order = ["openmeteo", "pirateweather", "visualcrossing"] # Find the first available source in preferred order selected_source = None diff --git a/src/accessiweather/weather_client_parallel.py b/src/accessiweather/weather_client_parallel.py index 539f5d52..9d26d7b1 100644 --- a/src/accessiweather/weather_client_parallel.py +++ b/src/accessiweather/weather_client_parallel.py @@ -72,6 +72,17 @@ async def fetch_all( ], ] | None = None, + fetch_pirateweather: Coroutine[ + Any, + Any, + tuple[ + CurrentConditions | None, + Forecast | None, + HourlyForecast | None, + WeatherAlerts | None, + ], + ] + | None = None, ) -> list[SourceData]: """ Fetch from all available sources in parallel. @@ -81,6 +92,7 @@ async def fetch_all( fetch_nws: Coroutine to fetch NWS data (optional) fetch_openmeteo: Coroutine to fetch Open-Meteo data (optional) fetch_visualcrossing: Coroutine to fetch Visual Crossing data (optional) + fetch_pirateweather: Coroutine to fetch Pirate Weather data (optional) Returns: List of SourceData objects from all sources @@ -104,6 +116,12 @@ async def fetch_all( ) tasks.append(("visualcrossing", task)) + if fetch_pirateweather is not None: + task = asyncio.create_task( + self._fetch_with_timeout(fetch_pirateweather, "pirateweather") + ) + tasks.append(("pirateweather", task)) + if not tasks: return results diff --git a/tests/integration/cassettes/pirate_weather/alerts_nyc.yaml b/tests/integration/cassettes/pirate_weather/alerts_nyc.yaml new file mode 100644 index 00000000..2d4c3149 --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/alerts_nyc.yaml @@ -0,0 +1,238 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/40.7128,-74.006?extend=hourly&units=us + response: + body: + string: "{\"latitude\":40.7128,\"longitude\":-74.006,\"timezone\":\"America/New_York\",\"offset\":-4.0,\"elevation\":62,\"currently\":{\"time\":1773877680,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"nearestStormDistance\":356.19,\"nearestStormBearing\":35,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\",\"temperature\":32.88,\"apparentTemperature\":21.34,\"dewPoint\":16.48,\"humidity\":0.5,\"pressure\":1028.29,\"windSpeed\":10.46,\"windGust\":13.69,\"windBearing\":141,\"cloudCover\":0.0,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":401.24},\"minutely\":{\"summary\":\"Clear + for the hour.\",\"icon\":\"clear-night\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878340,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878400,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878460,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878520,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878580,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878640,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878700,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878760,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878820,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878880,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878940,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879000,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879060,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879120,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879240,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879300,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879360,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879420,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879480,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879540,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879600,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879660,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879720,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879780,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879840,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879900,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879960,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880020,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880080,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880140,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880200,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880260,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880320,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880380,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880440,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880500,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880560,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880620,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"}]},\"hourly\":{\"summary\":\"Partly + cloudy starting tomorrow morning.\",\"icon\":\"partly-cloudy-day\",\"data\":[{\"time\":1773874800,\"summary\":\"Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.62,\"apparentTemperature\":28.36,\"dewPoint\":13.44,\"humidity\":0.4,\"pressure\":1028.7,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":160,\"cloudCover\":0.04,\"uvIndex\":0.28,\"visibility\":10.0,\"ozone\":404.2,\"nearestStormDistance\":351.03,\"nearestStormBearing\":33},{\"time\":1773878400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.49,\"apparentTemperature\":28.15,\"dewPoint\":15.98,\"humidity\":0.44,\"pressure\":1028.19,\"windSpeed\":8.94,\"windGust\":10.95,\"windBearing\":150,\"cloudCover\":0.05,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.5,\"nearestStormDistance\":357.48,\"nearestStormBearing\":35},{\"time\":1773882000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.97,\"apparentTemperature\":28.81,\"dewPoint\":18.12,\"humidity\":0.49,\"pressure\":1029.01,\"windSpeed\":8.04,\"windGust\":10.05,\"windBearing\":150,\"cloudCover\":0.03,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":397.01,\"nearestStormDistance\":227.41,\"nearestStormBearing\":259},{\"time\":1773885600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.15,\"apparentTemperature\":28.8,\"dewPoint\":18.86,\"humidity\":0.51,\"pressure\":1029.03,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.06,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.34,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773889200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.83,\"apparentTemperature\":29.39,\"dewPoint\":19.08,\"humidity\":0.52,\"pressure\":1028.92,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.0,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773892800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.4,\"apparentTemperature\":29.71,\"dewPoint\":19.92,\"humidity\":0.54,\"pressure\":1028.24,\"windSpeed\":6.26,\"windGust\":8.04,\"windBearing\":150,\"cloudCover\":0.21,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.58,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773896400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.93,\"apparentTemperature\":30.0,\"dewPoint\":20.34,\"humidity\":0.55,\"pressure\":1027.83,\"windSpeed\":5.36,\"windGust\":8.04,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":392.93,\"nearestStormDistance\":240.11,\"nearestStormBearing\":260},{\"time\":1773900000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.01,\"apparentTemperature\":30.54,\"dewPoint\":21.34,\"humidity\":0.56,\"pressure\":1027.3,\"windSpeed\":5.36,\"windGust\":7.15,\"windBearing\":150,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.63,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773903600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.49,\"dewPoint\":22.14,\"humidity\":0.59,\"pressure\":1026.66,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.34,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.17,\"nearestStormDistance\":250.34,\"nearestStormBearing\":263},{\"time\":1773907200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.7,\"dewPoint\":22.5,\"humidity\":0.61,\"pressure\":1026.74,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.75,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773910800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.03,\"apparentTemperature\":31.01,\"dewPoint\":22.78,\"humidity\":0.61,\"pressure\":1026.25,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":140,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.66,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773914400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.18,\"apparentTemperature\":30.96,\"dewPoint\":22.62,\"humidity\":0.62,\"pressure\":1025.95,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":120,\"cloudCover\":0.53,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.2,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773918000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.92,\"apparentTemperature\":30.83,\"dewPoint\":23.05,\"humidity\":0.63,\"pressure\":1026.14,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":110,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.27,\"nearestStormDistance\":224.52,\"nearestStormBearing\":263},{\"time\":1773921600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.44,\"apparentTemperature\":31.32,\"dewPoint\":23.81,\"humidity\":0.62,\"pressure\":1026.84,\"windSpeed\":4.47,\"windGust\":6.48,\"windBearing\":110,\"cloudCover\":0.58,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":394.1,\"nearestStormDistance\":249.01,\"nearestStormBearing\":266},{\"time\":1773925200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":36.37,\"apparentTemperature\":32.29,\"dewPoint\":23.81,\"humidity\":0.6,\"pressure\":1026.81,\"windSpeed\":5.36,\"windGust\":6.7,\"windBearing\":130,\"cloudCover\":0.52,\"uvIndex\":1.08,\"visibility\":10.0,\"ozone\":396.41,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1773928800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.47,\"apparentTemperature\":32.23,\"dewPoint\":23.0,\"humidity\":0.56,\"pressure\":1026.22,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":160,\"cloudCover\":0.48,\"uvIndex\":2.14,\"visibility\":10.0,\"ozone\":396.14,\"nearestStormDistance\":180.4,\"nearestStormBearing\":201},{\"time\":1773932400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":38.7,\"apparentTemperature\":33.15,\"dewPoint\":22.05,\"humidity\":0.51,\"pressure\":1025.6,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.49,\"uvIndex\":3.44,\"visibility\":10.0,\"ozone\":398.5,\"nearestStormDistance\":165.94,\"nearestStormBearing\":239},{\"time\":1773936000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.2,\"apparentTemperature\":33.82,\"dewPoint\":21.4,\"humidity\":0.49,\"pressure\":1024.88,\"windSpeed\":8.04,\"windGust\":11.39,\"windBearing\":170,\"cloudCover\":0.52,\"uvIndex\":4.78,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":151.12,\"nearestStormBearing\":225},{\"time\":1773939600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.26,\"apparentTemperature\":34.25,\"dewPoint\":22.05,\"humidity\":0.48,\"pressure\":1024.24,\"windSpeed\":8.94,\"windGust\":13.18,\"windBearing\":170,\"cloudCover\":0.51,\"uvIndex\":5.06,\"visibility\":10.0,\"ozone\":405.51,\"nearestStormDistance\":146.62,\"nearestStormBearing\":233},{\"time\":1773943200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.45,\"apparentTemperature\":34.84,\"dewPoint\":22.82,\"humidity\":0.47,\"pressure\":1023.43,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":5.42,\"visibility\":10.0,\"ozone\":404.17,\"nearestStormDistance\":145.3,\"nearestStormBearing\":240},{\"time\":1773946800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.19,\"apparentTemperature\":35.74,\"dewPoint\":23.4,\"humidity\":0.47,\"pressure\":1023.23,\"windSpeed\":10.72,\"windGust\":14.74,\"windBearing\":170,\"cloudCover\":0.39,\"uvIndex\":4.9,\"visibility\":10.0,\"ozone\":399.76,\"nearestStormDistance\":124.91,\"nearestStormBearing\":243},{\"time\":1773950400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.46,\"apparentTemperature\":36.07,\"dewPoint\":24.39,\"humidity\":0.48,\"pressure\":1023.08,\"windSpeed\":11.62,\"windGust\":14.97,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":3.89,\"visibility\":10.0,\"ozone\":398.15,\"nearestStormDistance\":129.62,\"nearestStormBearing\":225},{\"time\":1773954000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.73,\"apparentTemperature\":36.01,\"dewPoint\":24.93,\"humidity\":0.49,\"pressure\":1022.57,\"windSpeed\":11.62,\"windGust\":15.86,\"windBearing\":160,\"cloudCover\":0.4,\"uvIndex\":2.57,\"visibility\":10.0,\"ozone\":397.86,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1773957600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.23,\"apparentTemperature\":36.99,\"dewPoint\":25.27,\"humidity\":0.5,\"pressure\":1022.38,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":160,\"cloudCover\":0.45,\"uvIndex\":1.25,\"visibility\":10.0,\"ozone\":398.76,\"nearestStormDistance\":93.81,\"nearestStormBearing\":243},{\"time\":1773961200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.05,\"apparentTemperature\":37.56,\"dewPoint\":26.82,\"humidity\":0.52,\"pressure\":1022.34,\"windSpeed\":9.83,\"windGust\":12.73,\"windBearing\":160,\"cloudCover\":0.39,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":401.36,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1773964800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.14,\"apparentTemperature\":37.63,\"dewPoint\":28.24,\"humidity\":0.55,\"pressure\":1022.62,\"windSpeed\":8.94,\"windGust\":11.62,\"windBearing\":160,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.26,\"nearestStormDistance\":90.27,\"nearestStormBearing\":201},{\"time\":1773968400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":37.85,\"dewPoint\":29.77,\"humidity\":0.59,\"pressure\":1022.45,\"windSpeed\":8.04,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":143.65,\"nearestStormBearing\":159},{\"time\":1773972000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.93,\"apparentTemperature\":38.41,\"dewPoint\":29.93,\"humidity\":0.6,\"pressure\":1021.95,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":180,\"cloudCover\":0.36,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.62,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773975600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.84,\"apparentTemperature\":38.93,\"dewPoint\":30.92,\"humidity\":0.61,\"pressure\":1022.17,\"windSpeed\":7.15,\"windGust\":9.38,\"windBearing\":190,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.73,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773979200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.11,\"apparentTemperature\":39.09,\"dewPoint\":31.23,\"humidity\":0.63,\"pressure\":1022.29,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":200,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":405.77,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1773982800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":39.15,\"dewPoint\":31.35,\"humidity\":0.64,\"pressure\":1021.96,\"windSpeed\":6.26,\"windGust\":8.27,\"windBearing\":220,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.51,\"nearestStormDistance\":252.47,\"nearestStormBearing\":145},{\"time\":1773986400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.17,\"apparentTemperature\":39.18,\"dewPoint\":31.48,\"humidity\":0.64,\"pressure\":1021.54,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":230,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":403.63,\"nearestStormDistance\":283.51,\"nearestStormBearing\":149},{\"time\":1773990000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.0,\"apparentTemperature\":38.94,\"dewPoint\":31.72,\"humidity\":0.65,\"pressure\":1021.22,\"windSpeed\":5.96,\"windGust\":8.19,\"windBearing\":235,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.56,\"nearestStormDistance\":335.93,\"nearestStormBearing\":150},{\"time\":1773993600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.84,\"apparentTemperature\":38.69,\"dewPoint\":31.96,\"humidity\":0.66,\"pressure\":1021.39,\"windSpeed\":5.66,\"windGust\":7.89,\"windBearing\":240,\"cloudCover\":0.48,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.77,\"nearestStormDistance\":267.07,\"nearestStormBearing\":161},{\"time\":1773997200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.68,\"apparentTemperature\":38.44,\"dewPoint\":32.2,\"humidity\":0.68,\"pressure\":1021.25,\"windSpeed\":5.36,\"windGust\":7.6,\"windBearing\":245,\"cloudCover\":0.44,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":388.23,\"nearestStormBearing\":33},{\"time\":1774000800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.51,\"apparentTemperature\":38.2,\"dewPoint\":32.44,\"humidity\":0.69,\"pressure\":1021.74,\"windSpeed\":5.06,\"windGust\":7.3,\"windBearing\":250,\"cloudCover\":0.41,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.47,\"nearestStormDistance\":368.02,\"nearestStormBearing\":206},{\"time\":1774004400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.35,\"apparentTemperature\":37.95,\"dewPoint\":32.68,\"humidity\":0.7,\"pressure\":1021.6,\"windSpeed\":4.77,\"windGust\":7.0,\"windBearing\":255,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.13,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774008000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.18,\"apparentTemperature\":37.71,\"dewPoint\":32.92,\"humidity\":0.71,\"pressure\":1021.73,\"windSpeed\":4.47,\"windGust\":6.7,\"windBearing\":260,\"cloudCover\":0.35,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":397.97,\"nearestStormDistance\":421.2,\"nearestStormBearing\":218},{\"time\":1774011600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.57,\"apparentTemperature\":39.55,\"dewPoint\":32.76,\"humidity\":0.69,\"pressure\":1021.52,\"windSpeed\":5.55,\"windGust\":7.6,\"windBearing\":248,\"cloudCover\":0.39,\"uvIndex\":1.13,\"visibility\":10.0,\"ozone\":395.53,\"nearestStormDistance\":367.17,\"nearestStormBearing\":214},{\"time\":1774015200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":43.95,\"apparentTemperature\":41.39,\"dewPoint\":32.59,\"humidity\":0.66,\"pressure\":1020.51,\"windSpeed\":6.64,\"windGust\":8.49,\"windBearing\":236,\"cloudCover\":0.44,\"uvIndex\":2.44,\"visibility\":10.0,\"ozone\":395.04,\"nearestStormDistance\":299.32,\"nearestStormBearing\":209},{\"time\":1774018800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.34,\"apparentTemperature\":43.23,\"dewPoint\":32.43,\"humidity\":0.64,\"pressure\":1020.97,\"windSpeed\":7.72,\"windGust\":9.38,\"windBearing\":224,\"cloudCover\":0.48,\"uvIndex\":3.72,\"visibility\":10.0,\"ozone\":394.63,\"nearestStormDistance\":270.38,\"nearestStormBearing\":201},{\"time\":1774022400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.73,\"apparentTemperature\":45.08,\"dewPoint\":33.12,\"humidity\":0.61,\"pressure\":1020.41,\"windSpeed\":8.81,\"windGust\":11.47,\"windBearing\":212,\"cloudCover\":0.53,\"uvIndex\":4.44,\"visibility\":10.0,\"ozone\":395.99,\"nearestStormDistance\":243.43,\"nearestStormBearing\":188},{\"time\":1774026000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.11,\"apparentTemperature\":46.92,\"dewPoint\":33.8,\"humidity\":0.59,\"pressure\":1019.22,\"windSpeed\":9.89,\"windGust\":13.55,\"windBearing\":200,\"cloudCover\":0.57,\"uvIndex\":4.4,\"visibility\":10.0,\"ozone\":396.23,\"nearestStormDistance\":242.1,\"nearestStormBearing\":180},{\"time\":1774029600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.5,\"apparentTemperature\":48.76,\"dewPoint\":34.48,\"humidity\":0.56,\"pressure\":1017.07,\"windSpeed\":10.98,\"windGust\":15.64,\"windBearing\":189,\"cloudCover\":0.62,\"uvIndex\":5.15,\"visibility\":10.0,\"ozone\":395.58,\"nearestStormDistance\":222.48,\"nearestStormBearing\":219},{\"time\":1774033200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.89,\"apparentTemperature\":50.61,\"dewPoint\":34.78,\"humidity\":0.54,\"pressure\":1017.31,\"windSpeed\":12.06,\"windGust\":17.13,\"windBearing\":177,\"cloudCover\":0.66,\"uvIndex\":4.74,\"visibility\":10.0,\"ozone\":396.7,\"nearestStormDistance\":152.64,\"nearestStormBearing\":212},{\"time\":1774036800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.45,\"apparentTemperature\":51.14,\"dewPoint\":35.07,\"humidity\":0.54,\"pressure\":1016.48,\"windSpeed\":13.4,\"windGust\":18.62,\"windBearing\":173,\"cloudCover\":0.71,\"uvIndex\":3.84,\"visibility\":10.0,\"ozone\":399.67,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774040400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.02,\"apparentTemperature\":51.67,\"dewPoint\":35.37,\"humidity\":0.54,\"pressure\":1015.65,\"windSpeed\":14.74,\"windGust\":20.11,\"windBearing\":170,\"cloudCover\":0.75,\"uvIndex\":2.41,\"visibility\":10.0,\"ozone\":398.36,\"nearestStormDistance\":155.63,\"nearestStormBearing\":180},{\"time\":1774044000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.89,\"apparentTemperature\":51.63,\"dewPoint\":36.12,\"humidity\":0.55,\"pressure\":1015.28,\"windSpeed\":14.89,\"windGust\":19.96,\"windBearing\":173,\"cloudCover\":0.79,\"uvIndex\":1.18,\"visibility\":10.0,\"ozone\":397.25,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774047600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.76,\"apparentTemperature\":51.58,\"dewPoint\":36.87,\"humidity\":0.57,\"pressure\":1014.9,\"windSpeed\":15.04,\"windGust\":19.81,\"windBearing\":177,\"cloudCover\":0.84,\"uvIndex\":0.26,\"visibility\":10.0,\"ozone\":396.55,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774051200,\"summary\":\"Breezy + and Overcast\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.64,\"apparentTemperature\":51.53,\"dewPoint\":37.62,\"humidity\":0.58,\"pressure\":1014.53,\"windSpeed\":15.19,\"windGust\":19.66,\"windBearing\":180,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.51,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774054800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.005,\"precipProbability\":0.23,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.005,\"precipType\":\"rain\",\"temperature\":51.51,\"apparentTemperature\":51.42,\"dewPoint\":38.17,\"humidity\":0.6,\"pressure\":1014.45,\"windSpeed\":14.89,\"windGust\":19.14,\"windBearing\":183,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.14,\"nearestStormDistance\":70.38,\"nearestStormBearing\":194},{\"time\":1774058400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.36,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.39,\"apparentTemperature\":51.31,\"dewPoint\":38.72,\"humidity\":0.61,\"pressure\":1014.37,\"windSpeed\":14.6,\"windGust\":18.62,\"windBearing\":187,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.49,\"nearestStormDistance\":52.24,\"nearestStormBearing\":236},{\"time\":1774062000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":51.26,\"apparentTemperature\":51.21,\"dewPoint\":39.27,\"humidity\":0.63,\"pressure\":1014.29,\"windSpeed\":14.3,\"windGust\":18.1,\"windBearing\":190,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.47,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774065600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.85,\"apparentTemperature\":50.86,\"dewPoint\":40.07,\"humidity\":0.66,\"pressure\":1013.54,\"windSpeed\":13.7,\"windGust\":17.72,\"windBearing\":193,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":8.37,\"ozone\":387.75,\"nearestStormDistance\":21.68,\"nearestStormBearing\":135},{\"time\":1774069200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.43,\"apparentTemperature\":50.51,\"dewPoint\":40.87,\"humidity\":0.68,\"pressure\":1012.8,\"windSpeed\":13.11,\"windGust\":17.35,\"windBearing\":197,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":6.66,\"ozone\":386.72,\"nearestStormDistance\":13.1,\"nearestStormBearing\":270},{\"time\":1774072800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.02,\"apparentTemperature\":50.16,\"dewPoint\":41.67,\"humidity\":0.71,\"pressure\":1012.06,\"windSpeed\":12.51,\"windGust\":16.98,\"windBearing\":200,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":4.95,\"ozone\":385.37,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774076400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0178,\"precipProbability\":0.49,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0178,\"precipType\":\"rain\",\"temperature\":49.72,\"apparentTemperature\":48.34,\"dewPoint\":41.97,\"humidity\":0.73,\"pressure\":1011.54,\"windSpeed\":11.91,\"windGust\":16.31,\"windBearing\":200,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":3.78,\"ozone\":383.4,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774080000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0206,\"precipProbability\":0.48,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0206,\"precipType\":\"rain\",\"temperature\":49.42,\"apparentTemperature\":46.51,\"dewPoint\":42.27,\"humidity\":0.76,\"pressure\":1011.01,\"windSpeed\":11.32,\"windGust\":15.64,\"windBearing\":200,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":2.6,\"ozone\":384.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774083600,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.12,\"apparentTemperature\":44.69,\"dewPoint\":42.57,\"humidity\":0.78,\"pressure\":1010.48,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":200,\"cloudCover\":0.75,\"uvIndex\":0.0,\"visibility\":1.43,\"ozone\":385.86,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774087200,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.02,\"apparentTemperature\":44.7,\"dewPoint\":42.77,\"humidity\":0.78,\"pressure\":1010.63,\"windSpeed\":10.43,\"windGust\":14.6,\"windBearing\":213,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":1.64,\"ozone\":388.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774090800,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.93,\"apparentTemperature\":44.7,\"dewPoint\":42.97,\"humidity\":0.79,\"pressure\":1010.77,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":227,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":1.86,\"ozone\":391.55,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774094400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.83,\"apparentTemperature\":44.71,\"dewPoint\":43.18,\"humidity\":0.79,\"pressure\":1010.92,\"windSpeed\":9.83,\"windGust\":13.85,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":0.02,\"visibility\":2.07,\"ozone\":393.68,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774098000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0161,\"precipProbability\":0.36,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0161,\"precipType\":\"rain\",\"temperature\":49.53,\"apparentTemperature\":46.62,\"dewPoint\":42.64,\"humidity\":0.76,\"pressure\":1010.95,\"windSpeed\":10.13,\"windGust\":14.45,\"windBearing\":263,\"cloudCover\":0.63,\"uvIndex\":0.24,\"visibility\":4.32,\"ozone\":397.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774101600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0089,\"precipProbability\":0.25,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0089,\"precipType\":\"rain\",\"temperature\":50.23,\"apparentTemperature\":48.54,\"dewPoint\":42.11,\"humidity\":0.74,\"pressure\":1010.98,\"windSpeed\":10.43,\"windGust\":15.04,\"windBearing\":287,\"cloudCover\":0.56,\"uvIndex\":0.42,\"visibility\":6.57,\"ozone\":397.24,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774105200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":50.94,\"apparentTemperature\":50.45,\"dewPoint\":41.58,\"humidity\":0.71,\"pressure\":1011.01,\"windSpeed\":10.72,\"windGust\":15.64,\"windBearing\":310,\"cloudCover\":0.5,\"uvIndex\":0.63,\"visibility\":8.83,\"ozone\":395.11,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774108800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":52.2,\"apparentTemperature\":52.06,\"dewPoint\":41.38,\"humidity\":0.67,\"pressure\":1010.65,\"windSpeed\":11.02,\"windGust\":16.31,\"windBearing\":313,\"cloudCover\":0.52,\"uvIndex\":1.47,\"visibility\":9.25,\"ozone\":393.52,\"nearestStormDistance\":21.71,\"nearestStormBearing\":45},{\"time\":1774112400,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":53.46,\"apparentTemperature\":53.67,\"dewPoint\":41.18,\"humidity\":0.63,\"pressure\":1010.29,\"windSpeed\":11.32,\"windGust\":16.98,\"windBearing\":317,\"cloudCover\":0.53,\"uvIndex\":2.39,\"visibility\":9.68,\"ozone\":392.9,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774116000,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":54.72,\"apparentTemperature\":55.27,\"dewPoint\":40.98,\"humidity\":0.59,\"pressure\":1009.93,\"windSpeed\":11.62,\"windGust\":17.65,\"windBearing\":320,\"cloudCover\":0.55,\"uvIndex\":2.96,\"visibility\":10.0,\"ozone\":389.31,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774119600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0011,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0011,\"precipType\":\"rain\",\"temperature\":55.35,\"apparentTemperature\":55.87,\"dewPoint\":40.52,\"humidity\":0.57,\"pressure\":1009.52,\"windSpeed\":11.91,\"windGust\":17.8,\"windBearing\":317,\"cloudCover\":0.54,\"uvIndex\":3.98,\"visibility\":10.0,\"ozone\":381.62,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774123200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0006,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0006,\"precipType\":\"rain\",\"temperature\":55.99,\"apparentTemperature\":56.47,\"dewPoint\":40.06,\"humidity\":0.55,\"pressure\":1009.1,\"windSpeed\":12.21,\"windGust\":17.95,\"windBearing\":313,\"cloudCover\":0.54,\"uvIndex\":3.39,\"visibility\":10.0,\"ozone\":376.35,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774126800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":56.62,\"apparentTemperature\":57.07,\"dewPoint\":39.6,\"humidity\":0.53,\"pressure\":1008.68,\"windSpeed\":12.51,\"windGust\":18.1,\"windBearing\":310,\"cloudCover\":0.53,\"uvIndex\":1.41,\"visibility\":10.0,\"ozone\":370.1,\"nearestStormDistance\":62.95,\"nearestStormBearing\":63},{\"time\":1774130400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.78,\"apparentTemperature\":56.1,\"dewPoint\":39.3,\"humidity\":0.54,\"pressure\":1009.0,\"windSpeed\":12.21,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.52,\"uvIndex\":0.54,\"visibility\":10.0,\"ozone\":364.83,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774134000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.93,\"apparentTemperature\":55.12,\"dewPoint\":39.01,\"humidity\":0.55,\"pressure\":1009.32,\"windSpeed\":11.91,\"windGust\":16.46,\"windBearing\":297,\"cloudCover\":0.51,\"uvIndex\":0.22,\"visibility\":10.0,\"ozone\":363.13,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774137600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.09,\"apparentTemperature\":54.14,\"dewPoint\":38.71,\"humidity\":0.56,\"pressure\":1009.64,\"windSpeed\":11.62,\"windGust\":15.64,\"windBearing\":290,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":359.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774141200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.09,\"apparentTemperature\":53.19,\"dewPoint\":39.06,\"humidity\":0.59,\"pressure\":1009.55,\"windSpeed\":11.02,\"windGust\":14.6,\"windBearing\":253,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":356.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774144800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.09,\"apparentTemperature\":52.23,\"dewPoint\":39.41,\"humidity\":0.62,\"pressure\":1009.46,\"windSpeed\":10.43,\"windGust\":13.55,\"windBearing\":217,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":354.23,\"nearestStormDistance\":168.25,\"nearestStormBearing\":59},{\"time\":1774148400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.1,\"apparentTemperature\":51.28,\"dewPoint\":39.76,\"humidity\":0.65,\"pressure\":1009.36,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":180,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.08,\"nearestStormDistance\":226.79,\"nearestStormBearing\":47},{\"time\":1774152000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.38,\"apparentTemperature\":49.3,\"dewPoint\":39.79,\"humidity\":0.66,\"pressure\":1008.94,\"windSpeed\":9.53,\"windGust\":12.29,\"windBearing\":193,\"cloudCover\":0.68,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":349.54,\"nearestStormDistance\":253.21,\"nearestStormBearing\":59},{\"time\":1774155600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.66,\"apparentTemperature\":47.33,\"dewPoint\":39.83,\"humidity\":0.68,\"pressure\":1008.52,\"windSpeed\":9.23,\"windGust\":12.06,\"windBearing\":207,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.8,\"nearestStormDistance\":264.46,\"nearestStormBearing\":56},{\"time\":1774159200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.94,\"apparentTemperature\":45.36,\"dewPoint\":39.87,\"humidity\":0.69,\"pressure\":1008.1,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":220,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":345.5,\"nearestStormDistance\":245.1,\"nearestStormBearing\":192},{\"time\":1774162800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.07,\"apparentTemperature\":45.39,\"dewPoint\":40.41,\"humidity\":0.71,\"pressure\":1007.39,\"windSpeed\":8.94,\"windGust\":12.14,\"windBearing\":227,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":342.51,\"nearestStormDistance\":278.62,\"nearestStormBearing\":208},{\"time\":1774166400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.2,\"apparentTemperature\":45.42,\"dewPoint\":40.96,\"humidity\":0.73,\"pressure\":1006.69,\"windSpeed\":8.94,\"windGust\":12.44,\"windBearing\":233,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":338.56,\"nearestStormDistance\":258.01,\"nearestStormBearing\":206},{\"time\":1774170000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.33,\"apparentTemperature\":45.45,\"dewPoint\":41.5,\"humidity\":0.75,\"pressure\":1005.98,\"windSpeed\":8.94,\"windGust\":12.73,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":334.91,\"nearestStormDistance\":215.43,\"nearestStormBearing\":225},{\"time\":1774173600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.3,\"apparentTemperature\":45.42,\"dewPoint\":41.71,\"humidity\":0.75,\"pressure\":1005.95,\"windSpeed\":9.23,\"windGust\":12.66,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.76,\"nearestStormDistance\":189.33,\"nearestStormBearing\":210},{\"time\":1774177200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.27,\"apparentTemperature\":45.4,\"dewPoint\":41.92,\"humidity\":0.75,\"pressure\":1005.91,\"windSpeed\":9.53,\"windGust\":12.58,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.24,\"nearestStormDistance\":177.17,\"nearestStormBearing\":196},{\"time\":1774180800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.24,\"apparentTemperature\":45.37,\"dewPoint\":42.13,\"humidity\":0.75,\"pressure\":1005.87,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":330.76,\"nearestStormDistance\":160.35,\"nearestStormBearing\":198},{\"time\":1774184400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.6,\"apparentTemperature\":47.97,\"dewPoint\":41.78,\"humidity\":0.71,\"pressure\":1005.69,\"windSpeed\":10.43,\"windGust\":13.78,\"windBearing\":240,\"cloudCover\":0.73,\"uvIndex\":1.05,\"visibility\":10.0,\"ozone\":328.48,\"nearestStormDistance\":194.91,\"nearestStormBearing\":214},{\"time\":1774188000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.96,\"apparentTemperature\":50.57,\"dewPoint\":41.43,\"humidity\":0.68,\"pressure\":1005.51,\"windSpeed\":11.02,\"windGust\":15.04,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":2.17,\"visibility\":10.0,\"ozone\":328.87,\"nearestStormDistance\":209.08,\"nearestStormBearing\":189},{\"time\":1774191600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.31,\"apparentTemperature\":53.17,\"dewPoint\":41.07,\"humidity\":0.64,\"pressure\":1005.33,\"windSpeed\":11.62,\"windGust\":16.31,\"windBearing\":240,\"cloudCover\":0.64,\"uvIndex\":3.41,\"visibility\":10.0,\"ozone\":328.31,\"nearestStormDistance\":246.92,\"nearestStormBearing\":148},{\"time\":1774195200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.26,\"apparentTemperature\":55.17,\"dewPoint\":41.19,\"humidity\":0.6,\"pressure\":1005.07,\"windSpeed\":12.21,\"windGust\":17.57,\"windBearing\":243,\"cloudCover\":0.65,\"uvIndex\":4.25,\"visibility\":10.0,\"ozone\":325.51,\"nearestStormDistance\":179.84,\"nearestStormBearing\":217},{\"time\":1774198800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.2,\"apparentTemperature\":57.16,\"dewPoint\":41.31,\"humidity\":0.57,\"pressure\":1004.81,\"windSpeed\":12.81,\"windGust\":18.84,\"windBearing\":247,\"cloudCover\":0.66,\"uvIndex\":4.83,\"visibility\":10.0,\"ozone\":324.7,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774202400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.14,\"apparentTemperature\":59.16,\"dewPoint\":41.43,\"humidity\":0.53,\"pressure\":1004.55,\"windSpeed\":13.4,\"windGust\":20.11,\"windBearing\":250,\"cloudCover\":0.67,\"uvIndex\":5.55,\"visibility\":10.0,\"ozone\":324.95,\"nearestStormDistance\":227.48,\"nearestStormBearing\":119},{\"time\":1774206000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.39,\"apparentTemperature\":59.37,\"dewPoint\":41.45,\"humidity\":0.52,\"pressure\":1005.49,\"windSpeed\":13.93,\"windGust\":20.4,\"windBearing\":260,\"cloudCover\":0.69,\"uvIndex\":4.84,\"visibility\":10.0,\"ozone\":321.6,\"nearestStormDistance\":176.23,\"nearestStormBearing\":241},{\"time\":1774209600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.64,\"apparentTemperature\":59.57,\"dewPoint\":41.47,\"humidity\":0.51,\"pressure\":1006.43,\"windSpeed\":14.45,\"windGust\":20.7,\"windBearing\":270,\"cloudCover\":0.72,\"uvIndex\":3.74,\"visibility\":10.0,\"ozone\":321.19,\"nearestStormDistance\":122.3,\"nearestStormBearing\":219},{\"time\":1774213200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0154,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.88,\"apparentTemperature\":59.77,\"dewPoint\":41.49,\"humidity\":0.5,\"pressure\":1007.38,\"windSpeed\":14.97,\"windGust\":21.0,\"windBearing\":280,\"cloudCover\":0.74,\"uvIndex\":2.67,\"visibility\":10.0,\"ozone\":318.76,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774216800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.05,\"apparentTemperature\":59.0,\"dewPoint\":41.39,\"humidity\":0.51,\"pressure\":1009.18,\"windSpeed\":15.12,\"windGust\":20.55,\"windBearing\":290,\"cloudCover\":0.75,\"uvIndex\":1.36,\"visibility\":10.0,\"ozone\":317.64,\"nearestStormDistance\":103.76,\"nearestStormBearing\":180},{\"time\":1774220400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0209,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":58.21,\"apparentTemperature\":58.23,\"dewPoint\":41.29,\"humidity\":0.53,\"pressure\":1010.99,\"windSpeed\":15.27,\"windGust\":20.11,\"windBearing\":300,\"cloudCover\":0.75,\"uvIndex\":0.35,\"visibility\":10.0,\"ozone\":315.61,\"nearestStormDistance\":86.46,\"nearestStormBearing\":180},{\"time\":1774224000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0236,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.38,\"apparentTemperature\":57.45,\"dewPoint\":41.2,\"humidity\":0.54,\"pressure\":1012.8,\"windSpeed\":15.41,\"windGust\":19.66,\"windBearing\":310,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":314.16,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1774227600,\"summary\":\"Possible + Drizzle and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0033,\"precipProbability\":0.23,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0033,\"precipType\":\"rain\",\"temperature\":55.75,\"apparentTemperature\":55.71,\"dewPoint\":40.65,\"humidity\":0.56,\"pressure\":1014.28,\"windSpeed\":15.34,\"windGust\":19.51,\"windBearing\":320,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":312.5,\"nearestStormDistance\":64.95,\"nearestStormBearing\":225},{\"time\":1774231200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0067,\"precipProbability\":0.25,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0067,\"precipType\":\"rain\",\"temperature\":54.13,\"apparentTemperature\":53.96,\"dewPoint\":40.11,\"humidity\":0.59,\"pressure\":1015.75,\"windSpeed\":15.27,\"windGust\":19.36,\"windBearing\":330,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":310.26,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774234800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":52.5,\"apparentTemperature\":52.21,\"dewPoint\":39.56,\"humidity\":0.61,\"pressure\":1017.23,\"windSpeed\":15.19,\"windGust\":19.21,\"windBearing\":340,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":308.09,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774238400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.015,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.25,\"apparentTemperature\":49.24,\"dewPoint\":38.65,\"humidity\":0.62,\"pressure\":1018.56,\"windSpeed\":14.89,\"windGust\":18.99,\"windBearing\":230,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":306.08,\"nearestStormDistance\":53.49,\"nearestStormBearing\":198},{\"time\":1774242000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":49.99,\"apparentTemperature\":46.26,\"dewPoint\":37.75,\"humidity\":0.62,\"pressure\":1019.9,\"windSpeed\":14.6,\"windGust\":18.77,\"windBearing\":120,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.54,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774245600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0388,\"precipType\":\"snow\",\"temperature\":48.74,\"apparentTemperature\":43.29,\"dewPoint\":36.84,\"humidity\":0.63,\"pressure\":1021.24,\"windSpeed\":14.3,\"windGust\":18.54,\"windBearing\":10,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.66,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774249200,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0106,\"precipProbability\":0.29,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0407,\"precipType\":\"snow\",\"temperature\":47.52,\"apparentTemperature\":41.64,\"dewPoint\":35.52,\"humidity\":0.63,\"pressure\":1022.07,\"windSpeed\":14.6,\"windGust\":18.7,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.84,\"nearestStormDistance\":62.62,\"nearestStormBearing\":116},{\"time\":1774252800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0111,\"precipProbability\":0.3,\"precipIntensityError\":0.0213,\"precipAccumulation\":0.0425,\"precipType\":\"snow\",\"temperature\":46.29,\"apparentTemperature\":40.0,\"dewPoint\":34.2,\"humidity\":0.62,\"pressure\":1022.9,\"windSpeed\":14.89,\"windGust\":18.85,\"windBearing\":10,\"cloudCover\":0.57,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.6,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774256400,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0232,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":45.07,\"apparentTemperature\":38.35,\"dewPoint\":32.88,\"humidity\":0.62,\"pressure\":1023.73,\"windSpeed\":15.19,\"windGust\":19.01,\"windBearing\":10,\"cloudCover\":0.47,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":302.96,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774260000,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":44.04,\"apparentTemperature\":37.11,\"dewPoint\":31.69,\"humidity\":0.61,\"pressure\":1024.84,\"windSpeed\":15.19,\"windGust\":19.53,\"windBearing\":10,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.26,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774263600,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":43.0,\"apparentTemperature\":35.86,\"dewPoint\":30.51,\"humidity\":0.61,\"pressure\":1025.96,\"windSpeed\":15.19,\"windGust\":20.04,\"windBearing\":10,\"cloudCover\":0.56,\"uvIndex\":0.0,\"visibility\":7.22,\"ozone\":304.9,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774267200,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":41.97,\"apparentTemperature\":34.61,\"dewPoint\":29.32,\"humidity\":0.6,\"pressure\":1027.07,\"windSpeed\":15.19,\"windGust\":20.55,\"windBearing\":10,\"cloudCover\":0.6,\"uvIndex\":0.04,\"visibility\":9.35,\"ozone\":305.52,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774270800,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0078,\"precipProbability\":0.26,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0296,\"precipType\":\"snow\",\"temperature\":41.11,\"apparentTemperature\":33.63,\"dewPoint\":27.9,\"humidity\":0.58,\"pressure\":1027.55,\"windSpeed\":15.19,\"windGust\":20.63,\"windBearing\":10,\"cloudCover\":0.62,\"uvIndex\":0.1,\"visibility\":8.57,\"ozone\":306.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774274400,\"summary\":\"Possible + Flurries and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0039,\"precipProbability\":0.21,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0148,\"precipType\":\"snow\",\"temperature\":40.24,\"apparentTemperature\":32.64,\"dewPoint\":26.47,\"humidity\":0.57,\"pressure\":1028.03,\"windSpeed\":15.19,\"windGust\":20.72,\"windBearing\":10,\"cloudCover\":0.65,\"uvIndex\":0.16,\"visibility\":7.79,\"ozone\":307.39,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774278000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":31.66,\"dewPoint\":25.05,\"humidity\":0.55,\"pressure\":1028.51,\"windSpeed\":15.19,\"windGust\":20.8,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.22,\"visibility\":7.01,\"ozone\":308.32,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774281600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.83,\"apparentTemperature\":32.26,\"dewPoint\":24.23,\"humidity\":0.52,\"pressure\":1028.42,\"windSpeed\":14.6,\"windGust\":20.64,\"windBearing\":127,\"cloudCover\":0.61,\"uvIndex\":0.41,\"visibility\":9.67,\"ozone\":309.92,\"nearestStormDistance\":4.37,\"nearestStormBearing\":30},{\"time\":1774285200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.28,\"apparentTemperature\":32.86,\"dewPoint\":23.41,\"humidity\":0.5,\"pressure\":1028.34,\"windSpeed\":14.0,\"windGust\":20.49,\"windBearing\":243,\"cloudCover\":0.54,\"uvIndex\":0.6,\"visibility\":10.0,\"ozone\":311.51,\"nearestStormDistance\":8.73,\"nearestStormBearing\":60},{\"time\":1774288800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.73,\"apparentTemperature\":33.46,\"dewPoint\":22.59,\"humidity\":0.47,\"pressure\":1028.26,\"windSpeed\":13.4,\"windGust\":20.33,\"windBearing\":0,\"cloudCover\":0.48,\"uvIndex\":0.78,\"visibility\":10.0,\"ozone\":313.1,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774292400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.19,\"apparentTemperature\":34.12,\"dewPoint\":22.07,\"humidity\":0.45,\"pressure\":1028.2,\"windSpeed\":13.55,\"windGust\":20.25,\"windBearing\":357,\"cloudCover\":0.44,\"uvIndex\":1.15,\"visibility\":10.0,\"ozone\":315.84,\"nearestStormDistance\":28.08,\"nearestStormBearing\":131},{\"time\":1774296000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.65,\"apparentTemperature\":34.78,\"dewPoint\":21.55,\"humidity\":0.44,\"pressure\":1028.14,\"windSpeed\":13.7,\"windGust\":20.18,\"windBearing\":353,\"cloudCover\":0.39,\"uvIndex\":1.51,\"visibility\":10.0,\"ozone\":318.57,\"nearestStormDistance\":43.07,\"nearestStormBearing\":172},{\"time\":1774299600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.12,\"apparentTemperature\":35.44,\"dewPoint\":21.04,\"humidity\":0.42,\"pressure\":1028.08,\"windSpeed\":13.85,\"windGust\":20.11,\"windBearing\":350,\"cloudCover\":0.35,\"uvIndex\":1.88,\"visibility\":10.0,\"ozone\":321.3,\"nearestStormDistance\":58.05,\"nearestStormBearing\":213},{\"time\":1774303200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.09,\"apparentTemperature\":35.34,\"dewPoint\":20.79,\"humidity\":0.42,\"pressure\":1028.61,\"windSpeed\":13.78,\"windGust\":18.99,\"windBearing\":350,\"cloudCover\":0.34,\"uvIndex\":1.4,\"visibility\":10.0,\"ozone\":323.19,\"nearestStormDistance\":53.14,\"nearestStormBearing\":217},{\"time\":1774306800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.06,\"apparentTemperature\":35.25,\"dewPoint\":20.53,\"humidity\":0.42,\"pressure\":1029.15,\"windSpeed\":13.7,\"windGust\":17.87,\"windBearing\":350,\"cloudCover\":0.32,\"uvIndex\":0.92,\"visibility\":10.0,\"ozone\":325.07,\"nearestStormDistance\":48.24,\"nearestStormBearing\":221},{\"time\":1774310400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.03,\"apparentTemperature\":35.15,\"dewPoint\":20.28,\"humidity\":0.42,\"pressure\":1029.68,\"windSpeed\":13.63,\"windGust\":16.76,\"windBearing\":350,\"cloudCover\":0.31,\"uvIndex\":0.44,\"visibility\":10.0,\"ozone\":326.96,\"nearestStormDistance\":43.33,\"nearestStormBearing\":225},{\"time\":1774314000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.2,\"apparentTemperature\":34.12,\"dewPoint\":20.12,\"humidity\":0.43,\"pressure\":1029.87,\"windSpeed\":13.26,\"windGust\":16.31,\"windBearing\":347,\"cloudCover\":0.26,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":329.73,\"nearestStormDistance\":48.28,\"nearestStormBearing\":258},{\"time\":1774317600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.37,\"apparentTemperature\":33.09,\"dewPoint\":19.96,\"humidity\":0.43,\"pressure\":1030.06,\"windSpeed\":12.88,\"windGust\":15.86,\"windBearing\":343,\"cloudCover\":0.22,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":332.5,\"nearestStormDistance\":53.23,\"nearestStormBearing\":292},{\"time\":1774321200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.54,\"apparentTemperature\":32.05,\"dewPoint\":19.8,\"humidity\":0.44,\"pressure\":1030.25,\"windSpeed\":12.51,\"windGust\":15.41,\"windBearing\":340,\"cloudCover\":0.17,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":335.27,\"nearestStormDistance\":58.19,\"nearestStormBearing\":326},{\"time\":1774324800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":38.71,\"apparentTemperature\":31.07,\"dewPoint\":19.03,\"humidity\":0.44,\"pressure\":1030.44,\"windSpeed\":11.91,\"windGust\":14.97,\"windBearing\":343,\"cloudCover\":0.15,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":340.96,\"nearestStormDistance\":130.35,\"nearestStormBearing\":236},{\"time\":1774328400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.87,\"apparentTemperature\":30.09,\"dewPoint\":18.26,\"humidity\":0.45,\"pressure\":1030.63,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":347,\"cloudCover\":0.12,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.65,\"nearestStormDistance\":202.52,\"nearestStormBearing\":147},{\"time\":1774332000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.04,\"apparentTemperature\":29.1,\"dewPoint\":17.49,\"humidity\":0.45,\"pressure\":1030.81,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.34,\"nearestStormDistance\":274.69,\"nearestStormBearing\":57},{\"time\":1774335600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":36.39,\"apparentTemperature\":28.34,\"dewPoint\":17.37,\"humidity\":0.46,\"pressure\":1030.58,\"windSpeed\":10.72,\"windGust\":13.93,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":360.54,\"nearestStormDistance\":221.96,\"nearestStormBearing\":49},{\"time\":1774339200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.74,\"apparentTemperature\":27.58,\"dewPoint\":17.24,\"humidity\":0.47,\"pressure\":1030.34,\"windSpeed\":10.72,\"windGust\":13.79,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":368.74,\"nearestStormDistance\":169.23,\"nearestStormBearing\":41},{\"time\":1774342800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.1,\"apparentTemperature\":26.82,\"dewPoint\":17.11,\"humidity\":0.48,\"pressure\":1030.11,\"windSpeed\":10.72,\"windGust\":13.65,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":376.94,\"nearestStormDistance\":116.5,\"nearestStormBearing\":33},{\"time\":1774346400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.81,\"apparentTemperature\":26.64,\"dewPoint\":17.42,\"humidity\":0.49,\"pressure\":1029.87,\"windSpeed\":10.72,\"windGust\":13.64,\"windBearing\":233,\"cloudCover\":0.14,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":381.4,\"nearestStormDistance\":165.42,\"nearestStormBearing\":54},{\"time\":1774350000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.52,\"apparentTemperature\":26.47,\"dewPoint\":17.73,\"humidity\":0.49,\"pressure\":1029.64,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":117,\"cloudCover\":0.17,\"uvIndex\":0.07,\"visibility\":10.0,\"ozone\":385.86,\"nearestStormDistance\":214.34,\"nearestStormBearing\":75},{\"time\":1774353600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.23,\"apparentTemperature\":26.29,\"dewPoint\":18.03,\"humidity\":0.5,\"pressure\":1029.4,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":0,\"cloudCover\":0.2,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":390.32,\"nearestStormDistance\":263.26,\"nearestStormBearing\":95},{\"time\":1774357200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.01,\"apparentTemperature\":27.04,\"dewPoint\":17.47,\"humidity\":0.48,\"pressure\":1028.55,\"windSpeed\":10.72,\"windGust\":14.22,\"windBearing\":7,\"cloudCover\":0.26,\"uvIndex\":0.93,\"visibility\":10.0,\"ozone\":393.27,\"nearestStormDistance\":254.65,\"nearestStormBearing\":95},{\"time\":1774360800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.78,\"apparentTemperature\":27.79,\"dewPoint\":16.92,\"humidity\":0.45,\"pressure\":1027.69,\"windSpeed\":10.72,\"windGust\":14.82,\"windBearing\":13,\"cloudCover\":0.33,\"uvIndex\":1.77,\"visibility\":10.0,\"ozone\":396.21,\"nearestStormDistance\":246.03,\"nearestStormBearing\":96},{\"time\":1774364400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":36.55,\"apparentTemperature\":28.54,\"dewPoint\":16.36,\"humidity\":0.43,\"pressure\":1026.83,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":20,\"cloudCover\":0.39,\"uvIndex\":2.6,\"visibility\":10.0,\"ozone\":399.16,\"nearestStormDistance\":237.42,\"nearestStormBearing\":96},{\"time\":1774368000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":37.68,\"apparentTemperature\":29.94,\"dewPoint\":16.6,\"humidity\":0.42,\"pressure\":1025.98,\"windSpeed\":11.24,\"windGust\":16.23,\"windBearing\":60,\"cloudCover\":0.42,\"uvIndex\":3.57,\"visibility\":10.0,\"ozone\":393.36,\"nearestStormDistance\":232.51,\"nearestStormBearing\":94},{\"time\":1774371600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":38.81,\"apparentTemperature\":31.34,\"dewPoint\":16.85,\"humidity\":0.4,\"pressure\":1025.12,\"windSpeed\":11.77,\"windGust\":17.05,\"windBearing\":100,\"cloudCover\":0.46,\"uvIndex\":4.54,\"visibility\":10.0,\"ozone\":387.55,\"nearestStormDistance\":227.6,\"nearestStormBearing\":92},{\"time\":1774375200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.94,\"apparentTemperature\":32.74,\"dewPoint\":17.1,\"humidity\":0.39,\"pressure\":1024.26,\"windSpeed\":12.29,\"windGust\":17.87,\"windBearing\":140,\"cloudCover\":0.49,\"uvIndex\":5.51,\"visibility\":10.0,\"ozone\":381.74,\"nearestStormDistance\":222.68,\"nearestStormBearing\":90},{\"time\":1774378800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.65,\"apparentTemperature\":33.65,\"dewPoint\":17.72,\"humidity\":0.39,\"pressure\":1023.53,\"windSpeed\":12.44,\"windGust\":17.8,\"windBearing\":160,\"cloudCover\":0.52,\"uvIndex\":5.02,\"visibility\":10.0,\"ozone\":380.91,\"nearestStormDistance\":225.08,\"nearestStormBearing\":86},{\"time\":1774382400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.37,\"apparentTemperature\":34.56,\"dewPoint\":18.34,\"humidity\":0.39,\"pressure\":1022.8,\"windSpeed\":12.58,\"windGust\":17.72,\"windBearing\":180,\"cloudCover\":0.56,\"uvIndex\":4.53,\"visibility\":10.0,\"ozone\":380.07,\"nearestStormDistance\":227.47,\"nearestStormBearing\":83},{\"time\":1774386000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.08,\"apparentTemperature\":35.47,\"dewPoint\":18.97,\"humidity\":0.39,\"pressure\":1022.07,\"windSpeed\":12.73,\"windGust\":17.65,\"windBearing\":200,\"cloudCover\":0.59,\"uvIndex\":4.04,\"visibility\":10.0,\"ozone\":379.24,\"nearestStormDistance\":229.86,\"nearestStormBearing\":79},{\"time\":1774389600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.03,\"apparentTemperature\":35.61,\"dewPoint\":19.71,\"humidity\":0.4,\"pressure\":1021.34,\"windSpeed\":12.51,\"windGust\":17.05,\"windBearing\":200,\"cloudCover\":0.58,\"uvIndex\":2.89,\"visibility\":10.0,\"ozone\":380.33,\"nearestStormDistance\":301.76,\"nearestStormBearing\":122},{\"time\":1774393200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.98,\"apparentTemperature\":35.75,\"dewPoint\":20.46,\"humidity\":0.42,\"pressure\":1020.61,\"windSpeed\":12.29,\"windGust\":16.46,\"windBearing\":200,\"cloudCover\":0.56,\"uvIndex\":1.74,\"visibility\":10.0,\"ozone\":381.42,\"nearestStormDistance\":373.66,\"nearestStormBearing\":165},{\"time\":1774396800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.94,\"apparentTemperature\":35.89,\"dewPoint\":21.2,\"humidity\":0.43,\"pressure\":1019.88,\"windSpeed\":12.06,\"windGust\":15.86,\"windBearing\":200,\"cloudCover\":0.55,\"uvIndex\":0.59,\"visibility\":10.0,\"ozone\":382.51,\"nearestStormDistance\":445.56,\"nearestStormBearing\":208},{\"time\":1774400400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.82,\"apparentTemperature\":35.65,\"dewPoint\":22.16,\"humidity\":0.45,\"pressure\":1019.97,\"windSpeed\":11.69,\"windGust\":15.19,\"windBearing\":203,\"cloudCover\":0.56,\"uvIndex\":0.39,\"visibility\":10.0,\"ozone\":385.23,\"nearestStormDistance\":426.54,\"nearestStormBearing\":208},{\"time\":1774404000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.7,\"apparentTemperature\":35.41,\"dewPoint\":23.12,\"humidity\":0.48,\"pressure\":1020.07,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":207,\"cloudCover\":0.58,\"uvIndex\":0.2,\"visibility\":10.0,\"ozone\":387.94,\"nearestStormDistance\":407.53,\"nearestStormBearing\":207},{\"time\":1774407600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.58,\"apparentTemperature\":35.17,\"dewPoint\":24.08,\"humidity\":0.5,\"pressure\":1020.16,\"windSpeed\":10.95,\"windGust\":13.85,\"windBearing\":210,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.66,\"nearestStormDistance\":388.51,\"nearestStormBearing\":207},{\"time\":1774411200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.29,\"apparentTemperature\":34.82,\"dewPoint\":24.87,\"humidity\":0.52,\"pressure\":1020.25,\"windSpeed\":10.79,\"windGust\":13.84,\"windBearing\":217,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.22,\"nearestStormDistance\":380.31,\"nearestStormBearing\":206},{\"time\":1774414800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.01,\"apparentTemperature\":34.47,\"dewPoint\":25.66,\"humidity\":0.53,\"pressure\":1020.35,\"windSpeed\":10.63,\"windGust\":13.83,\"windBearing\":223,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.78,\"nearestStormDistance\":372.11,\"nearestStormBearing\":205},{\"time\":1774418400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.72,\"apparentTemperature\":34.12,\"dewPoint\":26.46,\"humidity\":0.55,\"pressure\":1020.44,\"windSpeed\":10.47,\"windGust\":13.82,\"windBearing\":230,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":398.33,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774422000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.43,\"apparentTemperature\":33.75,\"dewPoint\":26.76,\"humidity\":0.57,\"pressure\":1020.61,\"windSpeed\":10.31,\"windGust\":13.81,\"windBearing\":237,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.56,\"nearestStormDistance\":342.85,\"nearestStormBearing\":190},{\"time\":1774425600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.15,\"apparentTemperature\":33.38,\"dewPoint\":27.07,\"humidity\":0.58,\"pressure\":1020.77,\"windSpeed\":10.15,\"windGust\":13.8,\"windBearing\":243,\"cloudCover\":0.69,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.78,\"nearestStormDistance\":321.78,\"nearestStormBearing\":177},{\"time\":1774429200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.86,\"apparentTemperature\":33.01,\"dewPoint\":27.37,\"humidity\":0.6,\"pressure\":1020.93,\"windSpeed\":9.99,\"windGust\":13.79,\"windBearing\":250,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.01,\"nearestStormDistance\":300.72,\"nearestStormBearing\":163},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.58,\"apparentTemperature\":33.27,\"dewPoint\":27.81,\"humidity\":0.62,\"pressure\":1021.1,\"windSpeed\":9.83,\"windGust\":13.78,\"windBearing\":257,\"cloudCover\":0.69,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":407.34,\"nearestStormDistance\":272.51,\"nearestStormBearing\":181},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.65,\"apparentTemperature\":33.54,\"dewPoint\":28.24,\"humidity\":0.62,\"pressure\":1021.26,\"windSpeed\":9.83,\"windGust\":13.7,\"windBearing\":263,\"cloudCover\":0.69,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":412.67,\"nearestStormDistance\":244.31,\"nearestStormBearing\":198},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.72,\"apparentTemperature\":33.8,\"dewPoint\":28.67,\"humidity\":0.63,\"pressure\":1021.42,\"windSpeed\":9.83,\"windGust\":13.63,\"windBearing\":270,\"cloudCover\":0.68,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":418.0,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.74,\"apparentTemperature\":34.92,\"dewPoint\":28.15,\"humidity\":0.6,\"pressure\":1021.35,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":273,\"cloudCover\":0.67,\"uvIndex\":0.89,\"visibility\":10.0,\"ozone\":417.94,\"nearestStormDistance\":214.18,\"nearestStormBearing\":214},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.76,\"apparentTemperature\":36.03,\"dewPoint\":27.64,\"humidity\":0.57,\"pressure\":1021.27,\"windSpeed\":10.43,\"windGust\":14.82,\"windBearing\":277,\"cloudCover\":0.66,\"uvIndex\":1.68,\"visibility\":10.0,\"ozone\":417.87,\"nearestStormDistance\":212.26,\"nearestStormBearing\":213},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.78,\"apparentTemperature\":37.15,\"dewPoint\":27.12,\"humidity\":0.54,\"pressure\":1021.2,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":280,\"cloudCover\":0.65,\"uvIndex\":2.48,\"visibility\":10.0,\"ozone\":417.81,\"nearestStormDistance\":210.33,\"nearestStormBearing\":212},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":44.07,\"apparentTemperature\":38.64,\"dewPoint\":27.09,\"humidity\":0.51,\"pressure\":1021.12,\"windSpeed\":11.1,\"windGust\":16.08,\"windBearing\":277,\"cloudCover\":0.63,\"uvIndex\":3.46,\"visibility\":10.0,\"ozone\":414.05,\"nearestStormDistance\":193.67,\"nearestStormBearing\":195},{\"time\":1774458000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.35,\"apparentTemperature\":40.12,\"dewPoint\":27.05,\"humidity\":0.49,\"pressure\":1021.04,\"windSpeed\":11.47,\"windGust\":16.76,\"windBearing\":273,\"cloudCover\":0.61,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":410.3,\"nearestStormDistance\":177.01,\"nearestStormBearing\":178},{\"time\":1774461600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.63,\"apparentTemperature\":41.61,\"dewPoint\":27.01,\"humidity\":0.46,\"pressure\":1020.97,\"windSpeed\":11.84,\"windGust\":17.43,\"windBearing\":270,\"cloudCover\":0.59,\"uvIndex\":5.44,\"visibility\":10.0,\"ozone\":406.55,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774465200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":47.34,\"apparentTemperature\":42.34,\"dewPoint\":27.39,\"humidity\":0.45,\"pressure\":1020.84,\"windSpeed\":12.29,\"windGust\":17.57,\"windBearing\":277,\"cloudCover\":0.58,\"uvIndex\":4.94,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774468800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.05,\"apparentTemperature\":43.06,\"dewPoint\":27.76,\"humidity\":0.45,\"pressure\":1020.72,\"windSpeed\":12.73,\"windGust\":17.72,\"windBearing\":283,\"cloudCover\":0.58,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":395.52,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774472400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.76,\"apparentTemperature\":43.79,\"dewPoint\":28.13,\"humidity\":0.44,\"pressure\":1020.6,\"windSpeed\":13.18,\"windGust\":17.87,\"windBearing\":290,\"cloudCover\":0.57,\"uvIndex\":3.95,\"visibility\":10.0,\"ozone\":390.0,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774476000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.36,\"apparentTemperature\":43.41,\"dewPoint\":28.35,\"humidity\":0.45,\"pressure\":1020.48,\"windSpeed\":12.81,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.56,\"uvIndex\":2.84,\"visibility\":10.0,\"ozone\":386.11,\"nearestStormDistance\":237.03,\"nearestStormBearing\":146}]},\"daily\":{\"summary\":\"Mixed + precipitation on Saturday and Monday, with highs reaching 60\xB0F on Sunday.\",\"icon\":\"sleet\",\"data\":[{\"time\":1773806400,\"summary\":\"Mostly + clear until afternoon, returning overnight.\",\"icon\":\"clear-day\",\"sunriseTime\":1773831768,\"sunsetTime\":1773875149,\"moonPhase\":0.98,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773806400,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":35.8,\"temperatureHighTime\":1773871200,\"temperatureLow\":34.03,\"temperatureLowTime\":1773910800,\"apparentTemperatureHigh\":31.89,\"apparentTemperatureHighTime\":1773860400,\"apparentTemperatureLow\":24.89,\"apparentTemperatureLowTime\":1773882000,\"dewPoint\":12.86,\"humidity\":0.43,\"pressure\":1027.89,\"windSpeed\":9.38,\"windGust\":12.08,\"windGustTime\":1773806400,\"windBearing\":210,\"cloudCover\":0.26,\"uvIndex\":5.29,\"uvIndexTime\":1773856800,\"visibility\":10.0,\"temperatureMin\":29.73,\"temperatureMinTime\":1773838800,\"temperatureMax\":35.8,\"temperatureMaxTime\":1773871200,\"apparentTemperatureMin\":18.06,\"apparentTemperatureMinTime\":1773828000,\"apparentTemperatureMax\":31.89,\"apparentTemperatureMaxTime\":1773860400},{\"time\":1773892800,\"summary\":\"Partly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1773918069,\"sunsetTime\":1773961613,\"moonPhase\":0.02,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773892800,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":43.23,\"temperatureHighTime\":1773957600,\"temperatureLow\":41.51,\"temperatureLowTime\":1774000800,\"apparentTemperatureHigh\":35.19,\"apparentTemperatureHighTime\":1773946800,\"apparentTemperatureLow\":33.87,\"apparentTemperatureLowTime\":1773961200,\"dewPoint\":24.05,\"humidity\":0.55,\"pressure\":1024.83,\"windSpeed\":7.33,\"windGust\":9.91,\"windGustTime\":1773954000,\"windBearing\":154,\"cloudCover\":0.44,\"uvIndex\":5.42,\"uvIndexTime\":1773943200,\"visibility\":10.0,\"temperatureMin\":34.03,\"temperatureMinTime\":1773910800,\"temperatureMax\":43.23,\"temperatureMaxTime\":1773957600,\"apparentTemperatureMin\":26.4,\"apparentTemperatureMinTime\":1773910800,\"apparentTemperatureMax\":35.19,\"apparentTemperatureMaxTime\":1773946800},{\"time\":1773979200,\"summary\":\"Light + rain overnight.\",\"icon\":\"rain\",\"sunriseTime\":1774004370,\"sunsetTime\":1774048077,\"moonPhase\":0.05,\"precipIntensity\":0.0013,\"precipIntensityMax\":0.015,\"precipIntensityMaxTime\":1774062000,\"precipProbability\":0.49,\"precipAccumulation\":0.03,\"precipType\":\"rain\",\"temperatureHigh\":52.02,\"temperatureHighTime\":1774040400,\"temperatureLow\":49.02,\"temperatureLowTime\":1774087200,\"apparentTemperatureHigh\":45.07,\"apparentTemperatureHighTime\":1774033200,\"apparentTemperatureLow\":40.62,\"apparentTemperatureLowTime\":1774062000,\"dewPoint\":34.13,\"humidity\":0.62,\"pressure\":1018.82,\"windSpeed\":9.53,\"windGust\":12.8,\"windGustTime\":1774040400,\"windBearing\":210,\"cloudCover\":0.61,\"uvIndex\":5.15,\"uvIndexTime\":1774029600,\"visibility\":10.0,\"temperatureMin\":41.18,\"temperatureMinTime\":1774008000,\"temperatureMax\":52.02,\"temperatureMaxTime\":1774040400,\"apparentTemperatureMin\":34.65,\"apparentTemperatureMinTime\":1773986400,\"apparentTemperatureMax\":45.07,\"apparentTemperatureMaxTime\":1774033200},{\"time\":1774065600,\"summary\":\"Light + rain in the morning.\",\"icon\":\"rain\",\"sunriseTime\":1774090671,\"sunsetTime\":1774134541,\"moonPhase\":0.09,\"precipIntensity\":0.0088,\"precipIntensityMax\":0.0234,\"precipIntensityMaxTime\":1774083600,\"precipProbability\":0.49,\"precipAccumulation\":0.2102,\"precipType\":\"rain\",\"temperatureHigh\":56.62,\"temperatureHighTime\":1774126800,\"temperatureLow\":48.94,\"temperatureLowTime\":1774159200,\"apparentTemperatureHigh\":50.4,\"apparentTemperatureHighTime\":1774126800,\"apparentTemperatureLow\":41.34,\"apparentTemperatureLowTime\":1774159200,\"dewPoint\":40.98,\"humidity\":0.66,\"pressure\":1010.47,\"windSpeed\":11.36,\"windGust\":15.9,\"windGustTime\":1774126800,\"windBearing\":256,\"cloudCover\":0.64,\"uvIndex\":3.98,\"uvIndexTime\":1774119600,\"visibility\":7.17,\"temperatureMin\":48.83,\"temperatureMinTime\":1774094400,\"temperatureMax\":56.62,\"temperatureMaxTime\":1774126800,\"apparentTemperatureMin\":40.67,\"apparentTemperatureMinTime\":1774065600,\"apparentTemperatureMax\":50.4,\"apparentTemperatureMaxTime\":1774126800},{\"time\":1774152000,\"summary\":\"Breezy + in the evening and flurries and rain overnight.\",\"icon\":\"wind\",\"sunriseTime\":1774176971,\"sunsetTime\":1774221005,\"moonPhase\":0.13,\"precipIntensity\":0.0008,\"precipIntensityMax\":0.01,\"precipIntensityMaxTime\":1774234800,\"precipProbability\":0.28,\"precipAccumulation\":0.02,\"precipType\":\"rain\",\"temperatureHigh\":59.88,\"temperatureHighTime\":1774213200,\"temperatureLow\":44.04,\"temperatureLowTime\":1774260000,\"apparentTemperatureHigh\":53.29,\"apparentTemperatureHighTime\":1774202400,\"apparentTemperatureLow\":31.58,\"apparentTemperatureLowTime\":1774260000,\"dewPoint\":41.04,\"humidity\":0.63,\"pressure\":1008.08,\"windSpeed\":12.06,\"windGust\":16.39,\"windGustTime\":1774213200,\"windBearing\":258,\"cloudCover\":0.74,\"uvIndex\":5.55,\"uvIndexTime\":1774202400,\"visibility\":10.0,\"temperatureMin\":48.94,\"temperatureMinTime\":1774159200,\"temperatureMax\":59.88,\"temperatureMaxTime\":1774213200,\"apparentTemperatureMin\":41.34,\"apparentTemperatureMinTime\":1774159200,\"apparentTemperatureMax\":53.29,\"apparentTemperatureMaxTime\":1774202400},{\"time\":1774238400,\"summary\":\"Flurries + and breezy in the morning.\",\"icon\":\"snow\",\"sunriseTime\":1774263272,\"sunsetTime\":1774307468,\"moonPhase\":0.16,\"precipIntensity\":0.0046,\"precipIntensityMax\":0.0117,\"precipIntensityMaxTime\":1774256400,\"precipProbability\":0.31,\"precipAccumulation\":0.364,\"precipType\":\"snow\",\"temperatureHigh\":43.0,\"temperatureHighTime\":1774263600,\"temperatureLow\":34.81,\"temperatureLowTime\":1774346400,\"apparentTemperatureHigh\":30.57,\"apparentTemperatureHighTime\":1774299600,\"apparentTemperatureLow\":23.23,\"apparentTemperatureLowTime\":1774346400,\"dewPoint\":26.8,\"humidity\":0.53,\"pressure\":1026.56,\"windSpeed\":14.27,\"windGust\":19.1,\"windGustTime\":1774278000,\"windBearing\":164,\"cloudCover\":0.5,\"uvIndex\":1.88,\"uvIndexTime\":1774299600,\"visibility\":9.57,\"temperatureMin\":39.38,\"temperatureMinTime\":1774278000,\"temperatureMax\":51.25,\"temperatureMaxTime\":1774238400,\"apparentTemperatureMin\":26.12,\"apparentTemperatureMinTime\":1774278000,\"apparentTemperatureMax\":40.16,\"apparentTemperatureMaxTime\":1774238400},{\"time\":1774324800,\"summary\":\"Partly + cloudy from afternoon until night.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774349573,\"sunsetTime\":1774393932,\"moonPhase\":0.2,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774324800,\"precipProbability\":0.07,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":42.08,\"temperatureHighTime\":1774386000,\"temperatureLow\":39.58,\"temperatureLowTime\":1774432800,\"apparentTemperatureHigh\":34.71,\"apparentTemperatureHighTime\":1774386000,\"apparentTemperatureLow\":29.6,\"apparentTemperatureLowTime\":1774432800,\"dewPoint\":18.61,\"humidity\":0.44,\"pressure\":1025.86,\"windSpeed\":11.43,\"windGust\":15.32,\"windGustTime\":1774375200,\"windBearing\":189,\"cloudCover\":0.36,\"uvIndex\":5.51,\"uvIndexTime\":1774375200,\"visibility\":10.0,\"temperatureMin\":34.23,\"temperatureMinTime\":1774353600,\"temperatureMax\":42.08,\"temperatureMaxTime\":1774386000,\"apparentTemperatureMin\":22.73,\"apparentTemperatureMinTime\":1774353600,\"apparentTemperatureMax\":34.71,\"apparentTemperatureMaxTime\":1774386000},{\"time\":1774411200,\"summary\":\"Mostly + cloudy until afternoon, returning overnight.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774435873,\"sunsetTime\":1774480395,\"moonPhase\":0.24,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774411200,\"precipProbability\":0.12,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":48.76,\"temperatureHighTime\":1774472400,\"temperatureLow\":42.0,\"temperatureLowTime\":1774512000,\"apparentTemperatureHigh\":41.83,\"apparentTemperatureHighTime\":1774472400,\"apparentTemperatureLow\":31.72,\"apparentTemperatureLowTime\":1774512000,\"dewPoint\":27.59,\"humidity\":0.53,\"pressure\":1020.86,\"windSpeed\":11.18,\"windGust\":15.35,\"windGustTime\":1774472400,\"windBearing\":263,\"cloudCover\":0.62,\"uvIndex\":5.44,\"uvIndexTime\":1774461600,\"visibility\":10.0,\"temperatureMin\":39.58,\"temperatureMinTime\":1774432800,\"temperatureMax\":48.76,\"temperatureMaxTime\":1774472400,\"apparentTemperatureMin\":29.6,\"apparentTemperatureMinTime\":1774432800,\"apparentTemperatureMax\":41.83,\"apparentTemperatureMaxTime\":1774472400}]},\"alerts\":[],\"flags\":{\"sources\":[\"ETOPO1\",\"hrrrsubh\",\"rtma_ru\",\"hrrr_0-18\",\"nbm\",\"nbm_fire\",\"dwd_mosmix\",\"ecmwf_ifs\",\"hrrr_18-48\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"hrrr_subh\":\"2026-03-18 + 21Z\",\"rtma_ru\":\"2026-03-18 23:15Z\",\"hrrr_0-18\":\"2026-03-18 21Z\",\"nbm\":\"2026-03-18 + 19Z\",\"nbm_fire\":\"2026-03-18 18Z\",\"dwd_mosmix\":\"2026-03-18 22Z\",\"ecmwf_ifs\":\"2026-03-18 + 00Z\",\"hrrr_18-48\":\"2026-03-18 18Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":6.81,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:53 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9854' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 4966f878e5166e8661305465727dd124.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - GnT1xIEHpGu0_y-LR4y8C14JdQErpAXJco3FXfGSgBurDpJT_iD3CQ== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '146' + X-Handler-Time: + - '44.4' + X-Kong-Proxy-Latency: + - '2' + X-Kong-Request-Id: + - 97bf7a28fb03c501e10db048aa7f0519 + X-Kong-Upstream-Latency: + - '46' + X-Node-Id: + - ip-10-0-14-222.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9854' + X-Response-Time: + - '44.436' + X-Server-Time: + - '45.7' + content-length: + - '94228' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/cassettes/pirate_weather/alerts_tromso.yaml b/tests/integration/cassettes/pirate_weather/alerts_tromso.yaml new file mode 100644 index 00000000..9296485b --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/alerts_tromso.yaml @@ -0,0 +1,266 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/69.6489,18.9551?extend=hourly&units=us + response: + body: + string: "{\"latitude\":69.6489,\"longitude\":18.9551,\"timezone\":\"Europe/Oslo\",\"offset\":1.0,\"elevation\":43,\"currently\":{\"time\":1773877680,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"nearestStormDistance\":0.0,\"nearestStormBearing\":0,\"precipIntensity\":0.0039,\"precipProbability\":0.98,\"precipIntensityError\":0.0105,\"precipType\":\"rain\",\"temperature\":40.06,\"apparentTemperature\":23.69,\"dewPoint\":33.58,\"humidity\":0.77,\"pressure\":990.72,\"windSpeed\":22.7,\"windGust\":33.1,\"windBearing\":196,\"cloudCover\":0.92,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":483.6},\"minutely\":{\"summary\":\"Drizzle + for the hour.\",\"icon\":\"rain\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0039,\"precipProbability\":0.98,\"precipIntensityError\":0.0105,\"precipType\":\"rain\"},{\"time\":1773877740,\"precipIntensity\":0.0039,\"precipProbability\":0.98,\"precipIntensityError\":0.0105,\"precipType\":\"rain\"},{\"time\":1773877800,\"precipIntensity\":0.0039,\"precipProbability\":0.98,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773877860,\"precipIntensity\":0.0039,\"precipProbability\":0.98,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773877920,\"precipIntensity\":0.0039,\"precipProbability\":0.98,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773877980,\"precipIntensity\":0.0039,\"precipProbability\":0.99,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773878040,\"precipIntensity\":0.0039,\"precipProbability\":0.99,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773878100,\"precipIntensity\":0.0039,\"precipProbability\":0.99,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878160,\"precipIntensity\":0.0039,\"precipProbability\":0.99,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878220,\"precipIntensity\":0.0039,\"precipProbability\":0.99,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878280,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878340,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878400,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0102,\"precipType\":\"rain\"},{\"time\":1773878460,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878520,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878580,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878640,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0103,\"precipType\":\"rain\"},{\"time\":1773878700,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773878760,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773878820,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773878880,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0104,\"precipType\":\"rain\"},{\"time\":1773878940,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0105,\"precipType\":\"rain\"},{\"time\":1773879000,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0105,\"precipType\":\"rain\"},{\"time\":1773879060,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0105,\"precipType\":\"rain\"},{\"time\":1773879120,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0105,\"precipType\":\"rain\"},{\"time\":1773879180,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0106,\"precipType\":\"rain\"},{\"time\":1773879240,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0106,\"precipType\":\"rain\"},{\"time\":1773879300,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0106,\"precipType\":\"rain\"},{\"time\":1773879360,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0107,\"precipType\":\"rain\"},{\"time\":1773879420,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0107,\"precipType\":\"rain\"},{\"time\":1773879480,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0107,\"precipType\":\"rain\"},{\"time\":1773879540,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0107,\"precipType\":\"rain\"},{\"time\":1773879600,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0108,\"precipType\":\"rain\"},{\"time\":1773879660,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0108,\"precipType\":\"rain\"},{\"time\":1773879720,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0108,\"precipType\":\"rain\"},{\"time\":1773879780,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0108,\"precipType\":\"rain\"},{\"time\":1773879840,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0109,\"precipType\":\"rain\"},{\"time\":1773879900,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0109,\"precipType\":\"rain\"},{\"time\":1773879960,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0109,\"precipType\":\"rain\"},{\"time\":1773880020,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0109,\"precipType\":\"rain\"},{\"time\":1773880080,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.011,\"precipType\":\"rain\"},{\"time\":1773880140,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.011,\"precipType\":\"rain\"},{\"time\":1773880200,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.011,\"precipType\":\"rain\"},{\"time\":1773880260,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.011,\"precipType\":\"rain\"},{\"time\":1773880320,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0111,\"precipType\":\"rain\"},{\"time\":1773880380,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0111,\"precipType\":\"rain\"},{\"time\":1773880440,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0111,\"precipType\":\"rain\"},{\"time\":1773880500,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0111,\"precipType\":\"rain\"},{\"time\":1773880560,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0112,\"precipType\":\"rain\"},{\"time\":1773880620,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0112,\"precipType\":\"rain\"},{\"time\":1773880680,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0112,\"precipType\":\"rain\"},{\"time\":1773880740,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0112,\"precipType\":\"rain\"},{\"time\":1773880800,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0113,\"precipType\":\"rain\"},{\"time\":1773880860,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0113,\"precipType\":\"rain\"},{\"time\":1773880920,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0113,\"precipType\":\"rain\"},{\"time\":1773880980,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0113,\"precipType\":\"rain\"},{\"time\":1773881040,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0114,\"precipType\":\"rain\"},{\"time\":1773881100,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0114,\"precipType\":\"rain\"},{\"time\":1773881160,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0114,\"precipType\":\"rain\"},{\"time\":1773881220,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0114,\"precipType\":\"rain\"},{\"time\":1773881280,\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0115,\"precipType\":\"rain\"}]},\"hourly\":{\"summary\":\"Drizzle + throughout the day and windy until this evening.\",\"icon\":\"rain\",\"data\":[{\"time\":1773874800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.89,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":39.92,\"apparentTemperature\":26.05,\"dewPoint\":33.44,\"humidity\":0.77,\"pressure\":990.8,\"windSpeed\":21.83,\"windGust\":32.17,\"windBearing\":186,\"cloudCover\":1.0,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":492.8,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773878400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0102,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":40.1,\"apparentTemperature\":23.99,\"dewPoint\":33.62,\"humidity\":0.77,\"pressure\":990.7,\"windSpeed\":22.99,\"windGust\":33.33,\"windBearing\":196,\"cloudCover\":0.9,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":481.3,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773882000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":39.92,\"apparentTemperature\":21.44,\"dewPoint\":33.44,\"humidity\":0.77,\"pressure\":990.5,\"windSpeed\":22.99,\"windGust\":34.47,\"windBearing\":201,\"cloudCover\":0.92,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":472.81,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773885600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":39.2,\"apparentTemperature\":21.62,\"dewPoint\":33.26,\"humidity\":0.79,\"pressure\":990.2,\"windSpeed\":25.29,\"windGust\":35.63,\"windBearing\":207,\"cloudCover\":0.94,\"uvIndex\":0.0,\"visibility\":9.32,\"ozone\":470.44,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773889200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.84,\"apparentTemperature\":21.61,\"dewPoint\":33.44,\"humidity\":0.81,\"pressure\":990.1,\"windSpeed\":25.29,\"windGust\":37.93,\"windBearing\":212,\"cloudCover\":0.95,\"uvIndex\":0.0,\"visibility\":8.45,\"ozone\":472.8,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773892800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.3,\"apparentTemperature\":20.72,\"dewPoint\":33.08,\"humidity\":0.81,\"pressure\":990.3,\"windSpeed\":25.29,\"windGust\":37.93,\"windBearing\":213,\"cloudCover\":0.94,\"uvIndex\":0.0,\"visibility\":8.57,\"ozone\":481.88,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773896400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.76,\"apparentTemperature\":20.5,\"dewPoint\":33.44,\"humidity\":0.84,\"pressure\":990.7,\"windSpeed\":25.29,\"windGust\":37.93,\"windBearing\":220,\"cloudCover\":0.96,\"uvIndex\":0.0,\"visibility\":8.14,\"ozone\":489.93,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773900000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.76,\"apparentTemperature\":19.49,\"dewPoint\":33.44,\"humidity\":0.84,\"pressure\":991.3,\"windSpeed\":24.13,\"windGust\":37.93,\"windBearing\":223,\"cloudCover\":0.96,\"uvIndex\":0.07,\"visibility\":7.77,\"ozone\":498.23,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773903600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.58,\"apparentTemperature\":18.35,\"dewPoint\":33.44,\"humidity\":0.85,\"pressure\":992.4,\"windSpeed\":24.13,\"windGust\":36.77,\"windBearing\":231,\"cloudCover\":0.92,\"uvIndex\":0.22,\"visibility\":5.65,\"ozone\":499.77,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773907200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.58,\"apparentTemperature\":18.55,\"dewPoint\":33.62,\"humidity\":0.85,\"pressure\":993.6,\"windSpeed\":24.13,\"windGust\":37.93,\"windBearing\":239,\"cloudCover\":0.9,\"uvIndex\":0.32,\"visibility\":5.1,\"ozone\":500.0,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773910800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.04,\"apparentTemperature\":19.31,\"dewPoint\":33.8,\"humidity\":0.88,\"pressure\":994.8,\"windSpeed\":25.29,\"windGust\":36.77,\"windBearing\":249,\"cloudCover\":0.89,\"uvIndex\":0.34,\"visibility\":5.03,\"ozone\":500.0,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773914400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.04,\"apparentTemperature\":20.33,\"dewPoint\":33.98,\"humidity\":0.89,\"pressure\":996.2,\"windSpeed\":25.29,\"windGust\":39.07,\"windBearing\":252,\"cloudCover\":0.91,\"uvIndex\":0.26,\"visibility\":4.23,\"ozone\":500.0,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773918000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":36.86,\"apparentTemperature\":19.67,\"dewPoint\":33.62,\"humidity\":0.88,\"pressure\":997.7,\"windSpeed\":25.29,\"windGust\":40.23,\"windBearing\":259,\"cloudCover\":0.94,\"uvIndex\":0.46,\"visibility\":3.91,\"ozone\":500.0,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773921600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":36.86,\"apparentTemperature\":20.04,\"dewPoint\":33.44,\"humidity\":0.87,\"pressure\":999.2,\"windSpeed\":24.13,\"windGust\":39.07,\"windBearing\":266,\"cloudCover\":0.96,\"uvIndex\":0.61,\"visibility\":3.42,\"ozone\":481.3,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773925200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.99,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":36.68,\"apparentTemperature\":19.86,\"dewPoint\":33.08,\"humidity\":0.87,\"pressure\":1000.6,\"windSpeed\":22.99,\"windGust\":37.93,\"windBearing\":269,\"cloudCover\":0.96,\"uvIndex\":0.59,\"visibility\":2.98,\"ozone\":459.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773928800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.99,\"precipIntensityError\":0.0071,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":36.68,\"apparentTemperature\":20.57,\"dewPoint\":32.9,\"humidity\":0.86,\"pressure\":1002.4,\"windSpeed\":21.83,\"windGust\":36.77,\"windBearing\":275,\"cloudCover\":0.95,\"uvIndex\":0.57,\"visibility\":3.04,\"ozone\":452.14,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773932400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.98,\"precipIntensityError\":0.0071,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":36.68,\"apparentTemperature\":21.43,\"dewPoint\":32.54,\"humidity\":0.85,\"pressure\":1003.7,\"windSpeed\":21.83,\"windGust\":35.63,\"windBearing\":278,\"cloudCover\":0.93,\"uvIndex\":0.37,\"visibility\":4.6,\"ozone\":446.3,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773936000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.99,\"precipIntensityError\":0.0059,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":36.68,\"apparentTemperature\":21.21,\"dewPoint\":32.54,\"humidity\":0.85,\"pressure\":1005.0,\"windSpeed\":19.55,\"windGust\":32.17,\"windBearing\":278,\"cloudCover\":0.94,\"uvIndex\":0.23,\"visibility\":4.35,\"ozone\":438.17,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773939600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.99,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":36.14,\"apparentTemperature\":20.32,\"dewPoint\":32.36,\"humidity\":0.86,\"pressure\":1005.7,\"windSpeed\":18.39,\"windGust\":31.03,\"windBearing\":283,\"cloudCover\":0.95,\"uvIndex\":0.04,\"visibility\":3.98,\"ozone\":427.51,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773943200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":36.32,\"apparentTemperature\":20.32,\"dewPoint\":31.82,\"humidity\":0.84,\"pressure\":1006.2,\"windSpeed\":17.25,\"windGust\":28.73,\"windBearing\":284,\"cloudCover\":0.96,\"uvIndex\":0.0,\"visibility\":4.35,\"ozone\":418.47,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773946800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":36.14,\"apparentTemperature\":22.36,\"dewPoint\":31.46,\"humidity\":0.83,\"pressure\":1006.7,\"windSpeed\":14.95,\"windGust\":25.29,\"windBearing\":277,\"cloudCover\":0.96,\"uvIndex\":0.0,\"visibility\":4.66,\"ozone\":410.76,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773950400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":35.96,\"apparentTemperature\":22.07,\"dewPoint\":31.46,\"humidity\":0.84,\"pressure\":1006.9,\"windSpeed\":12.64,\"windGust\":21.83,\"windBearing\":272,\"cloudCover\":0.97,\"uvIndex\":0.0,\"visibility\":5.53,\"ozone\":405.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773954000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":35.96,\"apparentTemperature\":22.88,\"dewPoint\":30.2,\"humidity\":0.79,\"pressure\":1007.3,\"windSpeed\":11.48,\"windGust\":20.69,\"windBearing\":260,\"cloudCover\":0.98,\"uvIndex\":0.0,\"visibility\":6.4,\"ozone\":400.16,\"nearestStormDistance\":17.29,\"nearestStormBearing\":360},{\"time\":1773957600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.93,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":35.78,\"apparentTemperature\":22.82,\"dewPoint\":30.2,\"humidity\":0.8,\"pressure\":1007.6,\"windSpeed\":11.48,\"windGust\":19.55,\"windBearing\":253,\"cloudCover\":1.0,\"uvIndex\":0.0,\"visibility\":6.96,\"ozone\":394.06,\"nearestStormDistance\":17.29,\"nearestStormBearing\":360},{\"time\":1773961200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.87,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":35.78,\"apparentTemperature\":21.3,\"dewPoint\":30.92,\"humidity\":0.82,\"pressure\":1006.8,\"windSpeed\":12.64,\"windGust\":20.69,\"windBearing\":234,\"cloudCover\":0.98,\"uvIndex\":0.0,\"visibility\":7.77,\"ozone\":389.36,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773964800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.8,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.14,\"apparentTemperature\":22.2,\"dewPoint\":30.38,\"humidity\":0.79,\"pressure\":1006.0,\"windSpeed\":13.78,\"windGust\":21.83,\"windBearing\":221,\"cloudCover\":0.99,\"uvIndex\":0.0,\"visibility\":8.45,\"ozone\":386.76,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773968400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.65,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.14,\"apparentTemperature\":24.23,\"dewPoint\":30.74,\"humidity\":0.81,\"pressure\":1005.5,\"windSpeed\":14.95,\"windGust\":22.99,\"windBearing\":208,\"cloudCover\":1.0,\"uvIndex\":0.0,\"visibility\":9.07,\"ozone\":381.97,\"nearestStormDistance\":42.22,\"nearestStormBearing\":296},{\"time\":1773972000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.51,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.14,\"apparentTemperature\":23.06,\"dewPoint\":30.92,\"humidity\":0.81,\"pressure\":1004.9,\"windSpeed\":17.25,\"windGust\":25.29,\"windBearing\":205,\"cloudCover\":1.0,\"uvIndex\":0.0,\"visibility\":9.38,\"ozone\":377.42,\"nearestStormDistance\":17.29,\"nearestStormBearing\":360},{\"time\":1773975600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.36,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.32,\"apparentTemperature\":22.69,\"dewPoint\":31.46,\"humidity\":0.82,\"pressure\":1004.1,\"windSpeed\":18.39,\"windGust\":26.43,\"windBearing\":201,\"cloudCover\":1.0,\"uvIndex\":0.0,\"visibility\":9.44,\"ozone\":377.53,\"nearestStormDistance\":11.97,\"nearestStormBearing\":270},{\"time\":1773979200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.55,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":36.68,\"apparentTemperature\":23.48,\"dewPoint\":31.82,\"humidity\":0.82,\"pressure\":1002.7,\"windSpeed\":20.69,\"windGust\":28.73,\"windBearing\":196,\"cloudCover\":1.0,\"uvIndex\":0.0,\"visibility\":9.01,\"ozone\":376.97,\"nearestStormDistance\":5.99,\"nearestStormBearing\":270},{\"time\":1773982800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.73,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.04,\"apparentTemperature\":21.78,\"dewPoint\":32.54,\"humidity\":0.84,\"pressure\":1002.0,\"windSpeed\":21.83,\"windGust\":31.03,\"windBearing\":196,\"cloudCover\":1.0,\"uvIndex\":0.0,\"visibility\":8.57,\"ozone\":376.81,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773986400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.92,\"precipIntensityError\":0.0099,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.58,\"apparentTemperature\":22.73,\"dewPoint\":32.9,\"humidity\":0.83,\"pressure\":1001.4,\"windSpeed\":22.99,\"windGust\":33.33,\"windBearing\":193,\"cloudCover\":1.0,\"uvIndex\":0.04,\"visibility\":8.39,\"ozone\":377.73,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773990000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.95,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.76,\"apparentTemperature\":23.16,\"dewPoint\":33.26,\"humidity\":0.84,\"pressure\":1000.7,\"windSpeed\":24.13,\"windGust\":34.47,\"windBearing\":195,\"cloudCover\":1.0,\"uvIndex\":0.15,\"visibility\":8.39,\"ozone\":372.36,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773993600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.97,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":38.3,\"apparentTemperature\":23.19,\"dewPoint\":33.8,\"humidity\":0.84,\"pressure\":1000.1,\"windSpeed\":25.29,\"windGust\":35.63,\"windBearing\":201,\"cloudCover\":1.0,\"uvIndex\":0.22,\"visibility\":9.13,\"ozone\":369.67,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1773997200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":38.66,\"apparentTemperature\":23.69,\"dewPoint\":33.98,\"humidity\":0.83,\"pressure\":999.7,\"windSpeed\":26.43,\"windGust\":37.93,\"windBearing\":204,\"cloudCover\":1.0,\"uvIndex\":0.3,\"visibility\":10.0,\"ozone\":368.43,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774000800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":23.45,\"dewPoint\":34.52,\"humidity\":0.83,\"pressure\":999.2,\"windSpeed\":26.43,\"windGust\":39.07,\"windBearing\":204,\"cloudCover\":1.0,\"uvIndex\":0.37,\"visibility\":8.89,\"ozone\":369.57,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774004400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":39.56,\"apparentTemperature\":24.18,\"dewPoint\":34.88,\"humidity\":0.83,\"pressure\":998.9,\"windSpeed\":26.43,\"windGust\":40.23,\"windBearing\":206,\"cloudCover\":1.0,\"uvIndex\":0.52,\"visibility\":9.07,\"ozone\":369.23,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774008000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0221,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.56,\"apparentTemperature\":24.53,\"dewPoint\":35.06,\"humidity\":0.84,\"pressure\":998.8,\"windSpeed\":27.59,\"windGust\":40.23,\"windBearing\":207,\"cloudCover\":1.0,\"uvIndex\":0.57,\"visibility\":10.0,\"ozone\":367.47,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774011600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.99,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.74,\"apparentTemperature\":24.62,\"dewPoint\":35.24,\"humidity\":0.84,\"pressure\":998.7,\"windSpeed\":27.59,\"windGust\":40.23,\"windBearing\":210,\"cloudCover\":1.0,\"uvIndex\":0.48,\"visibility\":10.0,\"ozone\":367.93,\"nearestStormDistance\":5.99,\"nearestStormBearing\":270},{\"time\":1774015200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.99,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.92,\"apparentTemperature\":25.2,\"dewPoint\":35.24,\"humidity\":0.83,\"pressure\":998.8,\"windSpeed\":27.59,\"windGust\":39.07,\"windBearing\":210,\"cloudCover\":1.0,\"uvIndex\":0.37,\"visibility\":10.0,\"ozone\":370.14,\"nearestStormDistance\":11.97,\"nearestStormBearing\":270},{\"time\":1774018800,\"summary\":\"Light + Rain and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":0.98,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":40.46,\"apparentTemperature\":25.21,\"dewPoint\":35.78,\"humidity\":0.83,\"pressure\":998.8,\"windSpeed\":27.59,\"windGust\":39.07,\"windBearing\":210,\"cloudCover\":1.0,\"uvIndex\":0.31,\"visibility\":10.0,\"ozone\":368.53,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774022400,\"summary\":\"Light + Rain and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":0.99,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":40.46,\"apparentTemperature\":26.91,\"dewPoint\":35.78,\"humidity\":0.83,\"pressure\":998.4,\"windSpeed\":27.59,\"windGust\":37.93,\"windBearing\":210,\"cloudCover\":1.0,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":373.19,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774026000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.99,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":40.1,\"apparentTemperature\":28.87,\"dewPoint\":35.6,\"humidity\":0.84,\"pressure\":998.3,\"windSpeed\":26.43,\"windGust\":37.93,\"windBearing\":210,\"cloudCover\":1.0,\"uvIndex\":0.01,\"visibility\":10.0,\"ozone\":376.83,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774029600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.74,\"apparentTemperature\":30.54,\"dewPoint\":35.06,\"humidity\":0.83,\"pressure\":998.0,\"windSpeed\":25.29,\"windGust\":36.77,\"windBearing\":209,\"cloudCover\":1.0,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":382.08,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774033200,\"summary\":\"Light + Rain and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":1.0,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":40.1,\"apparentTemperature\":28.66,\"dewPoint\":35.06,\"humidity\":0.82,\"pressure\":997.8,\"windSpeed\":24.13,\"windGust\":33.33,\"windBearing\":211,\"cloudCover\":0.99,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":385.1,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774036800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0193,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.92,\"apparentTemperature\":27.04,\"dewPoint\":34.88,\"humidity\":0.82,\"pressure\":997.6,\"windSpeed\":22.99,\"windGust\":32.17,\"windBearing\":211,\"cloudCover\":0.99,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.77,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774040400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":39.74,\"apparentTemperature\":27.3,\"dewPoint\":34.88,\"humidity\":0.83,\"pressure\":997.2,\"windSpeed\":22.99,\"windGust\":31.03,\"windBearing\":208,\"cloudCover\":0.98,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.36,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774044000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.92,\"apparentTemperature\":26.11,\"dewPoint\":34.88,\"humidity\":0.82,\"pressure\":996.8,\"windSpeed\":21.83,\"windGust\":31.03,\"windBearing\":208,\"cloudCover\":0.98,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774047600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":40.1,\"apparentTemperature\":25.46,\"dewPoint\":35.06,\"humidity\":0.82,\"pressure\":996.3,\"windSpeed\":21.83,\"windGust\":31.03,\"windBearing\":209,\"cloudCover\":0.98,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":397.65,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774051200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":39.74,\"apparentTemperature\":25.62,\"dewPoint\":34.7,\"humidity\":0.82,\"pressure\":995.9,\"windSpeed\":21.83,\"windGust\":31.03,\"windBearing\":208,\"cloudCover\":0.99,\"uvIndex\":0.0,\"visibility\":8.57,\"ozone\":406.51,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774054800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.99,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":39.56,\"apparentTemperature\":24.82,\"dewPoint\":34.7,\"humidity\":0.83,\"pressure\":995.6,\"windSpeed\":22.99,\"windGust\":32.17,\"windBearing\":207,\"cloudCover\":0.99,\"uvIndex\":0.0,\"visibility\":9.51,\"ozone\":412.04,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774058400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.99,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":23.59,\"dewPoint\":34.88,\"humidity\":0.84,\"pressure\":995.3,\"windSpeed\":22.99,\"windGust\":33.33,\"windBearing\":209,\"cloudCover\":0.98,\"uvIndex\":0.0,\"visibility\":8.76,\"ozone\":415.49,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774062000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.98,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.02,\"apparentTemperature\":25.98,\"dewPoint\":34.52,\"humidity\":0.84,\"pressure\":994.9,\"windSpeed\":21.83,\"windGust\":32.17,\"windBearing\":209,\"cloudCover\":0.98,\"uvIndex\":0.0,\"visibility\":8.82,\"ozone\":420.57,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774065600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.98,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.02,\"apparentTemperature\":25.87,\"dewPoint\":34.16,\"humidity\":0.83,\"pressure\":995.1,\"windSpeed\":21.83,\"windGust\":32.17,\"windBearing\":208,\"cloudCover\":0.96,\"uvIndex\":0.0,\"visibility\":9.2,\"ozone\":421.35,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774069200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.98,\"precipIntensityError\":0.0193,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":38.66,\"apparentTemperature\":25.97,\"dewPoint\":33.8,\"humidity\":0.83,\"pressure\":995.0,\"windSpeed\":21.83,\"windGust\":32.17,\"windBearing\":208,\"cloudCover\":0.96,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":423.72,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774072800,\"summary\":\"Light + Rain and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":0.98,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":38.48,\"apparentTemperature\":25.88,\"dewPoint\":33.62,\"humidity\":0.82,\"pressure\":995.3,\"windSpeed\":21.83,\"windGust\":32.17,\"windBearing\":208,\"cloudCover\":0.93,\"uvIndex\":0.04,\"visibility\":9.44,\"ozone\":427.47,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774076400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.98,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":38.12,\"apparentTemperature\":23.63,\"dewPoint\":33.62,\"humidity\":0.84,\"pressure\":995.3,\"windSpeed\":21.83,\"windGust\":32.17,\"windBearing\":208,\"cloudCover\":0.92,\"uvIndex\":0.08,\"visibility\":9.63,\"ozone\":425.6,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774080000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.98,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":38.3,\"apparentTemperature\":19.7,\"dewPoint\":33.62,\"humidity\":0.83,\"pressure\":995.4,\"windSpeed\":20.69,\"windGust\":31.03,\"windBearing\":209,\"cloudCover\":0.9,\"uvIndex\":0.3,\"visibility\":9.13,\"ozone\":431.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774083600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.98,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":38.66,\"apparentTemperature\":20.03,\"dewPoint\":33.26,\"humidity\":0.81,\"pressure\":995.6,\"windSpeed\":21.83,\"windGust\":32.17,\"windBearing\":208,\"cloudCover\":0.85,\"uvIndex\":0.75,\"visibility\":10.0,\"ozone\":433.76,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774087200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.99,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":39.02,\"apparentTemperature\":20.39,\"dewPoint\":33.26,\"humidity\":0.8,\"pressure\":995.6,\"windSpeed\":22.99,\"windGust\":33.33,\"windBearing\":209,\"cloudCover\":0.83,\"uvIndex\":1.05,\"visibility\":8.82,\"ozone\":437.41,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774090800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.99,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":38.66,\"apparentTemperature\":19.31,\"dewPoint\":33.08,\"humidity\":0.8,\"pressure\":995.5,\"windSpeed\":24.13,\"windGust\":35.63,\"windBearing\":210,\"cloudCover\":0.8,\"uvIndex\":1.27,\"visibility\":9.38,\"ozone\":439.15,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774094400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":39.02,\"apparentTemperature\":19.47,\"dewPoint\":31.82,\"humidity\":0.75,\"pressure\":995.4,\"windSpeed\":24.13,\"windGust\":35.63,\"windBearing\":211,\"cloudCover\":0.76,\"uvIndex\":0.91,\"visibility\":10.0,\"ozone\":442.98,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774098000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.99,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":38.84,\"apparentTemperature\":17.95,\"dewPoint\":32.18,\"humidity\":0.77,\"pressure\":995.1,\"windSpeed\":24.13,\"windGust\":36.77,\"windBearing\":209,\"cloudCover\":0.76,\"uvIndex\":0.53,\"visibility\":10.0,\"ozone\":442.81,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774101600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.97,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":38.48,\"apparentTemperature\":18.94,\"dewPoint\":31.64,\"humidity\":0.76,\"pressure\":995.1,\"windSpeed\":26.43,\"windGust\":39.07,\"windBearing\":210,\"cloudCover\":0.77,\"uvIndex\":0.62,\"visibility\":9.13,\"ozone\":442.84,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774105200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.96,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.12,\"apparentTemperature\":18.59,\"dewPoint\":31.46,\"humidity\":0.77,\"pressure\":994.7,\"windSpeed\":25.29,\"windGust\":39.07,\"windBearing\":211,\"cloudCover\":0.8,\"uvIndex\":0.61,\"visibility\":9.2,\"ozone\":445.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774108800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.97,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.76,\"apparentTemperature\":17.48,\"dewPoint\":31.28,\"humidity\":0.77,\"pressure\":994.5,\"windSpeed\":25.29,\"windGust\":40.23,\"windBearing\":214,\"cloudCover\":0.81,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":443.62,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774112400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.97,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.22,\"apparentTemperature\":17.89,\"dewPoint\":30.92,\"humidity\":0.78,\"pressure\":994.3,\"windSpeed\":24.13,\"windGust\":39.07,\"windBearing\":214,\"cloudCover\":0.81,\"uvIndex\":0.08,\"visibility\":9.88,\"ozone\":441.7,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774116000,\"summary\":\"Light + Rain and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":0.98,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":36.68,\"apparentTemperature\":15.55,\"dewPoint\":30.56,\"humidity\":0.78,\"pressure\":994.3,\"windSpeed\":26.43,\"windGust\":39.07,\"windBearing\":215,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":8.7,\"ozone\":441.11,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774119600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.98,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":35.96,\"apparentTemperature\":13.98,\"dewPoint\":30.38,\"humidity\":0.8,\"pressure\":994.2,\"windSpeed\":26.43,\"windGust\":40.23,\"windBearing\":216,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":7.52,\"ozone\":446.52,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774123200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.98,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":35.6,\"apparentTemperature\":14.23,\"dewPoint\":30.2,\"humidity\":0.8,\"pressure\":994.1,\"windSpeed\":25.29,\"windGust\":40.23,\"windBearing\":215,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":6.96,\"ozone\":451.35,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774126800,\"summary\":\"Light + Rain and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0197,\"precipProbability\":0.98,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0197,\"precipType\":\"rain\",\"temperature\":35.24,\"apparentTemperature\":14.21,\"dewPoint\":30.2,\"humidity\":0.82,\"pressure\":993.8,\"windSpeed\":26.43,\"windGust\":40.23,\"windBearing\":213,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":7.52,\"ozone\":455.0,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774130400,\"summary\":\"Light + Rain and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":0.98,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":35.42,\"apparentTemperature\":14.47,\"dewPoint\":30.2,\"humidity\":0.81,\"pressure\":993.9,\"windSpeed\":25.29,\"windGust\":39.07,\"windBearing\":214,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":6.65,\"ozone\":461.63,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774134000,\"summary\":\"Light + Rain and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":0.98,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":35.42,\"apparentTemperature\":15.11,\"dewPoint\":30.38,\"humidity\":0.82,\"pressure\":993.9,\"windSpeed\":25.29,\"windGust\":37.93,\"windBearing\":215,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":6.15,\"ozone\":463.83,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774137600,\"summary\":\"Light + Rain and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":0.98,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":35.42,\"apparentTemperature\":14.33,\"dewPoint\":30.2,\"humidity\":0.81,\"pressure\":994.0,\"windSpeed\":24.13,\"windGust\":39.07,\"windBearing\":215,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":5.41,\"ozone\":466.7,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774141200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.99,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":35.6,\"apparentTemperature\":14.04,\"dewPoint\":29.84,\"humidity\":0.79,\"pressure\":993.6,\"windSpeed\":25.29,\"windGust\":39.07,\"windBearing\":215,\"cloudCover\":0.89,\"uvIndex\":0.0,\"visibility\":5.41,\"ozone\":468.7,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774144800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.99,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":35.24,\"apparentTemperature\":14.09,\"dewPoint\":29.66,\"humidity\":0.8,\"pressure\":993.6,\"windSpeed\":25.29,\"windGust\":37.93,\"windBearing\":216,\"cloudCover\":0.9,\"uvIndex\":0.0,\"visibility\":5.1,\"ozone\":471.33,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774148400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0099,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":35.24,\"apparentTemperature\":15.59,\"dewPoint\":29.66,\"humidity\":0.8,\"pressure\":993.8,\"windSpeed\":25.29,\"windGust\":39.07,\"windBearing\":216,\"cloudCover\":0.89,\"uvIndex\":0.0,\"visibility\":5.28,\"ozone\":469.38,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774152000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0099,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":34.88,\"apparentTemperature\":13.97,\"dewPoint\":29.84,\"humidity\":0.82,\"pressure\":994.1,\"windSpeed\":24.13,\"windGust\":37.93,\"windBearing\":215,\"cloudCover\":0.91,\"uvIndex\":0.0,\"visibility\":5.84,\"ozone\":461.34,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774155600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":35.06,\"apparentTemperature\":14.67,\"dewPoint\":30.2,\"humidity\":0.82,\"pressure\":994.1,\"windSpeed\":24.13,\"windGust\":36.77,\"windBearing\":211,\"cloudCover\":0.92,\"uvIndex\":0.0,\"visibility\":5.97,\"ozone\":459.6,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774159200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":1.0,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":35.42,\"apparentTemperature\":16.13,\"dewPoint\":30.74,\"humidity\":0.83,\"pressure\":993.8,\"windSpeed\":22.99,\"windGust\":35.63,\"windBearing\":210,\"cloudCover\":0.94,\"uvIndex\":0.16,\"visibility\":6.59,\"ozone\":452.6,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774162800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0099,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":35.24,\"apparentTemperature\":15.71,\"dewPoint\":31.1,\"humidity\":0.85,\"pressure\":993.5,\"windSpeed\":22.99,\"windGust\":37.93,\"windBearing\":212,\"cloudCover\":0.94,\"uvIndex\":0.44,\"visibility\":6.59,\"ozone\":443.71,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774166400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":1.0,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":35.78,\"apparentTemperature\":15.18,\"dewPoint\":31.1,\"humidity\":0.83,\"pressure\":993.2,\"windSpeed\":22.99,\"windGust\":36.77,\"windBearing\":211,\"cloudCover\":0.95,\"uvIndex\":0.8,\"visibility\":6.71,\"ozone\":439.86,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774170000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":1.0,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.32,\"apparentTemperature\":16.97,\"dewPoint\":31.1,\"humidity\":0.81,\"pressure\":992.6,\"windSpeed\":22.99,\"windGust\":37.93,\"windBearing\":212,\"cloudCover\":0.94,\"uvIndex\":0.94,\"visibility\":6.71,\"ozone\":437.91,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774173600,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.93,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.86,\"apparentTemperature\":17.09,\"dewPoint\":31.28,\"humidity\":0.8,\"pressure\":992.0,\"windSpeed\":22.99,\"windGust\":34.47,\"windBearing\":210,\"cloudCover\":0.95,\"uvIndex\":1.2,\"visibility\":6.65,\"ozone\":435.76,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774177200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.87,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.22,\"apparentTemperature\":17.65,\"dewPoint\":31.46,\"humidity\":0.79,\"pressure\":991.7,\"windSpeed\":21.83,\"windGust\":33.33,\"windBearing\":211,\"cloudCover\":0.96,\"uvIndex\":1.17,\"visibility\":7.21,\"ozone\":436.05,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774180800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.8,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.12,\"apparentTemperature\":20.71,\"dewPoint\":32.36,\"humidity\":0.8,\"pressure\":990.3,\"windSpeed\":22.99,\"windGust\":33.33,\"windBearing\":207,\"cloudCover\":0.96,\"uvIndex\":1.06,\"visibility\":9.44,\"ozone\":435.66,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774184400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.75,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.12,\"apparentTemperature\":22.71,\"dewPoint\":32.36,\"humidity\":0.8,\"pressure\":989.6,\"windSpeed\":21.83,\"windGust\":32.17,\"windBearing\":205,\"cloudCover\":0.96,\"uvIndex\":1.22,\"visibility\":10.0,\"ozone\":432.88,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774188000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.69,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.12,\"apparentTemperature\":22.75,\"dewPoint\":32.36,\"humidity\":0.8,\"pressure\":988.8,\"windSpeed\":21.83,\"windGust\":31.03,\"windBearing\":204,\"cloudCover\":0.94,\"uvIndex\":0.91,\"visibility\":10.0,\"ozone\":426.97,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774191600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.64,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.3,\"apparentTemperature\":23.83,\"dewPoint\":31.64,\"humidity\":0.77,\"pressure\":987.4,\"windSpeed\":21.83,\"windGust\":31.03,\"windBearing\":204,\"cloudCover\":0.92,\"uvIndex\":0.71,\"visibility\":10.0,\"ozone\":426.51,\"nearestStormDistance\":18.29,\"nearestStormBearing\":225},{\"time\":1774195200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.67,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":38.12,\"apparentTemperature\":21.83,\"dewPoint\":32.0,\"humidity\":0.78,\"pressure\":986.6,\"windSpeed\":20.69,\"windGust\":32.17,\"windBearing\":203,\"cloudCover\":0.95,\"uvIndex\":0.44,\"visibility\":10.0,\"ozone\":425.81,\"nearestStormDistance\":20.99,\"nearestStormBearing\":243},{\"time\":1774198800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.69,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.76,\"apparentTemperature\":22.24,\"dewPoint\":32.18,\"humidity\":0.8,\"pressure\":985.2,\"windSpeed\":19.55,\"windGust\":32.17,\"windBearing\":202,\"cloudCover\":0.96,\"uvIndex\":0.07,\"visibility\":10.0,\"ozone\":426.2,\"nearestStormDistance\":11.97,\"nearestStormBearing\":270},{\"time\":1774202400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.72,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.4,\"apparentTemperature\":20.55,\"dewPoint\":32.18,\"humidity\":0.81,\"pressure\":984.3,\"windSpeed\":19.55,\"windGust\":31.03,\"windBearing\":205,\"cloudCover\":0.91,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":429.35,\"nearestStormDistance\":5.99,\"nearestStormBearing\":270},{\"time\":1774206000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.73,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.22,\"apparentTemperature\":21.47,\"dewPoint\":32.0,\"humidity\":0.81,\"pressure\":983.8,\"windSpeed\":19.55,\"windGust\":29.89,\"windBearing\":202,\"cloudCover\":0.91,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":432.5,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774209600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.73,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.4,\"apparentTemperature\":20.27,\"dewPoint\":32.18,\"humidity\":0.81,\"pressure\":983.7,\"windSpeed\":19.55,\"windGust\":31.03,\"windBearing\":200,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":435.79,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774213200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.74,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.4,\"apparentTemperature\":20.48,\"dewPoint\":31.64,\"humidity\":0.79,\"pressure\":983.0,\"windSpeed\":20.69,\"windGust\":29.89,\"windBearing\":199,\"cloudCover\":0.8,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":443.06,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774216800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.7,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.22,\"apparentTemperature\":19.47,\"dewPoint\":31.82,\"humidity\":0.81,\"pressure\":982.8,\"windSpeed\":19.55,\"windGust\":28.73,\"windBearing\":202,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":450.24,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774220400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.66,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.04,\"apparentTemperature\":19.49,\"dewPoint\":31.64,\"humidity\":0.81,\"pressure\":982.6,\"windSpeed\":19.55,\"windGust\":29.89,\"windBearing\":205,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":454.61,\"nearestStormDistance\":5.99,\"nearestStormBearing\":90},{\"time\":1774224000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.62,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.04,\"apparentTemperature\":18.23,\"dewPoint\":31.46,\"humidity\":0.8,\"pressure\":981.7,\"windSpeed\":19.55,\"windGust\":27.59,\"windBearing\":202,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":456.06,\"nearestStormDistance\":5.99,\"nearestStormBearing\":90},{\"time\":1774227600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.61,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.86,\"apparentTemperature\":17.03,\"dewPoint\":31.1,\"humidity\":0.79,\"pressure\":980.3,\"windSpeed\":19.55,\"windGust\":28.73,\"windBearing\":201,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":458.3,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774231200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.59,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.86,\"apparentTemperature\":17.49,\"dewPoint\":30.38,\"humidity\":0.77,\"pressure\":979.6,\"windSpeed\":19.55,\"windGust\":28.73,\"windBearing\":202,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":456.96,\"nearestStormDistance\":5.99,\"nearestStormBearing\":90},{\"time\":1774234800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.58,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":36.86,\"apparentTemperature\":18.32,\"dewPoint\":30.02,\"humidity\":0.76,\"pressure\":978.4,\"windSpeed\":19.55,\"windGust\":28.73,\"windBearing\":203,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":454.29,\"nearestStormDistance\":5.99,\"nearestStormBearing\":270},{\"time\":1774238400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.56,\"precipIntensityError\":0.0146,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.04,\"apparentTemperature\":20.37,\"dewPoint\":29.12,\"humidity\":0.73,\"pressure\":977.5,\"windSpeed\":17.25,\"windGust\":26.43,\"windBearing\":203,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":452.98,\"nearestStormDistance\":11.97,\"nearestStormBearing\":270},{\"time\":1774242000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.54,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":36.86,\"apparentTemperature\":21.63,\"dewPoint\":28.76,\"humidity\":0.72,\"pressure\":976.8,\"windSpeed\":16.08,\"windGust\":28.73,\"windBearing\":202,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":452.04,\"nearestStormDistance\":5.99,\"nearestStormBearing\":270},{\"time\":1774245600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.52,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":36.86,\"apparentTemperature\":21.39,\"dewPoint\":28.4,\"humidity\":0.71,\"pressure\":976.5,\"windSpeed\":16.08,\"windGust\":28.73,\"windBearing\":203,\"cloudCover\":0.76,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":451.46,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774249200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.51,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":37.76,\"apparentTemperature\":22.52,\"dewPoint\":28.76,\"humidity\":0.7,\"pressure\":975.7,\"windSpeed\":16.08,\"windGust\":29.89,\"windBearing\":205,\"cloudCover\":0.73,\"uvIndex\":0.37,\"visibility\":10.0,\"ozone\":451.14,\"nearestStormDistance\":11.97,\"nearestStormBearing\":270},{\"time\":1774252800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.49,\"precipIntensityError\":0.0154,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":38.3,\"apparentTemperature\":21.62,\"dewPoint\":28.94,\"humidity\":0.69,\"pressure\":975.5,\"windSpeed\":17.25,\"windGust\":28.73,\"windBearing\":203,\"cloudCover\":0.73,\"uvIndex\":0.74,\"visibility\":10.0,\"ozone\":451.4,\"nearestStormDistance\":5.99,\"nearestStormBearing\":270},{\"time\":1774256400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.48,\"precipIntensityError\":0.0146,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.66,\"apparentTemperature\":20.72,\"dewPoint\":28.76,\"humidity\":0.67,\"pressure\":975.0,\"windSpeed\":18.39,\"windGust\":29.89,\"windBearing\":203,\"cloudCover\":0.7,\"uvIndex\":0.85,\"visibility\":10.0,\"ozone\":452.26,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774260000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.47,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.84,\"apparentTemperature\":20.13,\"dewPoint\":29.12,\"humidity\":0.68,\"pressure\":975.1,\"windSpeed\":20.69,\"windGust\":29.89,\"windBearing\":203,\"cloudCover\":0.72,\"uvIndex\":1.07,\"visibility\":10.0,\"ozone\":448.16,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774263600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.45,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":39.02,\"apparentTemperature\":20.83,\"dewPoint\":29.12,\"humidity\":0.67,\"pressure\":975.1,\"windSpeed\":21.83,\"windGust\":31.03,\"windBearing\":204,\"cloudCover\":0.71,\"uvIndex\":1.62,\"visibility\":10.0,\"ozone\":445.4,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774267200,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.44,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":39.74,\"apparentTemperature\":17.72,\"dewPoint\":29.48,\"humidity\":0.66,\"pressure\":976.1,\"windSpeed\":22.99,\"windGust\":31.03,\"windBearing\":203,\"cloudCover\":0.91,\"uvIndex\":0.58,\"visibility\":10.0,\"ozone\":445.92,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774270800,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.46,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.84,\"apparentTemperature\":17.47,\"dewPoint\":29.66,\"humidity\":0.69,\"pressure\":976.9,\"windSpeed\":22.99,\"windGust\":33.33,\"windBearing\":203,\"cloudCover\":0.87,\"uvIndex\":0.63,\"visibility\":10.0,\"ozone\":448.15,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774274400,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.48,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":38.12,\"apparentTemperature\":17.22,\"dewPoint\":29.48,\"humidity\":0.71,\"pressure\":977.3,\"windSpeed\":22.99,\"windGust\":32.17,\"windBearing\":209,\"cloudCover\":0.84,\"uvIndex\":0.68,\"visibility\":10.0,\"ozone\":450.39,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774278000,\"summary\":\"Drizzle + and Windy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.5,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.58,\"apparentTemperature\":16.97,\"dewPoint\":29.3,\"humidity\":0.72,\"pressure\":978.3,\"windSpeed\":22.99,\"windGust\":31.03,\"windBearing\":214,\"cloudCover\":0.81,\"uvIndex\":0.74,\"visibility\":10.0,\"ozone\":452.62,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774281600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.47,\"precipIntensityError\":0.0146,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":37.04,\"apparentTemperature\":17.2,\"dewPoint\":29.84,\"humidity\":0.75,\"pressure\":979.2,\"windSpeed\":21.83,\"windGust\":28.73,\"windBearing\":217,\"cloudCover\":0.79,\"uvIndex\":0.56,\"visibility\":10.0,\"ozone\":453.78,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774285200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.45,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.5,\"apparentTemperature\":17.44,\"dewPoint\":29.66,\"humidity\":0.76,\"pressure\":979.5,\"windSpeed\":20.69,\"windGust\":31.03,\"windBearing\":224,\"cloudCover\":0.75,\"uvIndex\":0.38,\"visibility\":10.0,\"ozone\":454.94,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774288800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.42,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.14,\"apparentTemperature\":17.68,\"dewPoint\":29.3,\"humidity\":0.76,\"pressure\":981.0,\"windSpeed\":20.69,\"windGust\":32.17,\"windBearing\":223,\"cloudCover\":0.73,\"uvIndex\":0.2,\"visibility\":10.0,\"ozone\":456.1,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774292400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.4,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":36.14,\"apparentTemperature\":16.69,\"dewPoint\":29.3,\"humidity\":0.76,\"pressure\":981.6,\"windSpeed\":19.55,\"windGust\":32.17,\"windBearing\":222,\"cloudCover\":0.77,\"uvIndex\":0.13,\"visibility\":10.0,\"ozone\":457.37,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774296000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.38,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":35.96,\"apparentTemperature\":15.7,\"dewPoint\":29.3,\"humidity\":0.76,\"pressure\":982.1,\"windSpeed\":19.55,\"windGust\":32.17,\"windBearing\":220,\"cloudCover\":0.79,\"uvIndex\":0.07,\"visibility\":9.57,\"ozone\":458.64,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774299600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.36,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":35.78,\"apparentTemperature\":14.71,\"dewPoint\":28.94,\"humidity\":0.76,\"pressure\":982.6,\"windSpeed\":20.69,\"windGust\":28.73,\"windBearing\":219,\"cloudCover\":0.81,\"uvIndex\":0.0,\"visibility\":9.32,\"ozone\":459.9,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774303200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.41,\"precipIntensityError\":0.0193,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":35.78,\"apparentTemperature\":14.42,\"dewPoint\":29.3,\"humidity\":0.77,\"pressure\":983.1,\"windSpeed\":20.69,\"windGust\":31.03,\"windBearing\":218,\"cloudCover\":0.81,\"uvIndex\":0.0,\"visibility\":8.33,\"ozone\":460.12,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774306800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.47,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":35.06,\"apparentTemperature\":14.13,\"dewPoint\":28.94,\"humidity\":0.78,\"pressure\":983.9,\"windSpeed\":19.55,\"windGust\":34.47,\"windBearing\":226,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":7.08,\"ozone\":460.34,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774310400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.52,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":35.24,\"apparentTemperature\":13.84,\"dewPoint\":29.12,\"humidity\":0.78,\"pressure\":984.8,\"windSpeed\":18.39,\"windGust\":28.73,\"windBearing\":225,\"cloudCover\":0.81,\"uvIndex\":0.0,\"visibility\":6.84,\"ozone\":460.56,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774314000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.52,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":34.88,\"apparentTemperature\":14.65,\"dewPoint\":28.58,\"humidity\":0.78,\"pressure\":985.0,\"windSpeed\":20.69,\"windGust\":28.73,\"windBearing\":226,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":7.7,\"ozone\":461.63,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774317600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.53,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":34.7,\"apparentTemperature\":15.46,\"dewPoint\":28.22,\"humidity\":0.77,\"pressure\":985.4,\"windSpeed\":20.69,\"windGust\":27.59,\"windBearing\":225,\"cloudCover\":0.83,\"uvIndex\":0.0,\"visibility\":7.95,\"ozone\":462.7,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774321200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0118,\"precipProbability\":0.53,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0118,\"precipType\":\"rain\",\"temperature\":34.34,\"apparentTemperature\":16.28,\"dewPoint\":28.22,\"humidity\":0.78,\"pressure\":985.6,\"windSpeed\":20.69,\"windGust\":29.89,\"windBearing\":222,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":6.59,\"ozone\":463.77,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774324800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.53,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":34.34,\"apparentTemperature\":16.17,\"dewPoint\":28.04,\"humidity\":0.77,\"pressure\":986.0,\"windSpeed\":20.69,\"windGust\":31.03,\"windBearing\":219,\"cloudCover\":0.84,\"uvIndex\":0.02,\"visibility\":6.09,\"ozone\":464.62,\"nearestStormDistance\":2.0,\"nearestStormBearing\":30},{\"time\":1774328400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.54,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":34.7,\"apparentTemperature\":16.06,\"dewPoint\":28.04,\"humidity\":0.76,\"pressure\":986.4,\"windSpeed\":20.69,\"windGust\":29.89,\"windBearing\":219,\"cloudCover\":0.86,\"uvIndex\":0.04,\"visibility\":6.15,\"ozone\":465.48,\"nearestStormDistance\":3.99,\"nearestStormBearing\":60},{\"time\":1774332000,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.54,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":34.52,\"apparentTemperature\":15.95,\"dewPoint\":28.22,\"humidity\":0.77,\"pressure\":987.8,\"windSpeed\":20.69,\"windGust\":27.59,\"windBearing\":212,\"cloudCover\":0.86,\"uvIndex\":0.06,\"visibility\":7.08,\"ozone\":466.34,\"nearestStormDistance\":5.99,\"nearestStormBearing\":90},{\"time\":1774335600,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.53,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":34.7,\"apparentTemperature\":16.48,\"dewPoint\":28.4,\"humidity\":0.78,\"pressure\":988.2,\"windSpeed\":19.55,\"windGust\":28.73,\"windBearing\":210,\"cloudCover\":0.84,\"uvIndex\":0.36,\"visibility\":6.52,\"ozone\":466.61,\"nearestStormDistance\":9.75,\"nearestStormBearing\":120},{\"time\":1774339200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.51,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":34.7,\"apparentTemperature\":17.02,\"dewPoint\":28.76,\"humidity\":0.79,\"pressure\":988.8,\"windSpeed\":20.69,\"windGust\":29.89,\"windBearing\":209,\"cloudCover\":0.82,\"uvIndex\":0.65,\"visibility\":6.71,\"ozone\":466.88,\"nearestStormDistance\":13.52,\"nearestStormBearing\":150},{\"time\":1774342800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.5,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":34.7,\"apparentTemperature\":17.55,\"dewPoint\":28.76,\"humidity\":0.79,\"pressure\":989.1,\"windSpeed\":17.25,\"windGust\":27.59,\"windBearing\":212,\"cloudCover\":0.79,\"uvIndex\":0.95,\"visibility\":6.09,\"ozone\":467.14,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774346400,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.49,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":34.7,\"apparentTemperature\":19.43,\"dewPoint\":28.58,\"humidity\":0.78,\"pressure\":989.5,\"windSpeed\":19.55,\"windGust\":28.73,\"windBearing\":209,\"cloudCover\":0.78,\"uvIndex\":1.19,\"visibility\":6.59,\"ozone\":466.67,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774350000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.47,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.52,\"apparentTemperature\":21.31,\"dewPoint\":28.4,\"humidity\":0.78,\"pressure\":989.6,\"windSpeed\":19.55,\"windGust\":26.43,\"windBearing\":208,\"cloudCover\":0.76,\"uvIndex\":1.44,\"visibility\":5.84,\"ozone\":466.19,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774353600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.46,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":34.88,\"apparentTemperature\":23.19,\"dewPoint\":28.4,\"humidity\":0.77,\"pressure\":990.1,\"windSpeed\":20.69,\"windGust\":26.43,\"windBearing\":214,\"cloudCover\":0.76,\"uvIndex\":1.68,\"visibility\":8.02,\"ozone\":465.72,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774357200,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.45,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":35.42,\"apparentTemperature\":24.65,\"dewPoint\":28.4,\"humidity\":0.75,\"pressure\":990.6,\"windSpeed\":18.39,\"windGust\":28.73,\"windBearing\":210,\"cloudCover\":0.77,\"uvIndex\":1.54,\"visibility\":8.14,\"ozone\":466.7,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774360800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.44,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":35.24,\"apparentTemperature\":26.11,\"dewPoint\":27.68,\"humidity\":0.74,\"pressure\":990.7,\"windSpeed\":18.39,\"windGust\":28.73,\"windBearing\":214,\"cloudCover\":0.76,\"uvIndex\":1.4,\"visibility\":9.32,\"ozone\":467.68,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774364400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.43,\"precipIntensityError\":0.0102,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":35.06,\"apparentTemperature\":27.57,\"dewPoint\":27.68,\"humidity\":0.74,\"pressure\":990.8,\"windSpeed\":16.08,\"windGust\":31.03,\"windBearing\":218,\"cloudCover\":0.76,\"uvIndex\":1.26,\"visibility\":8.7,\"ozone\":468.66,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774368000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0039,\"precipProbability\":0.42,\"precipIntensityError\":0.0102,\"precipAccumulation\":0.0039,\"precipType\":\"rain\",\"temperature\":34.34,\"apparentTemperature\":24.73,\"dewPoint\":27.86,\"humidity\":0.77,\"pressure\":991.0,\"windSpeed\":13.78,\"windGust\":28.73,\"windBearing\":217,\"cloudCover\":0.75,\"uvIndex\":0.91,\"visibility\":9.51,\"ozone\":470.22,\"nearestStormDistance\":23.06,\"nearestStormBearing\":180},{\"time\":1774371600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.41,\"precipIntensityError\":0.0099,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":33.8,\"apparentTemperature\":21.9,\"dewPoint\":27.68,\"humidity\":0.78,\"pressure\":990.7,\"windSpeed\":14.95,\"windGust\":27.59,\"windBearing\":220,\"cloudCover\":0.76,\"uvIndex\":0.55,\"visibility\":8.89,\"ozone\":471.78,\"nearestStormDistance\":28.82,\"nearestStormBearing\":180},{\"time\":1774375200,\"summary\":\"Light + Rain and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0158,\"precipProbability\":0.4,\"precipIntensityError\":0.0099,\"precipAccumulation\":0.0158,\"precipType\":\"rain\",\"temperature\":33.8,\"apparentTemperature\":19.06,\"dewPoint\":27.68,\"humidity\":0.78,\"pressure\":991.2,\"windSpeed\":16.08,\"windGust\":24.13,\"windBearing\":219,\"cloudCover\":0.75,\"uvIndex\":0.19,\"visibility\":8.82,\"ozone\":473.34,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774378800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0039,\"precipProbability\":0.42,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0196,\"precipType\":\"snow\",\"temperature\":33.26,\"apparentTemperature\":14.81,\"dewPoint\":27.5,\"humidity\":0.79,\"pressure\":991.2,\"windSpeed\":14.95,\"windGust\":20.69,\"windBearing\":218,\"cloudCover\":0.77,\"uvIndex\":0.13,\"visibility\":9.01,\"ozone\":474.28,\"nearestStormDistance\":45.62,\"nearestStormBearing\":151},{\"time\":1774382400,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0039,\"precipProbability\":0.43,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0204,\"precipType\":\"snow\",\"temperature\":33.26,\"apparentTemperature\":10.56,\"dewPoint\":26.96,\"humidity\":0.77,\"pressure\":991.3,\"windSpeed\":13.78,\"windGust\":20.69,\"windBearing\":212,\"cloudCover\":0.73,\"uvIndex\":0.06,\"visibility\":9.26,\"ozone\":475.21,\"nearestStormDistance\":56.65,\"nearestStormBearing\":123},{\"time\":1774386000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.45,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":33.26,\"apparentTemperature\":6.32,\"dewPoint\":26.78,\"humidity\":0.77,\"pressure\":992.5,\"windSpeed\":13.78,\"windGust\":22.99,\"windBearing\":206,\"cloudCover\":0.72,\"uvIndex\":0.0,\"visibility\":8.82,\"ozone\":476.14,\"nearestStormDistance\":67.69,\"nearestStormBearing\":95},{\"time\":1774389600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0039,\"precipProbability\":0.47,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0213,\"precipType\":\"snow\",\"temperature\":32.54,\"apparentTemperature\":5.55,\"dewPoint\":26.96,\"humidity\":0.8,\"pressure\":992.7,\"windSpeed\":13.78,\"windGust\":22.99,\"windBearing\":206,\"cloudCover\":0.72,\"uvIndex\":0.0,\"visibility\":9.63,\"ozone\":477.36,\"nearestStormDistance\":74.31,\"nearestStormBearing\":148},{\"time\":1774393200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.0079,\"precipProbability\":0.48,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.0079,\"precipType\":\"rain\",\"temperature\":32.72,\"apparentTemperature\":4.78,\"dewPoint\":26.96,\"humidity\":0.79,\"pressure\":992.4,\"windSpeed\":13.78,\"windGust\":19.55,\"windBearing\":200,\"cloudCover\":0.74,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":478.59,\"nearestStormDistance\":80.93,\"nearestStormBearing\":202},{\"time\":1774396800,\"summary\":\"Light + Snow\",\"icon\":\"snow\",\"precipIntensity\":0.0118,\"precipProbability\":0.5,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0673,\"precipType\":\"snow\",\"temperature\":32.36,\"apparentTemperature\":4.01,\"dewPoint\":26.42,\"humidity\":0.78,\"pressure\":992.7,\"windSpeed\":12.64,\"windGust\":18.39,\"windBearing\":199,\"cloudCover\":0.74,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":479.81,\"nearestStormDistance\":87.55,\"nearestStormBearing\":255},{\"time\":1774400400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.5,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":32.36,\"apparentTemperature\":3.9,\"dewPoint\":26.06,\"humidity\":0.77,\"pressure\":992.8,\"windSpeed\":11.48,\"windGust\":17.25,\"windBearing\":197,\"cloudCover\":0.74,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":478.96,\"nearestStormDistance\":90.57,\"nearestStormBearing\":188},{\"time\":1774404000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.49,\"precipIntensityError\":0.013,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":32.18,\"apparentTemperature\":3.8,\"dewPoint\":25.88,\"humidity\":0.77,\"pressure\":992.1,\"windSpeed\":10.34,\"windGust\":17.25,\"windBearing\":205,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":9.57,\"ozone\":478.11,\"nearestStormDistance\":93.6,\"nearestStormBearing\":121},{\"time\":1774407600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.49,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":32.0,\"apparentTemperature\":3.69,\"dewPoint\":25.7,\"humidity\":0.77,\"pressure\":991.9,\"windSpeed\":10.34,\"windGust\":17.25,\"windBearing\":220,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":477.26,\"nearestStormDistance\":96.62,\"nearestStormBearing\":54},{\"time\":1774411200,\"summary\":\"Light + Snow\",\"icon\":\"snow\",\"precipIntensity\":0.0118,\"precipProbability\":0.49,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0718,\"precipType\":\"snow\",\"temperature\":32.0,\"apparentTemperature\":5.06,\"dewPoint\":26.06,\"humidity\":0.78,\"pressure\":991.8,\"windSpeed\":11.48,\"windGust\":16.08,\"windBearing\":204,\"cloudCover\":0.73,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":477.68,\"nearestStormDistance\":95.01,\"nearestStormBearing\":51},{\"time\":1774414800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0039,\"precipProbability\":0.48,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0244,\"precipType\":\"snow\",\"temperature\":31.64,\"apparentTemperature\":6.43,\"dewPoint\":25.7,\"humidity\":0.78,\"pressure\":991.7,\"windSpeed\":11.48,\"windGust\":16.08,\"windBearing\":203,\"cloudCover\":0.73,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":478.11,\"nearestStormDistance\":93.39,\"nearestStormBearing\":48},{\"time\":1774418400,\"summary\":\"Light + Snow\",\"icon\":\"snow\",\"precipIntensity\":0.0118,\"precipProbability\":0.48,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.0725,\"precipType\":\"snow\",\"temperature\":31.82,\"apparentTemperature\":7.8,\"dewPoint\":26.24,\"humidity\":0.8,\"pressure\":991.4,\"windSpeed\":11.48,\"windGust\":14.95,\"windBearing\":203,\"cloudCover\":0.75,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":478.53,\"nearestStormDistance\":91.78,\"nearestStormBearing\":45},{\"time\":1774422000,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0039,\"precipProbability\":0.47,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.0242,\"precipType\":\"snow\",\"temperature\":32.54,\"apparentTemperature\":11.64,\"dewPoint\":26.96,\"humidity\":0.8,\"pressure\":990.1,\"windSpeed\":10.34,\"windGust\":14.95,\"windBearing\":205,\"cloudCover\":0.76,\"uvIndex\":0.43,\"visibility\":10.0,\"ozone\":481.82,\"nearestStormDistance\":94.45,\"nearestStormBearing\":124},{\"time\":1774425600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0039,\"precipProbability\":0.45,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.0233,\"precipType\":\"snow\",\"temperature\":33.08,\"apparentTemperature\":15.47,\"dewPoint\":27.32,\"humidity\":0.79,\"pressure\":990.0,\"windSpeed\":10.34,\"windGust\":14.95,\"windBearing\":206,\"cloudCover\":0.77,\"uvIndex\":0.76,\"visibility\":10.0,\"ozone\":485.12,\"nearestStormDistance\":97.13,\"nearestStormBearing\":203},{\"time\":1774429200,\"summary\":\"Light + Snow\",\"icon\":\"snow\",\"precipIntensity\":0.0118,\"precipProbability\":0.44,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.0654,\"precipType\":\"snow\",\"temperature\":33.44,\"apparentTemperature\":19.31,\"dewPoint\":27.32,\"humidity\":0.78,\"pressure\":990.1,\"windSpeed\":11.48,\"windGust\":16.08,\"windBearing\":207,\"cloudCover\":0.75,\"uvIndex\":1.1,\"visibility\":10.0,\"ozone\":488.41,\"nearestStormDistance\":99.8,\"nearestStormBearing\":282},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.43,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":33.98,\"apparentTemperature\":20.86,\"dewPoint\":27.14,\"humidity\":0.76,\"pressure\":990.1,\"windSpeed\":12.64,\"windGust\":17.25,\"windBearing\":201,\"cloudCover\":0.65,\"uvIndex\":1.38,\"visibility\":10.0,\"ozone\":490.57,\"nearestStormDistance\":94.79,\"nearestStormBearing\":286},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.41,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":33.98,\"apparentTemperature\":22.4,\"dewPoint\":26.96,\"humidity\":0.75,\"pressure\":990.1,\"windSpeed\":13.78,\"windGust\":18.39,\"windBearing\":206,\"cloudCover\":0.69,\"uvIndex\":1.67,\"visibility\":10.0,\"ozone\":492.74,\"nearestStormDistance\":89.78,\"nearestStormBearing\":291},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.4,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":33.98,\"apparentTemperature\":23.95,\"dewPoint\":26.06,\"humidity\":0.72,\"pressure\":990.6,\"windSpeed\":13.78,\"windGust\":21.83,\"windBearing\":194,\"cloudCover\":0.66,\"uvIndex\":1.95,\"visibility\":10.0,\"ozone\":494.9,\"nearestStormDistance\":84.77,\"nearestStormBearing\":296},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.4,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.16,\"apparentTemperature\":23.84,\"dewPoint\":26.78,\"humidity\":0.74,\"pressure\":990.9,\"windSpeed\":13.78,\"windGust\":22.99,\"windBearing\":200,\"cloudCover\":0.63,\"uvIndex\":1.75,\"visibility\":10.0,\"ozone\":495.54,\"nearestStormDistance\":82.62,\"nearestStormBearing\":298},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.39,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":33.98,\"apparentTemperature\":23.73,\"dewPoint\":26.6,\"humidity\":0.74,\"pressure\":990.4,\"windSpeed\":12.64,\"windGust\":22.99,\"windBearing\":186,\"cloudCover\":0.73,\"uvIndex\":1.55,\"visibility\":10.0,\"ozone\":496.17,\"nearestStormDistance\":80.47,\"nearestStormBearing\":301},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.39,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":33.44,\"apparentTemperature\":23.63,\"dewPoint\":26.6,\"humidity\":0.76,\"pressure\":990.6,\"windSpeed\":11.48,\"windGust\":21.83,\"windBearing\":190,\"cloudCover\":0.69,\"uvIndex\":1.35,\"visibility\":10.0,\"ozone\":496.81,\"nearestStormDistance\":78.33,\"nearestStormBearing\":303},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.39,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":32.9,\"apparentTemperature\":19.08,\"dewPoint\":26.24,\"humidity\":0.76,\"pressure\":993.1,\"windSpeed\":11.48,\"windGust\":22.99,\"windBearing\":204,\"cloudCover\":0.67,\"uvIndex\":0.97,\"visibility\":10.0,\"ozone\":494.32,\"nearestStormDistance\":74.6,\"nearestStormBearing\":300},{\"time\":1774458000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.38,\"precipIntensityError\":0.0071,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":32.18,\"apparentTemperature\":14.53,\"dewPoint\":25.7,\"humidity\":0.77,\"pressure\":992.9,\"windSpeed\":10.34,\"windGust\":21.83,\"windBearing\":171,\"cloudCover\":0.78,\"uvIndex\":0.6,\"visibility\":10.0,\"ozone\":491.83,\"nearestStormDistance\":70.87,\"nearestStormBearing\":296},{\"time\":1774461600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.38,\"precipIntensityError\":0.0067,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":31.64,\"apparentTemperature\":9.99,\"dewPoint\":25.7,\"humidity\":0.78,\"pressure\":993.1,\"windSpeed\":10.34,\"windGust\":19.55,\"windBearing\":200,\"cloudCover\":0.8,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":489.35,\"nearestStormDistance\":67.15,\"nearestStormBearing\":293},{\"time\":1774465200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.36,\"precipIntensityError\":0.0067,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":30.92,\"apparentTemperature\":8.8,\"dewPoint\":25.7,\"humidity\":0.81,\"pressure\":993.4,\"windSpeed\":9.2,\"windGust\":19.55,\"windBearing\":202,\"cloudCover\":0.77,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":485.83,\"nearestStormDistance\":60.09,\"nearestStormBearing\":292},{\"time\":1774468800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.35,\"precipIntensityError\":0.0071,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":30.2,\"apparentTemperature\":7.62,\"dewPoint\":25.52,\"humidity\":0.82,\"pressure\":993.7,\"windSpeed\":9.2,\"windGust\":18.39,\"windBearing\":193,\"cloudCover\":0.73,\"uvIndex\":0.08,\"visibility\":10.0,\"ozone\":482.32,\"nearestStormDistance\":53.03,\"nearestStormBearing\":292},{\"time\":1774472400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.33,\"precipIntensityError\":0.0071,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":30.02,\"apparentTemperature\":6.43,\"dewPoint\":25.34,\"humidity\":0.82,\"pressure\":993.9,\"windSpeed\":10.34,\"windGust\":18.39,\"windBearing\":196,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":478.8,\"nearestStormDistance\":45.97,\"nearestStormBearing\":291},{\"time\":1774476000,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0039,\"precipProbability\":0.31,\"precipIntensityError\":0.0071,\"precipAccumulation\":0.0298,\"precipType\":\"snow\",\"temperature\":29.66,\"apparentTemperature\":6.51,\"dewPoint\":25.34,\"humidity\":0.84,\"pressure\":994.0,\"windSpeed\":9.2,\"windGust\":18.39,\"windBearing\":200,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":475.11,\"nearestStormDistance\":38.98,\"nearestStormBearing\":290}]},\"daily\":{\"summary\":\"Mixed + precipitation today through Monday and on Wednesday and next Thursday, with + highs falling to 34\xB0F next Thursday.\",\"icon\":\"sleet\",\"data\":[{\"time\":1773874800,\"summary\":\"Drizzle + throughout the day and windy until night.\",\"icon\":\"rain\",\"sunriseTime\":1773895735,\"sunsetTime\":1773939423,\"moonPhase\":0.02,\"precipIntensity\":0.0071,\"precipIntensityMax\":0.0118,\"precipIntensityMaxTime\":1773932400,\"precipProbability\":1.0,\"precipAccumulation\":0.1694,\"precipType\":\"rain\",\"temperatureHigh\":37.76,\"temperatureHighTime\":1773900000,\"temperatureLow\":35.78,\"temperatureLowTime\":1773957600,\"apparentTemperatureHigh\":22.14,\"apparentTemperatureHighTime\":1773936000,\"apparentTemperatureLow\":20.99,\"apparentTemperatureLowTime\":1773982800,\"dewPoint\":32.82,\"humidity\":0.83,\"pressure\":997.94,\"windSpeed\":21.4,\"windGust\":33.62,\"windGustTime\":1773918000,\"windBearing\":245,\"cloudCover\":0.95,\"uvIndex\":0.61,\"uvIndexTime\":1773921600,\"visibility\":6.1,\"temperatureMin\":35.78,\"temperatureMinTime\":1773957600,\"temperatureMax\":40.1,\"temperatureMaxTime\":1773878400,\"apparentTemperatureMin\":19.3,\"apparentTemperatureMinTime\":1773918000,\"apparentTemperatureMax\":25.39,\"apparentTemperatureMaxTime\":1773954000},{\"time\":1773961200,\"summary\":\"Light + rain and windy throughout the day.\",\"icon\":\"rain\",\"sunriseTime\":1773981862,\"sunsetTime\":1774026062,\"moonPhase\":0.05,\"precipIntensity\":0.009,\"precipIntensityMax\":0.0158,\"precipIntensityMaxTime\":1774018800,\"precipProbability\":1.0,\"precipAccumulation\":0.2167,\"precipType\":\"rain\",\"temperatureHigh\":40.46,\"temperatureHighTime\":1774018800,\"temperatureLow\":38.66,\"temperatureLowTime\":1774069200,\"apparentTemperatureHigh\":21.97,\"apparentTemperatureHighTime\":1774026000,\"apparentTemperatureLow\":22.15,\"apparentTemperatureLowTime\":1774029600,\"dewPoint\":33.73,\"humidity\":0.83,\"pressure\":1000.47,\"windSpeed\":23.03,\"windGust\":33.19,\"windGustTime\":1774004400,\"windBearing\":207,\"cloudCover\":1.0,\"uvIndex\":0.57,\"uvIndexTime\":1774008000,\"visibility\":9.4,\"temperatureMin\":35.78,\"temperatureMinTime\":1773961200,\"temperatureMax\":40.46,\"temperatureMaxTime\":1774018800,\"apparentTemperatureMin\":20.4,\"apparentTemperatureMinTime\":1773997200,\"apparentTemperatureMax\":24.66,\"apparentTemperatureMaxTime\":1773961200},{\"time\":1774047600,\"summary\":\"Light + rain and windy throughout the day.\",\"icon\":\"rain\",\"sunriseTime\":1774067989,\"sunsetTime\":1774112701,\"moonPhase\":0.09,\"precipIntensity\":0.0105,\"precipIntensityMax\":0.0197,\"precipIntensityMaxTime\":1774126800,\"precipProbability\":1.0,\"precipAccumulation\":0.2522,\"precipType\":\"rain\",\"temperatureHigh\":39.02,\"temperatureHighTime\":1774087200,\"temperatureLow\":34.88,\"temperatureLowTime\":1774152000,\"apparentTemperatureHigh\":23.28,\"apparentTemperatureHighTime\":1774080000,\"apparentTemperatureLow\":16.24,\"apparentTemperatureLowTime\":1774126800,\"dewPoint\":32.63,\"humidity\":0.8,\"pressure\":995.01,\"windSpeed\":23.65,\"windGust\":35.39,\"windGustTime\":1774108800,\"windBearing\":210,\"cloudCover\":0.88,\"uvIndex\":1.27,\"uvIndexTime\":1774090800,\"visibility\":9.03,\"temperatureMin\":35.24,\"temperatureMinTime\":1774126800,\"temperatureMax\":40.1,\"temperatureMaxTime\":1774047600,\"apparentTemperatureMin\":16.24,\"apparentTemperatureMinTime\":1774126800,\"apparentTemperatureMax\":24.46,\"apparentTemperatureMaxTime\":1774047600},{\"time\":1774134000,\"summary\":\"Drizzle + and windy throughout the day.\",\"icon\":\"rain\",\"sunriseTime\":1774154116,\"sunsetTime\":1774199340,\"moonPhase\":0.13,\"precipIntensity\":0.0074,\"precipIntensityMax\":0.0158,\"precipIntensityMaxTime\":1774134000,\"precipProbability\":1.0,\"precipAccumulation\":0.1773,\"precipType\":\"rain\",\"temperatureHigh\":38.3,\"temperatureHighTime\":1774191600,\"temperatureLow\":36.86,\"temperatureLowTime\":1774227600,\"apparentTemperatureHigh\":23.13,\"apparentTemperatureHighTime\":1774195200,\"apparentTemperatureLow\":21.71,\"apparentTemperatureLowTime\":1774234800,\"dewPoint\":31.22,\"humidity\":0.81,\"pressure\":989.98,\"windSpeed\":22.41,\"windGust\":34.43,\"windGustTime\":1774137600,\"windBearing\":208,\"cloudCover\":0.91,\"uvIndex\":1.22,\"uvIndexTime\":1774184400,\"visibility\":7.88,\"temperatureMin\":34.88,\"temperatureMinTime\":1774152000,\"temperatureMax\":38.3,\"temperatureMaxTime\":1774191600,\"apparentTemperatureMin\":16.8,\"apparentTemperatureMinTime\":1774144800,\"apparentTemperatureMax\":23.13,\"apparentTemperatureMaxTime\":1774195200},{\"time\":1774220400,\"summary\":\"Drizzle + and windy throughout the day.\",\"icon\":\"rain\",\"sunriseTime\":1774240243,\"sunsetTime\":1774285979,\"moonPhase\":0.16,\"precipIntensity\":0.0053,\"precipIntensityMax\":0.0118,\"precipIntensityMaxTime\":1774245600,\"precipProbability\":0.66,\"precipAccumulation\":0.1261,\"precipType\":\"rain\",\"temperatureHigh\":39.74,\"temperatureHighTime\":1774267200,\"temperatureLow\":34.34,\"temperatureLowTime\":1774321200,\"apparentTemperatureHigh\":25.03,\"apparentTemperatureHighTime\":1774252800,\"apparentTemperatureLow\":18.3,\"apparentTemperatureLowTime\":1774324800,\"dewPoint\":29.55,\"humidity\":0.73,\"pressure\":978.65,\"windSpeed\":19.88,\"windGust\":30.02,\"windGustTime\":1774270800,\"windBearing\":208,\"cloudCover\":0.76,\"uvIndex\":1.62,\"uvIndexTime\":1774263600,\"visibility\":9.88,\"temperatureMin\":35.78,\"temperatureMinTime\":1774299600,\"temperatureMax\":39.74,\"temperatureMaxTime\":1774267200,\"apparentTemperatureMin\":19.84,\"apparentTemperatureMinTime\":1774299600,\"apparentTemperatureMax\":25.03,\"apparentTemperatureMaxTime\":1774252800},{\"time\":1774306800,\"summary\":\"Light + snow and rain until afternoon, returning in the evening, and breezy until + evening.\",\"icon\":\"snow\",\"sunriseTime\":1774326369,\"sunsetTime\":1774372618,\"moonPhase\":0.2,\"precipIntensity\":0.0046,\"precipIntensityMax\":0.0158,\"precipIntensityMaxTime\":1774375200,\"precipProbability\":0.54,\"precipAccumulation\":0.1598,\"precipType\":\"snow\",\"temperatureHigh\":35.42,\"temperatureHighTime\":1774357200,\"temperatureLow\":31.64,\"temperatureLowTime\":1774414800,\"apparentTemperatureHigh\":23.33,\"apparentTemperatureHighTime\":1774368000,\"apparentTemperatureLow\":20.23,\"apparentTemperatureLowTime\":1774389600,\"dewPoint\":28.08,\"humidity\":0.77,\"pressure\":988.87,\"windSpeed\":18.05,\"windGust\":27.58,\"windGustTime\":1774306800,\"windBearing\":215,\"cloudCover\":0.79,\"uvIndex\":1.68,\"uvIndexTime\":1774353600,\"visibility\":7.72,\"temperatureMin\":32.54,\"temperatureMinTime\":1774389600,\"temperatureMax\":35.42,\"temperatureMaxTime\":1774357200,\"apparentTemperatureMin\":18.3,\"apparentTemperatureMinTime\":1774324800,\"apparentTemperatureMax\":23.33,\"apparentTemperatureMaxTime\":1774368000},{\"time\":1774393200,\"summary\":\"Light + snow (< 1 in) until afternoon, returning overnight.\",\"icon\":\"snow\",\"sunriseTime\":1774412496,\"sunsetTime\":1774459257,\"moonPhase\":0.24,\"precipIntensity\":0.003,\"precipIntensityMax\":0.0118,\"precipIntensityMaxTime\":1774396800,\"precipProbability\":0.5,\"precipAccumulation\":0.3865,\"precipType\":\"snow\",\"temperatureHigh\":34.16,\"temperatureHighTime\":1774443600,\"temperatureLow\":28.58,\"temperatureLowTime\":1774483200,\"apparentTemperatureHigh\":24.52,\"apparentTemperatureHighTime\":1774447200,\"apparentTemperatureLow\":19.12,\"apparentTemperatureLowTime\":1774479600,\"dewPoint\":26.26,\"humidity\":0.78,\"pressure\":991.82,\"windSpeed\":11.39,\"windGust\":18.63,\"windGustTime\":1774443600,\"windBearing\":199,\"cloudCover\":0.72,\"uvIndex\":1.95,\"uvIndexTime\":1774440000,\"visibility\":9.98,\"temperatureMin\":29.66,\"temperatureMinTime\":1774476000,\"temperatureMax\":34.16,\"temperatureMaxTime\":1774443600,\"apparentTemperatureMin\":19.45,\"apparentTemperatureMinTime\":1774472400,\"apparentTemperatureMax\":24.52,\"apparentTemperatureMaxTime\":1774447200},{\"time\":1774479600,\"summary\":\"Light + snow (< 1 in) and sleet in the morning and evening.\",\"icon\":\"snow\",\"sunriseTime\":1774498621,\"sunsetTime\":1774545897,\"moonPhase\":0.27,\"precipIntensity\":0.0033,\"precipIntensityMax\":0.0158,\"precipIntensityMaxTime\":1774508400,\"precipProbability\":0.4,\"precipAccumulation\":0.5549,\"precipType\":\"snow\",\"temperatureHigh\":33.8,\"temperatureHighTime\":1774530000,\"temperatureLow\":29.12,\"temperatureLowTime\":1774562400,\"apparentTemperatureHigh\":25.84,\"apparentTemperatureHighTime\":1774533600,\"apparentTemperatureLow\":17.86,\"apparentTemperatureLowTime\":1774573200,\"dewPoint\":25.39,\"humidity\":0.8,\"pressure\":996.14,\"windSpeed\":9.53,\"windGust\":18.15,\"windGustTime\":1774537200,\"windBearing\":216,\"cloudCover\":0.66,\"uvIndex\":1.66,\"uvIndexTime\":1774526400,\"visibility\":10.0,\"temperatureMin\":28.58,\"temperatureMinTime\":1774483200,\"temperatureMax\":33.8,\"temperatureMaxTime\":1774530000,\"apparentTemperatureMin\":18.6,\"apparentTemperatureMinTime\":1774558800,\"apparentTemperatureMax\":25.84,\"apparentTemperatureMaxTime\":1774533600}]},\"alerts\":[{\"title\":\"Sn\xF8skred\",\"regions\":[\"Troms\xF8\"],\"severity\":\"Severe\",\"time\":1773961200,\"expires\":1774047599,\"description\":\"Varsel + om betydelig sn\xF8skredfare i region Troms\xF8 20.03.2026\",\"uri\":\"https://severeweather.wmo.int/v2/cap-alerts/no-nve-xx/2026/03/18/14/50/13-46c330c4f22089f7210e9539fdd7ad23.xml\"},{\"title\":\"Varsel + om s\xF8rpe- og flomskredfare, gult niv\xE5 for deler av Troms og Nordland + 20.03.2026\",\"regions\":[\"deler av Troms og Nordland\"],\"severity\":\"Moderate\",\"time\":1773986400,\"expires\":1774072740,\"description\":\"Det + ventes regn og lokalt mye nedb\xF8r. Stigende temperaturer vil f\xF8re til + sn\xF8smelting (ogs\xE5 i h\xF8yfjellet). \\n\\nBratte skr\xE5ninger, samt + bekker og elvel\xF8p med stor vannf\xF8ring er spesielt utsatt. \\n\\nFare + for utl\xF8sning av s\xF8rpeskred gjelder s\xE6rlig i omr\xE5der med mer enn + 25 cm sn\xF8. Sn\xF8en er stedvis vannmettet. S\xF8rpeskred kan l\xF8ses ut + i relativt slake hellinger der vann samles opp. Skredene kanaliseres ofte + ned forsenkninger og bekkel\xF8p og kan da utvikle seg til flomskred. \\n\\nFlomskred + har lang rekkevidde og kan g\xE5 ned til dalbunnen selv om det l\xF8ses ut + h\xF8yt i terrenget.\",\"uri\":\"https://severeweather.wmo.int/v2/cap-alerts/no-nve-xx/2026/03/18/13/49/43-2a821df43ba60e550c8aa209a897e8f5.xml\"},{\"title\":\"Varsel + om s\xF8rpe- og flomskredfare, gult niv\xE5 for deler av Troms og Nordland + 20.03.2026\",\"regions\":[\"deler av Troms og Nordland\"],\"severity\":\"Moderate\",\"time\":1773986400,\"expires\":1774072740,\"description\":\"Det + ventes regn og lokalt mye nedb\xF8r. Stigende temperaturer vil f\xF8re til + sn\xF8smelting (ogs\xE5 i h\xF8yfjellet). \\n\\nBratte skr\xE5ninger, samt + bekker og elvel\xF8p med stor vannf\xF8ring er spesielt utsatt. \\n\\nFare + for utl\xF8sning av s\xF8rpeskred gjelder s\xE6rlig i omr\xE5der med mer enn + 25 cm sn\xF8. Sn\xF8en er stedvis vannmettet. S\xF8rpeskred kan l\xF8ses ut + i relativt slake hellinger der vann samles opp. Skredene kanaliseres ofte + ned forsenkninger og bekkel\xF8p og kan da utvikle seg til flomskred. \\n\\nFlomskred + har lang rekkevidde og kan g\xE5 ned til dalbunnen selv om det l\xF8ses ut + h\xF8yt i terrenget.\",\"uri\":\"https://severeweather.wmo.int/v2/cap-alerts/no-nve-xx/2026/03/18/08/46/26-1812ac7f8e37e8e17380adb07fac1d0a.xml\"},{\"title\":\"Sn\xF8skred\",\"regions\":[\"Troms\xF8\"],\"severity\":\"Severe\",\"time\":1773874800,\"expires\":1773961199,\"description\":\"Varsel + om betydelig sn\xF8skredfare i region Troms\xF8 19.03.2026\",\"uri\":\"https://severeweather.wmo.int/v2/cap-alerts/no-nve-xx/2026/03/17/14/33/57-905fc2d52eb27a61835e821b022348f7.xml\"}],\"flags\":{\"sources\":[\"ETOPO1\",\"dwd_mosmix\",\"ecmwf_ifs\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"dwd_mosmix\":\"2026-03-18 + 22Z\",\"ecmwf_ifs\":\"2026-03-18 00Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":2.31,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:53 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9853' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 24df21f8156a0df29febdf6c3e09e32c.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - V7Wl-4EhbkO0UzsttYYgKvgqI7YoNfaaehtwpQ2U9VbUAQnbXvGFYw== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '147' + X-Handler-Time: + - '39.3' + X-Kong-Proxy-Latency: + - '0' + X-Kong-Request-Id: + - e958d80e510a9a110fadac3be39da268 + X-Kong-Upstream-Latency: + - '42' + X-Node-Id: + - ip-10-0-17-43.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9853' + X-Response-Time: + - '39.326' + X-Server-Time: + - '40.5' + content-length: + - '96306' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/cassettes/pirate_weather/current_london.yaml b/tests/integration/cassettes/pirate_weather/current_london.yaml new file mode 100644 index 00000000..0b33dabf --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/current_london.yaml @@ -0,0 +1,236 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/51.5074,-0.1278?extend=hourly&units=us + response: + body: + string: "{\"latitude\":51.5074,\"longitude\":-0.1278,\"timezone\":\"Europe/London\",\"offset\":0.0,\"elevation\":52,\"currently\":{\"time\":1773877680,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"nearestStormDistance\":691.82,\"nearestStormBearing\":180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\",\"temperature\":45.54,\"apparentTemperature\":39.16,\"dewPoint\":36.86,\"humidity\":0.72,\"pressure\":1025.8,\"windSpeed\":5.97,\"windGust\":10.57,\"windBearing\":81,\"cloudCover\":0.01,\"uvIndex\":0.0,\"visibility\":9.56,\"ozone\":345.66},\"minutely\":{\"summary\":\"Clear + for the hour.\",\"icon\":\"clear-night\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878340,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878400,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878460,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878520,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878580,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878640,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878700,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878760,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878820,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878880,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878940,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879000,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879060,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879120,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879240,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879300,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879360,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879420,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879480,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879540,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879600,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879660,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879720,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879780,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879840,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879900,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879960,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880020,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880080,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880140,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880200,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880260,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880320,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880380,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880440,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880500,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880560,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880620,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"}]},\"hourly\":{\"summary\":\"Mostly + clear from tomorrow morning until tomorrow night.\",\"icon\":\"clear-day\",\"data\":[{\"time\":1773874800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.12,\"apparentTemperature\":47.65,\"dewPoint\":36.86,\"humidity\":0.67,\"pressure\":1025.4,\"windSpeed\":6.9,\"windGust\":11.48,\"windBearing\":84,\"cloudCover\":0.07,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":345.9,\"nearestStormDistance\":692.29,\"nearestStormBearing\":184},{\"time\":1773878400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.14,\"apparentTemperature\":46.49,\"dewPoint\":36.86,\"humidity\":0.73,\"pressure\":1025.9,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":81,\"cloudCover\":0.0,\"uvIndex\":0.0,\"visibility\":9.2,\"ozone\":345.6,\"nearestStormDistance\":691.71,\"nearestStormBearing\":180},{\"time\":1773882000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.7,\"apparentTemperature\":45.74,\"dewPoint\":37.04,\"humidity\":0.77,\"pressure\":1025.9,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":74,\"cloudCover\":0.0,\"uvIndex\":0.0,\"visibility\":8.76,\"ozone\":344.61,\"nearestStormDistance\":788.9,\"nearestStormBearing\":197},{\"time\":1773885600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.44,\"apparentTemperature\":45.02,\"dewPoint\":36.5,\"humidity\":0.79,\"pressure\":1026.1,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":64,\"cloudCover\":0.0,\"uvIndex\":0.0,\"visibility\":7.64,\"ozone\":343.64,\"nearestStormDistance\":692.29,\"nearestStormBearing\":184},{\"time\":1773889200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.18,\"apparentTemperature\":44.29,\"dewPoint\":36.14,\"humidity\":0.82,\"pressure\":1026.1,\"windSpeed\":4.6,\"windGust\":8.04,\"windBearing\":57,\"cloudCover\":0.0,\"uvIndex\":0.0,\"visibility\":7.64,\"ozone\":340.2,\"nearestStormDistance\":691.71,\"nearestStormBearing\":180},{\"time\":1773892800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.46,\"apparentTemperature\":43.4,\"dewPoint\":35.78,\"humidity\":0.83,\"pressure\":1026.2,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":58,\"cloudCover\":0.04,\"uvIndex\":0.0,\"visibility\":7.21,\"ozone\":340.78,\"nearestStormDistance\":915.98,\"nearestStormBearing\":311},{\"time\":1773896400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.74,\"apparentTemperature\":42.64,\"dewPoint\":35.42,\"humidity\":0.84,\"pressure\":1026.3,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":50,\"cloudCover\":0.26,\"uvIndex\":0.0,\"visibility\":7.08,\"ozone\":343.63,\"nearestStormDistance\":760.88,\"nearestStormBearing\":360},{\"time\":1773900000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.74,\"apparentTemperature\":41.81,\"dewPoint\":35.96,\"humidity\":0.86,\"pressure\":1026.5,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":52,\"cloudCover\":0.23,\"uvIndex\":0.0,\"visibility\":5.59,\"ozone\":344.03,\"nearestStormDistance\":778.17,\"nearestStormBearing\":360},{\"time\":1773903600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.36,\"apparentTemperature\":42.11,\"dewPoint\":36.32,\"humidity\":0.82,\"pressure\":1027.0,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":59,\"cloudCover\":0.22,\"uvIndex\":0.13,\"visibility\":5.59,\"ozone\":342.57,\"nearestStormDistance\":795.55,\"nearestStormBearing\":358},{\"time\":1773907200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.78,\"apparentTemperature\":44.83,\"dewPoint\":38.3,\"humidity\":0.78,\"pressure\":1027.5,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":64,\"cloudCover\":0.22,\"uvIndex\":0.77,\"visibility\":6.59,\"ozone\":340.15,\"nearestStormDistance\":743.64,\"nearestStormBearing\":181},{\"time\":1773910800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":48.74,\"apparentTemperature\":51.35,\"dewPoint\":39.38,\"humidity\":0.7,\"pressure\":1027.7,\"windSpeed\":4.6,\"windGust\":10.34,\"windBearing\":65,\"cloudCover\":0.18,\"uvIndex\":1.71,\"visibility\":7.15,\"ozone\":337.46,\"nearestStormDistance\":872.78,\"nearestStormBearing\":311},{\"time\":1773914400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":51.98,\"apparentTemperature\":54.35,\"dewPoint\":39.2,\"humidity\":0.62,\"pressure\":1027.6,\"windSpeed\":6.9,\"windGust\":11.48,\"windBearing\":77,\"cloudCover\":0.18,\"uvIndex\":2.73,\"visibility\":9.57,\"ozone\":336.8,\"nearestStormDistance\":866.82,\"nearestStormBearing\":308},{\"time\":1773918000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.94,\"apparentTemperature\":57.29,\"dewPoint\":38.84,\"humidity\":0.53,\"pressure\":1027.3,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":83,\"cloudCover\":0.2,\"uvIndex\":3.58,\"visibility\":10.0,\"ozone\":338.17,\"nearestStormDistance\":870.0,\"nearestStormBearing\":237},{\"time\":1773921600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":58.64,\"apparentTemperature\":59.28,\"dewPoint\":38.12,\"humidity\":0.46,\"pressure\":1026.8,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":84,\"cloudCover\":0.17,\"uvIndex\":4.09,\"visibility\":10.0,\"ozone\":338.9,\"nearestStormDistance\":587.95,\"nearestStormBearing\":360},{\"time\":1773925200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":60.62,\"apparentTemperature\":60.36,\"dewPoint\":37.22,\"humidity\":0.42,\"pressure\":1026.3,\"windSpeed\":9.2,\"windGust\":14.95,\"windBearing\":87,\"cloudCover\":0.13,\"uvIndex\":4.15,\"visibility\":10.0,\"ozone\":339.81,\"nearestStormDistance\":587.95,\"nearestStormBearing\":360},{\"time\":1773928800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":61.7,\"apparentTemperature\":60.53,\"dewPoint\":36.68,\"humidity\":0.39,\"pressure\":1025.8,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":88,\"cloudCover\":0.16,\"uvIndex\":3.77,\"visibility\":10.0,\"ozone\":348.04,\"nearestStormDistance\":587.95,\"nearestStormBearing\":360},{\"time\":1773932400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":61.88,\"apparentTemperature\":60.49,\"dewPoint\":36.5,\"humidity\":0.39,\"pressure\":1025.5,\"windSpeed\":9.2,\"windGust\":14.95,\"windBearing\":84,\"cloudCover\":0.23,\"uvIndex\":3.0,\"visibility\":10.0,\"ozone\":360.2,\"nearestStormDistance\":570.66,\"nearestStormBearing\":360},{\"time\":1773936000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":61.52,\"apparentTemperature\":59.73,\"dewPoint\":35.78,\"humidity\":0.38,\"pressure\":1025.2,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":87,\"cloudCover\":0.22,\"uvIndex\":2.0,\"visibility\":10.0,\"ozone\":364.67,\"nearestStormDistance\":553.36,\"nearestStormBearing\":360},{\"time\":1773939600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":60.08,\"apparentTemperature\":58.3,\"dewPoint\":35.6,\"humidity\":0.4,\"pressure\":1025.0,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":92,\"cloudCover\":0.25,\"uvIndex\":1.02,\"visibility\":10.0,\"ozone\":364.81,\"nearestStormDistance\":536.2,\"nearestStormBearing\":358},{\"time\":1773943200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":58.1,\"apparentTemperature\":55.6,\"dewPoint\":35.42,\"humidity\":0.42,\"pressure\":1025.0,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":94,\"cloudCover\":0.39,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":369.87,\"nearestStormDistance\":553.85,\"nearestStormBearing\":356},{\"time\":1773946800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.4,\"apparentTemperature\":53.5,\"dewPoint\":35.6,\"humidity\":0.47,\"pressure\":1025.2,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":85,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":374.46,\"nearestStormDistance\":554.47,\"nearestStormBearing\":354},{\"time\":1773950400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":52.7,\"apparentTemperature\":51.95,\"dewPoint\":35.78,\"humidity\":0.52,\"pressure\":1025.4,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":85,\"cloudCover\":0.45,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":375.55,\"nearestStormDistance\":779.05,\"nearestStormBearing\":185},{\"time\":1773954000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":49.82,\"apparentTemperature\":50.78,\"dewPoint\":36.32,\"humidity\":0.6,\"pressure\":1025.5,\"windSpeed\":4.6,\"windGust\":8.04,\"windBearing\":79,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":375.86,\"nearestStormDistance\":778.22,\"nearestStormBearing\":181},{\"time\":1773957600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.66,\"apparentTemperature\":48.56,\"dewPoint\":36.32,\"humidity\":0.65,\"pressure\":1025.6,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":71,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":377.76,\"nearestStormDistance\":778.99,\"nearestStormBearing\":235},{\"time\":1773961200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.86,\"apparentTemperature\":47.4,\"dewPoint\":36.5,\"humidity\":0.7,\"pressure\":1025.7,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":68,\"cloudCover\":0.36,\"uvIndex\":0.0,\"visibility\":9.69,\"ozone\":376.76,\"nearestStormDistance\":766.8,\"nearestStormBearing\":236},{\"time\":1773964800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.7,\"apparentTemperature\":46.32,\"dewPoint\":36.14,\"humidity\":0.75,\"pressure\":1025.7,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":65,\"cloudCover\":0.27,\"uvIndex\":0.0,\"visibility\":7.77,\"ozone\":377.56,\"nearestStormDistance\":761.21,\"nearestStormBearing\":233},{\"time\":1773968400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.72,\"apparentTemperature\":44.93,\"dewPoint\":35.6,\"humidity\":0.79,\"pressure\":1025.4,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":61,\"cloudCover\":0.2,\"uvIndex\":0.0,\"visibility\":7.02,\"ozone\":375.97,\"nearestStormDistance\":755.13,\"nearestStormBearing\":228},{\"time\":1773972000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.1,\"apparentTemperature\":44.12,\"dewPoint\":35.24,\"humidity\":0.83,\"pressure\":1025.2,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":57,\"cloudCover\":0.22,\"uvIndex\":0.0,\"visibility\":5.97,\"ozone\":374.12,\"nearestStormDistance\":748.51,\"nearestStormBearing\":236},{\"time\":1773975600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":38.66,\"apparentTemperature\":43.57,\"dewPoint\":34.7,\"humidity\":0.86,\"pressure\":1024.8,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":47,\"cloudCover\":0.31,\"uvIndex\":0.0,\"visibility\":4.97,\"ozone\":370.53,\"nearestStormDistance\":730.21,\"nearestStormBearing\":236},{\"time\":1773979200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.76,\"apparentTemperature\":42.92,\"dewPoint\":34.34,\"humidity\":0.87,\"pressure\":1024.6,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":43,\"cloudCover\":0.39,\"uvIndex\":0.0,\"visibility\":4.54,\"ozone\":370.07,\"nearestStormDistance\":720.08,\"nearestStormBearing\":239},{\"time\":1773982800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.4,\"apparentTemperature\":42.48,\"dewPoint\":34.7,\"humidity\":0.9,\"pressure\":1024.6,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":46,\"cloudCover\":0.48,\"uvIndex\":0.0,\"visibility\":4.35,\"ozone\":367.81,\"nearestStormDistance\":706.68,\"nearestStormBearing\":238},{\"time\":1773986400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.94,\"apparentTemperature\":41.63,\"dewPoint\":35.6,\"humidity\":0.91,\"pressure\":1024.6,\"windSpeed\":2.3,\"windGust\":5.74,\"windBearing\":47,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":3.42,\"ozone\":366.03,\"nearestStormDistance\":699.23,\"nearestStormBearing\":236},{\"time\":1773990000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.74,\"apparentTemperature\":42.78,\"dewPoint\":36.14,\"humidity\":0.87,\"pressure\":1024.6,\"windSpeed\":3.44,\"windGust\":5.74,\"windBearing\":59,\"cloudCover\":0.66,\"uvIndex\":0.14,\"visibility\":3.54,\"ozone\":365.06,\"nearestStormDistance\":686.89,\"nearestStormBearing\":234},{\"time\":1773993600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.72,\"apparentTemperature\":44.61,\"dewPoint\":37.76,\"humidity\":0.86,\"pressure\":1024.6,\"windSpeed\":3.44,\"windGust\":6.9,\"windBearing\":60,\"cloudCover\":0.74,\"uvIndex\":0.78,\"visibility\":4.16,\"ozone\":365.47,\"nearestStormDistance\":559.13,\"nearestStormBearing\":329},{\"time\":1773997200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.6,\"apparentTemperature\":47.81,\"dewPoint\":38.3,\"humidity\":0.78,\"pressure\":1024.4,\"windSpeed\":4.6,\"windGust\":8.04,\"windBearing\":66,\"cloudCover\":0.7,\"uvIndex\":1.66,\"visibility\":3.91,\"ozone\":365.63,\"nearestStormDistance\":668.25,\"nearestStormBearing\":235},{\"time\":1774000800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.66,\"apparentTemperature\":51.71,\"dewPoint\":38.84,\"humidity\":0.71,\"pressure\":1024.3,\"windSpeed\":4.6,\"windGust\":10.34,\"windBearing\":65,\"cloudCover\":0.67,\"uvIndex\":2.45,\"visibility\":6.46,\"ozone\":366.77,\"nearestStormDistance\":668.25,\"nearestStormBearing\":235},{\"time\":1774004400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.9,\"apparentTemperature\":53.88,\"dewPoint\":38.66,\"humidity\":0.63,\"pressure\":1024.1,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":70,\"cloudCover\":0.65,\"uvIndex\":3.14,\"visibility\":8.7,\"ozone\":367.83,\"nearestStormDistance\":670.32,\"nearestStormBearing\":239},{\"time\":1774008000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.6,\"apparentTemperature\":55.49,\"dewPoint\":38.66,\"humidity\":0.57,\"pressure\":1023.4,\"windSpeed\":5.74,\"windGust\":11.48,\"windBearing\":75,\"cloudCover\":0.7,\"uvIndex\":3.44,\"visibility\":9.26,\"ozone\":369.77,\"nearestStormDistance\":668.25,\"nearestStormBearing\":235},{\"time\":1774011600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.04,\"apparentTemperature\":56.66,\"dewPoint\":38.66,\"humidity\":0.54,\"pressure\":1023.1,\"windSpeed\":6.9,\"windGust\":11.48,\"windBearing\":74,\"cloudCover\":0.7,\"uvIndex\":3.57,\"visibility\":10.0,\"ozone\":370.63,\"nearestStormDistance\":649.6,\"nearestStormBearing\":235},{\"time\":1774015200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":56.84,\"apparentTemperature\":57.24,\"dewPoint\":37.22,\"humidity\":0.48,\"pressure\":1022.4,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":70,\"cloudCover\":0.68,\"uvIndex\":3.19,\"visibility\":10.0,\"ozone\":370.74,\"nearestStormDistance\":637.28,\"nearestStormBearing\":236},{\"time\":1774018800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":57.56,\"apparentTemperature\":56.89,\"dewPoint\":37.4,\"humidity\":0.47,\"pressure\":1021.7,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":71,\"cloudCover\":0.7,\"uvIndex\":2.43,\"visibility\":10.0,\"ozone\":369.83,\"nearestStormDistance\":625.38,\"nearestStormBearing\":232},{\"time\":1774022400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":57.56,\"apparentTemperature\":56.25,\"dewPoint\":37.04,\"humidity\":0.46,\"pressure\":1021.4,\"windSpeed\":6.9,\"windGust\":13.78,\"windBearing\":70,\"cloudCover\":0.72,\"uvIndex\":1.71,\"visibility\":10.0,\"ozone\":369.49,\"nearestStormDistance\":618.48,\"nearestStormBearing\":234},{\"time\":1774026000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":56.84,\"apparentTemperature\":54.79,\"dewPoint\":37.76,\"humidity\":0.49,\"pressure\":1021.0,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":72,\"cloudCover\":0.75,\"uvIndex\":0.87,\"visibility\":10.0,\"ozone\":369.23,\"nearestStormDistance\":608.24,\"nearestStormBearing\":230},{\"time\":1774029600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.4,\"apparentTemperature\":52.5,\"dewPoint\":38.48,\"humidity\":0.53,\"pressure\":1021.0,\"windSpeed\":5.74,\"windGust\":12.64,\"windBearing\":75,\"cloudCover\":0.71,\"uvIndex\":0.24,\"visibility\":10.0,\"ozone\":369.58,\"nearestStormDistance\":597.34,\"nearestStormBearing\":228},{\"time\":1774033200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.78,\"apparentTemperature\":50.62,\"dewPoint\":39.02,\"humidity\":0.57,\"pressure\":1021.3,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":85,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":369.7,\"nearestStormDistance\":586.9,\"nearestStormBearing\":226},{\"time\":1774036800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":51.8,\"apparentTemperature\":45.94,\"dewPoint\":39.92,\"humidity\":0.64,\"pressure\":1021.4,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":87,\"cloudCover\":0.74,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":369.17,\"nearestStormDistance\":589.07,\"nearestStormBearing\":218},{\"time\":1774040400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.0,\"apparentTemperature\":45.12,\"dewPoint\":40.46,\"humidity\":0.7,\"pressure\":1021.3,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":85,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":372.16,\"nearestStormDistance\":578.09,\"nearestStormBearing\":228},{\"time\":1774044000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":48.2,\"apparentTemperature\":43.93,\"dewPoint\":40.46,\"humidity\":0.74,\"pressure\":1021.6,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":82,\"cloudCover\":0.58,\"uvIndex\":0.0,\"visibility\":9.26,\"ozone\":376.15,\"nearestStormDistance\":572.14,\"nearestStormBearing\":223},{\"time\":1774047600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.3,\"apparentTemperature\":42.74,\"dewPoint\":40.28,\"humidity\":0.76,\"pressure\":1021.4,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":75,\"cloudCover\":0.56,\"uvIndex\":0.0,\"visibility\":9.01,\"ozone\":377.95,\"nearestStormDistance\":557.52,\"nearestStormBearing\":225},{\"time\":1774051200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.14,\"apparentTemperature\":41.64,\"dewPoint\":39.74,\"humidity\":0.81,\"pressure\":1021.3,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":76,\"cloudCover\":0.57,\"uvIndex\":0.0,\"visibility\":8.08,\"ozone\":379.41,\"nearestStormDistance\":565.66,\"nearestStormBearing\":217},{\"time\":1774054800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.42,\"apparentTemperature\":40.66,\"dewPoint\":39.56,\"humidity\":0.83,\"pressure\":1021.1,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":73,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":7.33,\"ozone\":379.64,\"nearestStormDistance\":646.48,\"nearestStormBearing\":325},{\"time\":1774058400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.8,\"apparentTemperature\":40.33,\"dewPoint\":39.38,\"humidity\":0.88,\"pressure\":1021.0,\"windSpeed\":4.6,\"windGust\":8.04,\"windBearing\":71,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":6.34,\"ozone\":379.09,\"nearestStormDistance\":489.41,\"nearestStormBearing\":222},{\"time\":1774062000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.54,\"apparentTemperature\":39.48,\"dewPoint\":38.3,\"humidity\":0.88,\"pressure\":1021.0,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":65,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":6.15,\"ozone\":375.97,\"nearestStormDistance\":474.58,\"nearestStormBearing\":223},{\"time\":1774065600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.18,\"apparentTemperature\":38.47,\"dewPoint\":38.12,\"humidity\":0.89,\"pressure\":1021.0,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":64,\"cloudCover\":0.8,\"uvIndex\":0.0,\"visibility\":5.65,\"ozone\":375.15,\"nearestStormDistance\":474.58,\"nearestStormBearing\":223},{\"time\":1774069200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.74,\"apparentTemperature\":38.03,\"dewPoint\":37.4,\"humidity\":0.91,\"pressure\":1020.7,\"windSpeed\":4.6,\"windGust\":8.04,\"windBearing\":61,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":5.22,\"ozone\":375.12,\"nearestStormDistance\":575.91,\"nearestStormBearing\":193},{\"time\":1774072800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.2,\"apparentTemperature\":37.22,\"dewPoint\":37.22,\"humidity\":0.93,\"pressure\":1021.1,\"windSpeed\":4.6,\"windGust\":8.04,\"windBearing\":56,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":3.85,\"ozone\":375.07,\"nearestStormDistance\":459.92,\"nearestStormBearing\":225},{\"time\":1774076400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.1,\"apparentTemperature\":37.49,\"dewPoint\":37.58,\"humidity\":0.91,\"pressure\":1021.2,\"windSpeed\":4.6,\"windGust\":8.04,\"windBearing\":60,\"cloudCover\":0.65,\"uvIndex\":0.16,\"visibility\":4.23,\"ozone\":376.0,\"nearestStormDistance\":496.23,\"nearestStormBearing\":201},{\"time\":1774080000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.8,\"apparentTemperature\":39.5,\"dewPoint\":38.3,\"humidity\":0.84,\"pressure\":1021.5,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":70,\"cloudCover\":0.63,\"uvIndex\":0.82,\"visibility\":4.41,\"ozone\":377.51,\"nearestStormDistance\":730.98,\"nearestStormBearing\":339},{\"time\":1774083600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.58,\"apparentTemperature\":43.07,\"dewPoint\":40.28,\"humidity\":0.79,\"pressure\":1021.4,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":76,\"cloudCover\":0.62,\"uvIndex\":1.76,\"visibility\":5.22,\"ozone\":377.76,\"nearestStormDistance\":730.98,\"nearestStormBearing\":339},{\"time\":1774087200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":49.82,\"apparentTemperature\":46.13,\"dewPoint\":40.1,\"humidity\":0.69,\"pressure\":1021.4,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":80,\"cloudCover\":0.52,\"uvIndex\":2.77,\"visibility\":8.33,\"ozone\":377.21,\"nearestStormDistance\":730.98,\"nearestStormBearing\":339},{\"time\":1774090800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.06,\"apparentTemperature\":51.71,\"dewPoint\":39.38,\"humidity\":0.6,\"pressure\":1020.9,\"windSpeed\":6.9,\"windGust\":11.48,\"windBearing\":81,\"cloudCover\":0.54,\"uvIndex\":3.61,\"visibility\":10.0,\"ozone\":378.95,\"nearestStormDistance\":641.71,\"nearestStormBearing\":327},{\"time\":1774094400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.4,\"apparentTemperature\":53.67,\"dewPoint\":37.94,\"humidity\":0.52,\"pressure\":1020.6,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":76,\"cloudCover\":0.49,\"uvIndex\":4.11,\"visibility\":10.0,\"ozone\":380.18,\"nearestStormDistance\":635.59,\"nearestStormBearing\":323},{\"time\":1774098000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":57.56,\"apparentTemperature\":54.85,\"dewPoint\":36.86,\"humidity\":0.46,\"pressure\":1020.0,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":73,\"cloudCover\":0.53,\"uvIndex\":4.17,\"visibility\":10.0,\"ozone\":379.01,\"nearestStormDistance\":612.17,\"nearestStormBearing\":330},{\"time\":1774101600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":59.18,\"apparentTemperature\":55.48,\"dewPoint\":36.14,\"humidity\":0.42,\"pressure\":1019.5,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":75,\"cloudCover\":0.48,\"uvIndex\":3.79,\"visibility\":10.0,\"ozone\":377.14,\"nearestStormDistance\":608.05,\"nearestStormBearing\":331},{\"time\":1774105200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":59.54,\"apparentTemperature\":55.67,\"dewPoint\":35.6,\"humidity\":0.41,\"pressure\":1018.9,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":75,\"cloudCover\":0.46,\"uvIndex\":3.04,\"visibility\":10.0,\"ozone\":378.01,\"nearestStormDistance\":608.05,\"nearestStormBearing\":331},{\"time\":1774108800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":59.18,\"apparentTemperature\":54.92,\"dewPoint\":35.42,\"humidity\":0.41,\"pressure\":1018.9,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":71,\"cloudCover\":0.38,\"uvIndex\":2.06,\"visibility\":10.0,\"ozone\":379.32,\"nearestStormDistance\":608.05,\"nearestStormBearing\":331},{\"time\":1774112400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":57.92,\"apparentTemperature\":53.35,\"dewPoint\":35.42,\"humidity\":0.43,\"pressure\":1019.0,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":74,\"cloudCover\":0.36,\"uvIndex\":1.07,\"visibility\":10.0,\"ozone\":381.3,\"nearestStormDistance\":608.05,\"nearestStormBearing\":331},{\"time\":1774116000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.04,\"apparentTemperature\":51.01,\"dewPoint\":35.24,\"humidity\":0.47,\"pressure\":1019.1,\"windSpeed\":5.74,\"windGust\":11.48,\"windBearing\":81,\"cloudCover\":0.33,\"uvIndex\":0.3,\"visibility\":10.0,\"ozone\":384.61,\"nearestStormDistance\":624.46,\"nearestStormBearing\":332},{\"time\":1774119600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.42,\"apparentTemperature\":45.84,\"dewPoint\":35.42,\"humidity\":0.5,\"pressure\":1019.2,\"windSpeed\":4.6,\"windGust\":10.34,\"windBearing\":84,\"cloudCover\":0.27,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.92,\"nearestStormDistance\":628.49,\"nearestStormBearing\":330},{\"time\":1774123200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.72,\"apparentTemperature\":45.01,\"dewPoint\":36.14,\"humidity\":0.57,\"pressure\":1019.5,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":86,\"cloudCover\":0.22,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.55,\"nearestStormDistance\":632.71,\"nearestStormBearing\":329},{\"time\":1774126800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":48.02,\"apparentTemperature\":43.91,\"dewPoint\":35.96,\"humidity\":0.63,\"pressure\":1019.5,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":88,\"cloudCover\":0.19,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.2,\"nearestStormDistance\":637.12,\"nearestStormBearing\":328},{\"time\":1774130400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.04,\"apparentTemperature\":42.73,\"dewPoint\":35.6,\"humidity\":0.67,\"pressure\":1019.5,\"windSpeed\":2.3,\"windGust\":6.9,\"windBearing\":95,\"cloudCover\":0.13,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.93,\"nearestStormDistance\":646.48,\"nearestStormBearing\":325},{\"time\":1774134000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.24,\"apparentTemperature\":42.11,\"dewPoint\":36.14,\"humidity\":0.73,\"pressure\":1019.3,\"windSpeed\":2.3,\"windGust\":5.74,\"windBearing\":86,\"cloudCover\":0.09,\"uvIndex\":0.0,\"visibility\":9.51,\"ozone\":394.93,\"nearestStormDistance\":674.54,\"nearestStormBearing\":202},{\"time\":1774137600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.08,\"apparentTemperature\":41.87,\"dewPoint\":35.42,\"humidity\":0.77,\"pressure\":1019.0,\"windSpeed\":2.3,\"windGust\":5.74,\"windBearing\":88,\"cloudCover\":0.13,\"uvIndex\":0.0,\"visibility\":8.26,\"ozone\":393.2,\"nearestStormDistance\":655.88,\"nearestStormBearing\":236},{\"time\":1774141200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.46,\"apparentTemperature\":41.4,\"dewPoint\":34.88,\"humidity\":0.8,\"pressure\":1018.6,\"windSpeed\":2.3,\"windGust\":5.74,\"windBearing\":62,\"cloudCover\":0.23,\"uvIndex\":0.0,\"visibility\":6.59,\"ozone\":392.8,\"nearestStormDistance\":665.49,\"nearestStormBearing\":229},{\"time\":1774144800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.02,\"apparentTemperature\":40.55,\"dewPoint\":34.16,\"humidity\":0.83,\"pressure\":1018.3,\"windSpeed\":2.3,\"windGust\":5.74,\"windBearing\":75,\"cloudCover\":0.31,\"uvIndex\":0.0,\"visibility\":5.97,\"ozone\":392.03,\"nearestStormDistance\":586.59,\"nearestStormBearing\":202},{\"time\":1774148400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.02,\"apparentTemperature\":39.71,\"dewPoint\":34.16,\"humidity\":0.83,\"pressure\":1018.1,\"windSpeed\":1.14,\"windGust\":5.74,\"windBearing\":159,\"cloudCover\":0.25,\"uvIndex\":0.0,\"visibility\":5.03,\"ozone\":394.08,\"nearestStormDistance\":574.68,\"nearestStormBearing\":191},{\"time\":1774152000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.4,\"apparentTemperature\":39.35,\"dewPoint\":33.26,\"humidity\":0.85,\"pressure\":1018.0,\"windSpeed\":2.3,\"windGust\":5.74,\"windBearing\":125,\"cloudCover\":0.34,\"uvIndex\":0.0,\"visibility\":4.91,\"ozone\":396.64,\"nearestStormDistance\":571.98,\"nearestStormBearing\":186},{\"time\":1774155600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":36.86,\"apparentTemperature\":38.61,\"dewPoint\":33.26,\"humidity\":0.87,\"pressure\":1018.0,\"windSpeed\":2.3,\"windGust\":4.6,\"windBearing\":153,\"cloudCover\":0.6,\"uvIndex\":0.0,\"visibility\":4.47,\"ozone\":399.7,\"nearestStormDistance\":474.58,\"nearestStormBearing\":223},{\"time\":1774159200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.94,\"apparentTemperature\":38.27,\"dewPoint\":34.34,\"humidity\":0.87,\"pressure\":1018.1,\"windSpeed\":1.14,\"windGust\":3.44,\"windBearing\":226,\"cloudCover\":0.6,\"uvIndex\":0.0,\"visibility\":3.48,\"ozone\":402.3,\"nearestStormDistance\":440.29,\"nearestStormBearing\":225},{\"time\":1774162800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.1,\"apparentTemperature\":38.57,\"dewPoint\":35.96,\"humidity\":0.85,\"pressure\":1018.2,\"windSpeed\":1.14,\"windGust\":3.44,\"windBearing\":201,\"cloudCover\":0.57,\"uvIndex\":0.17,\"visibility\":3.6,\"ozone\":407.11,\"nearestStormDistance\":417.14,\"nearestStormBearing\":228},{\"time\":1774166400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.88,\"apparentTemperature\":41.28,\"dewPoint\":36.5,\"humidity\":0.75,\"pressure\":1018.2,\"windSpeed\":1.14,\"windGust\":4.6,\"windBearing\":202,\"cloudCover\":0.58,\"uvIndex\":0.83,\"visibility\":4.78,\"ozone\":408.36,\"nearestStormDistance\":396.07,\"nearestStormBearing\":233},{\"time\":1774170000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.84,\"apparentTemperature\":44.51,\"dewPoint\":37.94,\"humidity\":0.68,\"pressure\":1018.4,\"windSpeed\":2.3,\"windGust\":6.9,\"windBearing\":245,\"cloudCover\":0.55,\"uvIndex\":1.78,\"visibility\":5.97,\"ozone\":407.31,\"nearestStormDistance\":383.79,\"nearestStormBearing\":230},{\"time\":1774173600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":51.08,\"apparentTemperature\":47.15,\"dewPoint\":38.48,\"humidity\":0.62,\"pressure\":1018.3,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":257,\"cloudCover\":0.52,\"uvIndex\":2.78,\"visibility\":8.02,\"ozone\":407.56,\"nearestStormDistance\":357.47,\"nearestStormBearing\":246},{\"time\":1774177200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.96,\"apparentTemperature\":51.49,\"dewPoint\":38.66,\"humidity\":0.56,\"pressure\":1018.3,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":269,\"cloudCover\":0.54,\"uvIndex\":3.61,\"visibility\":10.0,\"ozone\":409.05,\"nearestStormDistance\":332.58,\"nearestStormBearing\":244},{\"time\":1774180800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":56.12,\"apparentTemperature\":53.47,\"dewPoint\":38.48,\"humidity\":0.51,\"pressure\":1018.1,\"windSpeed\":5.74,\"windGust\":11.48,\"windBearing\":282,\"cloudCover\":0.59,\"uvIndex\":4.1,\"visibility\":10.0,\"ozone\":409.96,\"nearestStormDistance\":306.12,\"nearestStormBearing\":244},{\"time\":1774184400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":57.92,\"apparentTemperature\":54.93,\"dewPoint\":38.48,\"humidity\":0.48,\"pressure\":1017.8,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":291,\"cloudCover\":0.6,\"uvIndex\":4.15,\"visibility\":10.0,\"ozone\":409.68,\"nearestStormDistance\":283.07,\"nearestStormBearing\":216},{\"time\":1774188000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":59.18,\"apparentTemperature\":56.05,\"dewPoint\":37.94,\"humidity\":0.45,\"pressure\":1017.7,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":294,\"cloudCover\":0.58,\"uvIndex\":3.77,\"visibility\":10.0,\"ozone\":408.47,\"nearestStormDistance\":253.48,\"nearestStormBearing\":229},{\"time\":1774191600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":59.18,\"apparentTemperature\":56.59,\"dewPoint\":38.12,\"humidity\":0.45,\"pressure\":1017.7,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":298,\"cloudCover\":0.58,\"uvIndex\":3.02,\"visibility\":10.0,\"ozone\":406.31,\"nearestStormDistance\":239.8,\"nearestStormBearing\":231},{\"time\":1774195200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":59.0,\"apparentTemperature\":56.39,\"dewPoint\":38.48,\"humidity\":0.46,\"pressure\":1017.4,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":306,\"cloudCover\":0.6,\"uvIndex\":2.05,\"visibility\":10.0,\"ozone\":404.81,\"nearestStormDistance\":233.51,\"nearestStormBearing\":236},{\"time\":1774198800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":57.74,\"apparentTemperature\":55.18,\"dewPoint\":38.66,\"humidity\":0.49,\"pressure\":1017.7,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":307,\"cloudCover\":0.61,\"uvIndex\":1.07,\"visibility\":10.0,\"ozone\":401.0,\"nearestStormDistance\":220.0,\"nearestStormBearing\":232},{\"time\":1774202400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.58,\"apparentTemperature\":52.41,\"dewPoint\":38.84,\"humidity\":0.53,\"pressure\":1018.4,\"windSpeed\":6.9,\"windGust\":12.64,\"windBearing\":313,\"cloudCover\":0.61,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":396.45,\"nearestStormDistance\":213.69,\"nearestStormBearing\":230},{\"time\":1774206000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":54.68,\"apparentTemperature\":46.31,\"dewPoint\":39.2,\"humidity\":0.56,\"pressure\":1018.9,\"windSpeed\":5.74,\"windGust\":11.48,\"windBearing\":312,\"cloudCover\":0.58,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.2,\"nearestStormDistance\":206.94,\"nearestStormBearing\":235},{\"time\":1774209600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":52.88,\"apparentTemperature\":45.65,\"dewPoint\":40.1,\"humidity\":0.62,\"pressure\":1019.2,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":310,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.49,\"nearestStormDistance\":212.12,\"nearestStormBearing\":219},{\"time\":1774213200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.72,\"apparentTemperature\":46.22,\"dewPoint\":40.82,\"humidity\":0.69,\"pressure\":1019.7,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":321,\"cloudCover\":0.46,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.16,\"nearestStormDistance\":207.72,\"nearestStormBearing\":216},{\"time\":1774216800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":49.1,\"apparentTemperature\":47.37,\"dewPoint\":40.82,\"humidity\":0.73,\"pressure\":1020.6,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":348,\"cloudCover\":0.45,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.64,\"nearestStormDistance\":223.57,\"nearestStormBearing\":213},{\"time\":1774220400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.66,\"apparentTemperature\":46.49,\"dewPoint\":40.64,\"humidity\":0.76,\"pressure\":1020.7,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":354,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.41,\"nearestStormDistance\":211.64,\"nearestStormBearing\":198},{\"time\":1774224000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.4,\"apparentTemperature\":46.13,\"dewPoint\":40.64,\"humidity\":0.8,\"pressure\":1020.6,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":10,\"cloudCover\":0.62,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.56,\"nearestStormDistance\":211.64,\"nearestStormBearing\":198},{\"time\":1774227600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.68,\"apparentTemperature\":46.91,\"dewPoint\":40.46,\"humidity\":0.82,\"pressure\":1020.7,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":356,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.5,\"nearestStormDistance\":248.98,\"nearestStormBearing\":257},{\"time\":1774231200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.6,\"apparentTemperature\":45.75,\"dewPoint\":40.46,\"humidity\":0.85,\"pressure\":1020.6,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":357,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.56,\"nearestStormDistance\":194.56,\"nearestStormBearing\":238},{\"time\":1774234800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.42,\"apparentTemperature\":44.6,\"dewPoint\":40.46,\"humidity\":0.86,\"pressure\":1020.4,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":24,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":8.76,\"ozone\":385.39,\"nearestStormDistance\":187.31,\"nearestStormBearing\":236},{\"time\":1774238400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.06,\"apparentTemperature\":43.41,\"dewPoint\":40.28,\"humidity\":0.86,\"pressure\":1020.4,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":12,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":8.57,\"ozone\":384.88,\"nearestStormDistance\":187.31,\"nearestStormBearing\":236},{\"time\":1774242000,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.06,\"apparentTemperature\":43.05,\"dewPoint\":40.64,\"humidity\":0.88,\"pressure\":1020.7,\"windSpeed\":3.44,\"windGust\":9.2,\"windBearing\":35,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":7.46,\"ozone\":384.14,\"nearestStormDistance\":182.04,\"nearestStormBearing\":225},{\"time\":1774245600,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.6,\"apparentTemperature\":42.63,\"dewPoint\":41.18,\"humidity\":0.88,\"pressure\":1021.2,\"windSpeed\":3.44,\"windGust\":8.04,\"windBearing\":45,\"cloudCover\":0.92,\"uvIndex\":0.0,\"visibility\":8.76,\"ozone\":383.56,\"nearestStormDistance\":191.36,\"nearestStormBearing\":190},{\"time\":1774249200,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":44.96,\"apparentTemperature\":43.58,\"dewPoint\":41.54,\"humidity\":0.88,\"pressure\":1021.1,\"windSpeed\":4.6,\"windGust\":8.04,\"windBearing\":52,\"cloudCover\":0.94,\"uvIndex\":0.15,\"visibility\":8.7,\"ozone\":383.14,\"nearestStormDistance\":190.22,\"nearestStormBearing\":180},{\"time\":1774252800,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0059,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.58,\"apparentTemperature\":44.12,\"dewPoint\":41.54,\"humidity\":0.82,\"pressure\":1021.2,\"windSpeed\":4.6,\"windGust\":9.2,\"windBearing\":54,\"cloudCover\":0.95,\"uvIndex\":0.7,\"visibility\":9.51,\"ozone\":383.4,\"nearestStormDistance\":183.82,\"nearestStormBearing\":255},{\"time\":1774256400,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":48.56,\"apparentTemperature\":45.92,\"dewPoint\":41.72,\"humidity\":0.77,\"pressure\":1021.1,\"windSpeed\":5.74,\"windGust\":10.34,\"windBearing\":29,\"cloudCover\":0.99,\"uvIndex\":1.48,\"visibility\":10.0,\"ozone\":384.36,\"nearestStormDistance\":121.65,\"nearestStormBearing\":225},{\"time\":1774260000,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.13,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.54,\"apparentTemperature\":49.83,\"dewPoint\":41.72,\"humidity\":0.72,\"pressure\":1021.1,\"windSpeed\":6.9,\"windGust\":13.78,\"windBearing\":262,\"cloudCover\":0.99,\"uvIndex\":2.2,\"visibility\":10.0,\"ozone\":384.36,\"nearestStormDistance\":172.93,\"nearestStormBearing\":180},{\"time\":1774263600,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.15,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":51.98,\"apparentTemperature\":52.69,\"dewPoint\":41.9,\"humidity\":0.68,\"pressure\":1020.2,\"windSpeed\":8.04,\"windGust\":14.95,\"windBearing\":260,\"cloudCover\":0.98,\"uvIndex\":3.18,\"visibility\":10.0,\"ozone\":383.2,\"nearestStormDistance\":108.51,\"nearestStormBearing\":206},{\"time\":1774267200,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.96,\"apparentTemperature\":54.26,\"dewPoint\":41.54,\"humidity\":0.63,\"pressure\":1020.0,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":271,\"cloudCover\":0.98,\"uvIndex\":3.21,\"visibility\":10.0,\"ozone\":383.22,\"nearestStormDistance\":96.33,\"nearestStormBearing\":218},{\"time\":1774270800,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.17,\"precipIntensityError\":0.0102,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.4,\"apparentTemperature\":54.91,\"dewPoint\":41.9,\"humidity\":0.6,\"pressure\":1019.6,\"windSpeed\":9.2,\"windGust\":17.25,\"windBearing\":267,\"cloudCover\":0.98,\"uvIndex\":3.12,\"visibility\":10.0,\"ozone\":381.39,\"nearestStormDistance\":99.52,\"nearestStormBearing\":211},{\"time\":1774274400,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.19,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.76,\"apparentTemperature\":55.56,\"dewPoint\":42.08,\"humidity\":0.6,\"pressure\":1018.7,\"windSpeed\":10.34,\"windGust\":17.25,\"windBearing\":262,\"cloudCover\":0.98,\"uvIndex\":3.04,\"visibility\":10.0,\"ozone\":379.55,\"nearestStormDistance\":102.7,\"nearestStormBearing\":205},{\"time\":1774278000,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.76,\"apparentTemperature\":56.21,\"dewPoint\":41.9,\"humidity\":0.6,\"pressure\":1018.2,\"windSpeed\":8.04,\"windGust\":18.39,\"windBearing\":271,\"cloudCover\":0.96,\"uvIndex\":2.95,\"visibility\":10.0,\"ozone\":377.72,\"nearestStormDistance\":105.89,\"nearestStormBearing\":198},{\"time\":1774281600,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.22,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.4,\"apparentTemperature\":55.24,\"dewPoint\":40.82,\"humidity\":0.58,\"pressure\":1018.0,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":278,\"cloudCover\":0.95,\"uvIndex\":2.2,\"visibility\":10.0,\"ozone\":375.78,\"nearestStormDistance\":108.1,\"nearestStormBearing\":218},{\"time\":1774285200,\"summary\":\"Overcast\",\"icon\":\"cloudy\",\"precipIntensity\":0.0,\"precipProbability\":0.24,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":54.68,\"apparentTemperature\":54.28,\"dewPoint\":41.36,\"humidity\":0.61,\"pressure\":1017.7,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":275,\"cloudCover\":0.91,\"uvIndex\":1.44,\"visibility\":10.0,\"ozone\":373.84,\"nearestStormDistance\":110.3,\"nearestStormBearing\":238},{\"time\":1774288800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.26,\"precipIntensityError\":0.0067,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.6,\"apparentTemperature\":53.32,\"dewPoint\":40.64,\"humidity\":0.61,\"pressure\":1017.7,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":279,\"cloudCover\":0.86,\"uvIndex\":0.69,\"visibility\":10.0,\"ozone\":371.9,\"nearestStormDistance\":112.5,\"nearestStormBearing\":258},{\"time\":1774292400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.24,\"precipIntensityError\":0.0067,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":52.34,\"apparentTemperature\":52.63,\"dewPoint\":40.28,\"humidity\":0.63,\"pressure\":1017.8,\"windSpeed\":9.2,\"windGust\":14.95,\"windBearing\":252,\"cloudCover\":0.81,\"uvIndex\":0.46,\"visibility\":10.0,\"ozone\":371.87,\"nearestStormDistance\":90.73,\"nearestStormBearing\":251},{\"time\":1774296000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.22,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.36,\"apparentTemperature\":51.94,\"dewPoint\":40.64,\"humidity\":0.69,\"pressure\":1017.7,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":244,\"cloudCover\":0.78,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":371.84,\"nearestStormDistance\":68.96,\"nearestStormBearing\":243},{\"time\":1774299600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":49.28,\"apparentTemperature\":51.25,\"dewPoint\":40.82,\"humidity\":0.72,\"pressure\":1017.6,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":242,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":371.8,\"nearestStormDistance\":47.2,\"nearestStormBearing\":236},{\"time\":1774303200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.19,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":48.56,\"apparentTemperature\":49.4,\"dewPoint\":41.9,\"humidity\":0.78,\"pressure\":1017.4,\"windSpeed\":8.04,\"windGust\":14.95,\"windBearing\":243,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":370.09,\"nearestStormDistance\":42.99,\"nearestStormBearing\":217},{\"time\":1774306800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.19,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.66,\"apparentTemperature\":47.55,\"dewPoint\":42.08,\"humidity\":0.81,\"pressure\":1016.9,\"windSpeed\":8.04,\"windGust\":14.95,\"windBearing\":238,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":368.37,\"nearestStormDistance\":38.79,\"nearestStormBearing\":198},{\"time\":1774310400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.18,\"precipIntensityError\":0.0102,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.4,\"apparentTemperature\":45.7,\"dewPoint\":41.9,\"humidity\":0.84,\"pressure\":1016.6,\"windSpeed\":6.9,\"windGust\":13.78,\"windBearing\":243,\"cloudCover\":0.49,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":366.66,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774314000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.19,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.68,\"apparentTemperature\":44.95,\"dewPoint\":41.72,\"humidity\":0.86,\"pressure\":1016.3,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":240,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":364.09,\"nearestStormDistance\":38.87,\"nearestStormBearing\":221},{\"time\":1774317600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.86,\"apparentTemperature\":44.2,\"dewPoint\":41.72,\"humidity\":0.85,\"pressure\":1015.7,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":243,\"cloudCover\":0.74,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":361.53,\"nearestStormDistance\":43.15,\"nearestStormBearing\":262},{\"time\":1774321200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.21,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.58,\"apparentTemperature\":43.46,\"dewPoint\":41.54,\"humidity\":0.82,\"pressure\":1015.2,\"windSpeed\":6.9,\"windGust\":14.95,\"windBearing\":244,\"cloudCover\":0.69,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":358.97,\"nearestStormDistance\":47.44,\"nearestStormBearing\":303},{\"time\":1774324800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.22,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.4,\"apparentTemperature\":43.47,\"dewPoint\":41.18,\"humidity\":0.82,\"pressure\":1014.8,\"windSpeed\":9.2,\"windGust\":14.95,\"windBearing\":245,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":357.62,\"nearestStormDistance\":48.92,\"nearestStormBearing\":322},{\"time\":1774328400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.23,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.68,\"apparentTemperature\":43.48,\"dewPoint\":41.54,\"humidity\":0.85,\"pressure\":1014.3,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":243,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":356.28,\"nearestStormDistance\":50.4,\"nearestStormBearing\":341},{\"time\":1774332000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.24,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.22,\"apparentTemperature\":43.49,\"dewPoint\":42.62,\"humidity\":0.87,\"pressure\":1014.2,\"windSpeed\":9.2,\"windGust\":17.25,\"windBearing\":243,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":354.94,\"nearestStormDistance\":51.88,\"nearestStormBearing\":360},{\"time\":1774335600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.23,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.66,\"apparentTemperature\":43.66,\"dewPoint\":42.98,\"humidity\":0.84,\"pressure\":1013.6,\"windSpeed\":11.48,\"windGust\":18.39,\"windBearing\":247,\"cloudCover\":0.7,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":354.08,\"nearestStormDistance\":40.35,\"nearestStormBearing\":360},{\"time\":1774339200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.23,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":49.82,\"apparentTemperature\":43.84,\"dewPoint\":43.16,\"humidity\":0.78,\"pressure\":1013.8,\"windSpeed\":12.64,\"windGust\":21.83,\"windBearing\":250,\"cloudCover\":0.69,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":353.21,\"nearestStormDistance\":28.82,\"nearestStormBearing\":360},{\"time\":1774342800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.22,\"precipIntensityError\":0.0099,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":51.8,\"apparentTemperature\":44.01,\"dewPoint\":43.88,\"humidity\":0.74,\"pressure\":1013.5,\"windSpeed\":13.78,\"windGust\":22.99,\"windBearing\":256,\"cloudCover\":0.72,\"uvIndex\":0.09,\"visibility\":10.0,\"ozone\":352.34,\"nearestStormDistance\":17.29,\"nearestStormBearing\":360},{\"time\":1774346400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.21,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":52.7,\"apparentTemperature\":44.69,\"dewPoint\":44.06,\"humidity\":0.72,\"pressure\":1013.3,\"windSpeed\":14.95,\"windGust\":24.13,\"windBearing\":259,\"cloudCover\":0.77,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":352.7,\"nearestStormDistance\":28.82,\"nearestStormBearing\":300},{\"time\":1774350000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.21,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.42,\"apparentTemperature\":45.37,\"dewPoint\":43.52,\"humidity\":0.69,\"pressure\":1013.0,\"windSpeed\":16.08,\"windGust\":25.29,\"windBearing\":267,\"cloudCover\":0.81,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":353.06,\"nearestStormDistance\":40.35,\"nearestStormBearing\":240},{\"time\":1774353600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0067,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":54.14,\"apparentTemperature\":46.05,\"dewPoint\":43.16,\"humidity\":0.66,\"pressure\":1012.4,\"windSpeed\":16.08,\"windGust\":26.43,\"windBearing\":267,\"cloudCover\":0.72,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":353.42,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774357200,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0067,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.22,\"apparentTemperature\":48.77,\"dewPoint\":42.26,\"humidity\":0.62,\"pressure\":1012.1,\"windSpeed\":16.08,\"windGust\":26.43,\"windBearing\":264,\"cloudCover\":0.75,\"uvIndex\":0.55,\"visibility\":10.0,\"ozone\":354.1,\"nearestStormDistance\":81.86,\"nearestStormBearing\":195},{\"time\":1774360800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.58,\"apparentTemperature\":51.49,\"dewPoint\":42.26,\"humidity\":0.61,\"pressure\":1012.1,\"windSpeed\":16.08,\"windGust\":27.59,\"windBearing\":264,\"cloudCover\":0.73,\"uvIndex\":0.83,\"visibility\":10.0,\"ozone\":354.78,\"nearestStormDistance\":111.83,\"nearestStormBearing\":210},{\"time\":1774364400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.4,\"apparentTemperature\":54.21,\"dewPoint\":42.08,\"humidity\":0.61,\"pressure\":1012.3,\"windSpeed\":16.08,\"windGust\":27.59,\"windBearing\":264,\"cloudCover\":0.7,\"uvIndex\":1.12,\"visibility\":10.0,\"ozone\":355.46,\"nearestStormDistance\":141.81,\"nearestStormBearing\":225},{\"time\":1774368000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0059,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":55.04,\"apparentTemperature\":53.59,\"dewPoint\":42.44,\"humidity\":0.62,\"pressure\":1012.4,\"windSpeed\":16.08,\"windGust\":26.43,\"windBearing\":267,\"cloudCover\":0.68,\"uvIndex\":0.95,\"visibility\":10.0,\"ozone\":357.46,\"nearestStormDistance\":112.89,\"nearestStormBearing\":231},{\"time\":1774371600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":54.5,\"apparentTemperature\":52.98,\"dewPoint\":42.44,\"humidity\":0.64,\"pressure\":1011.9,\"windSpeed\":14.95,\"windGust\":24.13,\"windBearing\":267,\"cloudCover\":0.67,\"uvIndex\":0.78,\"visibility\":10.0,\"ozone\":359.45,\"nearestStormDistance\":83.97,\"nearestStormBearing\":237},{\"time\":1774375200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":52.52,\"apparentTemperature\":52.36,\"dewPoint\":41.18,\"humidity\":0.65,\"pressure\":1012.6,\"windSpeed\":12.64,\"windGust\":22.99,\"windBearing\":267,\"cloudCover\":0.65,\"uvIndex\":0.62,\"visibility\":10.0,\"ozone\":361.44,\"nearestStormDistance\":55.04,\"nearestStormBearing\":243},{\"time\":1774378800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.18,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.72,\"apparentTemperature\":51.59,\"dewPoint\":41.0,\"humidity\":0.69,\"pressure\":1012.6,\"windSpeed\":11.48,\"windGust\":21.83,\"windBearing\":266,\"cloudCover\":0.6,\"uvIndex\":0.41,\"visibility\":10.0,\"ozone\":369.04,\"nearestStormDistance\":59.09,\"nearestStormBearing\":240},{\"time\":1774382400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.17,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.36,\"apparentTemperature\":50.82,\"dewPoint\":42.08,\"humidity\":0.73,\"pressure\":1013.2,\"windSpeed\":11.48,\"windGust\":18.39,\"windBearing\":267,\"cloudCover\":0.57,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":376.64,\"nearestStormDistance\":63.14,\"nearestStormBearing\":236},{\"time\":1774386000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.15,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.84,\"apparentTemperature\":50.06,\"dewPoint\":41.9,\"humidity\":0.8,\"pressure\":1013.3,\"windSpeed\":10.34,\"windGust\":18.39,\"windBearing\":264,\"cloudCover\":0.45,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":384.24,\"nearestStormDistance\":67.19,\"nearestStormBearing\":233},{\"time\":1774389600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.13,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.4,\"apparentTemperature\":50.19,\"dewPoint\":41.54,\"humidity\":0.83,\"pressure\":1013.0,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":262,\"cloudCover\":0.49,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":384.8,\"nearestStormDistance\":67.85,\"nearestStormBearing\":215},{\"time\":1774393200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.86,\"apparentTemperature\":50.32,\"dewPoint\":41.54,\"humidity\":0.85,\"pressure\":1012.6,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":256,\"cloudCover\":0.45,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":385.35,\"nearestStormDistance\":68.51,\"nearestStormBearing\":197},{\"time\":1774396800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.94,\"apparentTemperature\":50.45,\"dewPoint\":41.54,\"humidity\":0.81,\"pressure\":1012.3,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":259,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":385.91,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774400400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.58,\"apparentTemperature\":48.54,\"dewPoint\":41.18,\"humidity\":0.81,\"pressure\":1011.9,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":258,\"cloudCover\":0.6,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":387.86,\"nearestStormDistance\":58.18,\"nearestStormBearing\":188},{\"time\":1774404000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.14,\"precipIntensityError\":0.0067,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.86,\"apparentTemperature\":46.64,\"dewPoint\":41.0,\"humidity\":0.83,\"pressure\":1011.3,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":257,\"cloudCover\":0.58,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.81,\"nearestStormDistance\":47.19,\"nearestStormBearing\":197},{\"time\":1774407600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.32,\"apparentTemperature\":44.73,\"dewPoint\":41.0,\"humidity\":0.85,\"pressure\":1010.8,\"windSpeed\":9.2,\"windGust\":17.25,\"windBearing\":251,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.76,\"nearestStormDistance\":36.2,\"nearestStormBearing\":206},{\"time\":1774411200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.18,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":45.14,\"apparentTemperature\":45.2,\"dewPoint\":40.46,\"humidity\":0.84,\"pressure\":1011.2,\"windSpeed\":9.2,\"windGust\":16.08,\"windBearing\":248,\"cloudCover\":0.6,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.22,\"nearestStormDistance\":29.9,\"nearestStormBearing\":197},{\"time\":1774414800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":46.22,\"apparentTemperature\":45.67,\"dewPoint\":40.82,\"humidity\":0.81,\"pressure\":1010.9,\"windSpeed\":9.2,\"windGust\":17.25,\"windBearing\":244,\"cloudCover\":0.74,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.68,\"nearestStormDistance\":23.6,\"nearestStormBearing\":188},{\"time\":1774418400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.22,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.3,\"apparentTemperature\":46.14,\"dewPoint\":41.36,\"humidity\":0.8,\"pressure\":1012.2,\"windSpeed\":10.34,\"windGust\":17.25,\"windBearing\":254,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":387.13,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774422000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.22,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.3,\"apparentTemperature\":48.24,\"dewPoint\":41.36,\"humidity\":0.8,\"pressure\":1012.3,\"windSpeed\":10.34,\"windGust\":16.08,\"windBearing\":256,\"cloudCover\":0.83,\"uvIndex\":0.19,\"visibility\":10.0,\"ozone\":385.42,\"nearestStormDistance\":190.39,\"nearestStormBearing\":198},{\"time\":1774425600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.23,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.66,\"apparentTemperature\":50.33,\"dewPoint\":41.9,\"humidity\":0.8,\"pressure\":1013.6,\"windSpeed\":11.48,\"windGust\":18.39,\"windBearing\":256,\"cloudCover\":0.74,\"uvIndex\":0.37,\"visibility\":10.0,\"ozone\":383.72,\"nearestStormDistance\":363.5,\"nearestStormBearing\":216},{\"time\":1774429200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.23,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":48.38,\"apparentTemperature\":52.43,\"dewPoint\":41.54,\"humidity\":0.77,\"pressure\":1014.1,\"windSpeed\":12.64,\"windGust\":20.69,\"windBearing\":261,\"cloudCover\":0.79,\"uvIndex\":0.56,\"visibility\":10.0,\"ozone\":382.01,\"nearestStormDistance\":536.6,\"nearestStormBearing\":234},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.23,\"precipIntensityError\":0.0102,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.18,\"apparentTemperature\":53.02,\"dewPoint\":41.9,\"humidity\":0.73,\"pressure\":1013.8,\"windSpeed\":13.78,\"windGust\":21.83,\"windBearing\":273,\"cloudCover\":0.82,\"uvIndex\":0.85,\"visibility\":10.0,\"ozone\":379.47,\"nearestStormDistance\":473.39,\"nearestStormBearing\":232},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.24,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":51.98,\"apparentTemperature\":53.6,\"dewPoint\":41.54,\"humidity\":0.67,\"pressure\":1013.8,\"windSpeed\":13.78,\"windGust\":22.99,\"windBearing\":272,\"cloudCover\":0.78,\"uvIndex\":1.14,\"visibility\":10.0,\"ozone\":376.94,\"nearestStormDistance\":410.18,\"nearestStormBearing\":229},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.24,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.6,\"apparentTemperature\":54.19,\"dewPoint\":41.36,\"humidity\":0.63,\"pressure\":1013.5,\"windSpeed\":13.78,\"windGust\":22.99,\"windBearing\":281,\"cloudCover\":0.68,\"uvIndex\":1.44,\"visibility\":10.0,\"ozone\":374.4,\"nearestStormDistance\":346.97,\"nearestStormBearing\":226},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.23,\"precipIntensityError\":0.0071,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":54.32,\"apparentTemperature\":55.1,\"dewPoint\":41.9,\"humidity\":0.63,\"pressure\":1014.2,\"windSpeed\":14.95,\"windGust\":24.13,\"windBearing\":279,\"cloudCover\":0.72,\"uvIndex\":1.53,\"visibility\":10.0,\"ozone\":370.37,\"nearestStormDistance\":273.81,\"nearestStormBearing\":227},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.21,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":54.68,\"apparentTemperature\":56.01,\"dewPoint\":40.64,\"humidity\":0.59,\"pressure\":1013.7,\"windSpeed\":14.95,\"windGust\":25.29,\"windBearing\":279,\"cloudCover\":0.72,\"uvIndex\":1.63,\"visibility\":10.0,\"ozone\":366.34,\"nearestStormDistance\":200.65,\"nearestStormBearing\":228},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":54.86,\"apparentTemperature\":56.93,\"dewPoint\":41.18,\"humidity\":0.6,\"pressure\":1014.0,\"windSpeed\":13.78,\"windGust\":24.13,\"windBearing\":275,\"cloudCover\":0.71,\"uvIndex\":1.72,\"visibility\":10.0,\"ozone\":362.31,\"nearestStormDistance\":127.5,\"nearestStormBearing\":229},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.19,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":54.5,\"apparentTemperature\":56.04,\"dewPoint\":41.0,\"humidity\":0.6,\"pressure\":1015.1,\"windSpeed\":13.78,\"windGust\":22.99,\"windBearing\":275,\"cloudCover\":0.71,\"uvIndex\":1.42,\"visibility\":10.0,\"ozone\":358.35,\"nearestStormDistance\":132.27,\"nearestStormBearing\":227},{\"time\":1774458000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.17,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":53.78,\"apparentTemperature\":55.15,\"dewPoint\":41.0,\"humidity\":0.62,\"pressure\":1015.2,\"windSpeed\":12.64,\"windGust\":20.69,\"windBearing\":280,\"cloudCover\":0.7,\"uvIndex\":1.11,\"visibility\":10.0,\"ozone\":354.4,\"nearestStormDistance\":137.04,\"nearestStormBearing\":226},{\"time\":1774461600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":52.16,\"apparentTemperature\":54.27,\"dewPoint\":41.0,\"humidity\":0.66,\"pressure\":1015.1,\"windSpeed\":11.48,\"windGust\":19.55,\"windBearing\":284,\"cloudCover\":0.72,\"uvIndex\":0.8,\"visibility\":10.0,\"ozone\":350.45,\"nearestStormDistance\":141.81,\"nearestStormBearing\":225},{\"time\":1774465200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.15,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":50.72,\"apparentTemperature\":52.72,\"dewPoint\":41.36,\"humidity\":0.7,\"pressure\":1015.5,\"windSpeed\":10.34,\"windGust\":17.25,\"windBearing\":285,\"cloudCover\":0.66,\"uvIndex\":0.54,\"visibility\":10.0,\"ozone\":345.5,\"nearestStormDistance\":153.48,\"nearestStormBearing\":223},{\"time\":1774468800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.14,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":49.64,\"apparentTemperature\":51.18,\"dewPoint\":41.9,\"humidity\":0.75,\"pressure\":1015.8,\"windSpeed\":9.2,\"windGust\":14.95,\"windBearing\":276,\"cloudCover\":0.6,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":340.55,\"nearestStormDistance\":165.16,\"nearestStormBearing\":222},{\"time\":1774472400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.13,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":48.74,\"apparentTemperature\":49.63,\"dewPoint\":42.26,\"humidity\":0.78,\"pressure\":1016.1,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":274,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":335.6,\"nearestStormDistance\":176.83,\"nearestStormBearing\":221},{\"time\":1774476000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":47.3,\"apparentTemperature\":47.43,\"dewPoint\":41.72,\"humidity\":0.81,\"pressure\":1016.0,\"windSpeed\":8.04,\"windGust\":13.78,\"windBearing\":267,\"cloudCover\":0.6,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":336.38,\"nearestStormDistance\":153.18,\"nearestStormBearing\":213}]},\"daily\":{\"summary\":\"No + precipitation throughout the week, with highs falling to 55\xB0F next Wednesday.\",\"icon\":\"wind\",\"data\":[{\"time\":1773792000,\"summary\":\"Mostly + clear until night.\",\"icon\":\"clear-day\",\"sunriseTime\":1773814092,\"sunsetTime\":1773857390,\"moonPhase\":0.98,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773792000,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":66.38,\"temperatureHighTime\":1773846000,\"temperatureLow\":39.74,\"temperatureLowTime\":1773896400,\"apparentTemperatureHigh\":61.3,\"apparentTemperatureHighTime\":1773846000,\"apparentTemperatureLow\":34.54,\"apparentTemperatureLowTime\":1773896400,\"dewPoint\":41.16,\"humidity\":0.65,\"pressure\":1020.02,\"windSpeed\":7.47,\"windGust\":13.22,\"windGustTime\":1773856800,\"windBearing\":118,\"cloudCover\":0.22,\"uvIndex\":4.09,\"uvIndexTime\":1773838800,\"visibility\":8.22,\"temperatureMin\":43.52,\"temperatureMinTime\":1773810000,\"temperatureMax\":66.38,\"temperatureMaxTime\":1773846000,\"apparentTemperatureMin\":39.54,\"apparentTemperatureMinTime\":1773810000,\"apparentTemperatureMax\":61.3,\"apparentTemperatureMaxTime\":1773846000},{\"time\":1773878400,\"summary\":\"Mostly + clear throughout the day.\",\"icon\":\"clear-day\",\"sunriseTime\":1773900356,\"sunsetTime\":1773943892,\"moonPhase\":0.02,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773878400,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":61.88,\"temperatureHighTime\":1773932400,\"temperatureLow\":37.4,\"temperatureLowTime\":1773982800,\"apparentTemperatureHigh\":58.94,\"apparentTemperatureHighTime\":1773928800,\"apparentTemperatureLow\":32.07,\"apparentTemperatureLowTime\":1773982800,\"dewPoint\":36.73,\"humidity\":0.62,\"pressure\":1026.13,\"windSpeed\":5.99,\"windGust\":10.97,\"windGustTime\":1773928800,\"windBearing\":74,\"cloudCover\":0.21,\"uvIndex\":4.15,\"uvIndexTime\":1773925200,\"visibility\":8.82,\"temperatureMin\":39.74,\"temperatureMinTime\":1773896400,\"temperatureMax\":61.88,\"temperatureMaxTime\":1773932400,\"apparentTemperatureMin\":34.54,\"apparentTemperatureMinTime\":1773896400,\"apparentTemperatureMax\":58.94,\"apparentTemperatureMaxTime\":1773928800},{\"time\":1773964800,\"summary\":\"Mostly + cloudy starting in the afternoon.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1773986619,\"sunsetTime\":1774030394,\"moonPhase\":0.05,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773964800,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":57.56,\"temperatureHighTime\":1774018800,\"temperatureLow\":39.2,\"temperatureLowTime\":1774072800,\"apparentTemperatureHigh\":54.52,\"apparentTemperatureHighTime\":1774015200,\"apparentTemperatureLow\":33.66,\"apparentTemperatureLowTime\":1774072800,\"dewPoint\":37.56,\"humidity\":0.7,\"pressure\":1023.25,\"windSpeed\":4.88,\"windGust\":9.39,\"windGustTime\":1774022400,\"windBearing\":66,\"cloudCover\":0.59,\"uvIndex\":3.57,\"uvIndexTime\":1774011600,\"visibility\":7.6,\"temperatureMin\":37.4,\"temperatureMinTime\":1773982800,\"temperatureMax\":57.56,\"temperatureMaxTime\":1774018800,\"apparentTemperatureMin\":32.07,\"apparentTemperatureMinTime\":1773982800,\"apparentTemperatureMax\":54.52,\"apparentTemperatureMaxTime\":1774015200},{\"time\":1774051200,\"summary\":\"Mostly + clear starting in the evening.\",\"icon\":\"clear-day\",\"sunriseTime\":1774072882,\"sunsetTime\":1774116895,\"moonPhase\":0.09,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774051200,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":59.54,\"temperatureHighTime\":1774105200,\"temperatureLow\":36.86,\"temperatureLowTime\":1774155600,\"apparentTemperatureHigh\":57.66,\"apparentTemperatureHighTime\":1774101600,\"apparentTemperatureLow\":31.94,\"apparentTemperatureLowTime\":1774155600,\"dewPoint\":37.39,\"humidity\":0.67,\"pressure\":1020.28,\"windSpeed\":5.13,\"windGust\":9.87,\"windGustTime\":1774094400,\"windBearing\":74,\"cloudCover\":0.5,\"uvIndex\":4.17,\"uvIndexTime\":1774098000,\"visibility\":8.1,\"temperatureMin\":39.2,\"temperatureMinTime\":1774072800,\"temperatureMax\":59.54,\"temperatureMaxTime\":1774105200,\"apparentTemperatureMin\":33.66,\"apparentTemperatureMinTime\":1774072800,\"apparentTemperatureMax\":57.66,\"apparentTemperatureMaxTime\":1774101600},{\"time\":1774137600,\"summary\":\"Partly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774159145,\"sunsetTime\":1774203397,\"moonPhase\":0.13,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774137600,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":59.18,\"temperatureHighTime\":1774188000,\"temperatureLow\":44.06,\"temperatureLowTime\":1774238400,\"apparentTemperatureHigh\":57.53,\"apparentTemperatureHighTime\":1774188000,\"apparentTemperatureLow\":39.78,\"apparentTemperatureLowTime\":1774238400,\"dewPoint\":37.4,\"humidity\":0.67,\"pressure\":1018.48,\"windSpeed\":4.07,\"windGust\":8.52,\"windGustTime\":1774184400,\"windBearing\":241,\"cloudCover\":0.49,\"uvIndex\":4.15,\"uvIndexTime\":1774184400,\"visibility\":7.96,\"temperatureMin\":36.86,\"temperatureMinTime\":1774155600,\"temperatureMax\":59.18,\"temperatureMaxTime\":1774188000,\"apparentTemperatureMin\":31.94,\"apparentTemperatureMinTime\":1774155600,\"apparentTemperatureMax\":57.53,\"apparentTemperatureMaxTime\":1774188000},{\"time\":1774224000,\"summary\":\"Overcast + until evening.\",\"icon\":\"cloudy\",\"sunriseTime\":1774245408,\"sunsetTime\":1774289898,\"moonPhase\":0.16,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774224000,\"precipProbability\":0.26,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":55.76,\"temperatureHighTime\":1774274400,\"temperatureLow\":45.68,\"temperatureLowTime\":1774314000,\"apparentTemperatureHigh\":51.95,\"apparentTemperatureHighTime\":1774278000,\"apparentTemperatureLow\":38.41,\"apparentTemperatureLowTime\":1774328400,\"dewPoint\":41.19,\"humidity\":0.74,\"pressure\":1019.44,\"windSpeed\":6.66,\"windGust\":12.64,\"windGustTime\":1774278000,\"windBearing\":192,\"cloudCover\":0.85,\"uvIndex\":3.21,\"uvIndexTime\":1774267200,\"visibility\":9.66,\"temperatureMin\":44.06,\"temperatureMinTime\":1774238400,\"temperatureMax\":55.76,\"temperatureMaxTime\":1774274400,\"apparentTemperatureMin\":39.78,\"apparentTemperatureMinTime\":1774238400,\"apparentTemperatureMax\":51.95,\"apparentTemperatureMaxTime\":1774278000},{\"time\":1774310400,\"summary\":\"Breezy + in the afternoon.\",\"icon\":\"wind\",\"sunriseTime\":1774331671,\"sunsetTime\":1774376399,\"moonPhase\":0.2,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774310400,\"precipProbability\":0.24,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":55.58,\"temperatureHighTime\":1774360800,\"temperatureLow\":45.14,\"temperatureLowTime\":1774411200,\"apparentTemperatureHigh\":47.19,\"apparentTemperatureHighTime\":1774360800,\"apparentTemperatureLow\":37.64,\"apparentTemperatureLowTime\":1774411200,\"dewPoint\":42.24,\"humidity\":0.75,\"pressure\":1013.53,\"windSpeed\":11.92,\"windGust\":20.4,\"windGustTime\":1774360800,\"windBearing\":256,\"cloudCover\":0.65,\"uvIndex\":1.12,\"uvIndexTime\":1774364400,\"visibility\":10.0,\"temperatureMin\":45.68,\"temperatureMinTime\":1774314000,\"temperatureMax\":55.58,\"temperatureMaxTime\":1774360800,\"apparentTemperatureMin\":38.41,\"apparentTemperatureMinTime\":1774328400,\"apparentTemperatureMax\":47.19,\"apparentTemperatureMaxTime\":1774360800},{\"time\":1774396800,\"summary\":\"Mostly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774417934,\"sunsetTime\":1774462900,\"moonPhase\":0.24,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774396800,\"precipProbability\":0.24,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":54.86,\"temperatureHighTime\":1774450800,\"temperatureLow\":43.34,\"temperatureLowTime\":1774497600,\"apparentTemperatureHigh\":47.44,\"apparentTemperatureHighTime\":1774450800,\"apparentTemperatureLow\":36.24,\"apparentTemperatureLowTime\":1774497600,\"dewPoint\":41.36,\"humidity\":0.74,\"pressure\":1013.69,\"windSpeed\":11.11,\"windGust\":18.77,\"windGustTime\":1774447200,\"windBearing\":267,\"cloudCover\":0.68,\"uvIndex\":1.72,\"uvIndexTime\":1774450800,\"visibility\":10.0,\"temperatureMin\":45.14,\"temperatureMinTime\":1774411200,\"temperatureMax\":54.86,\"temperatureMaxTime\":1774450800,\"apparentTemperatureMin\":37.64,\"apparentTemperatureMinTime\":1774411200,\"apparentTemperatureMax\":47.44,\"apparentTemperatureMaxTime\":1774450800}]},\"alerts\":[],\"flags\":{\"sources\":[\"ETOPO1\",\"dwd_mosmix\",\"ecmwf_ifs\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"dwd_mosmix\":\"2026-03-18 + 22Z\",\"ecmwf_ifs\":\"2026-03-18 00Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":1.48,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:53 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9857' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 20ce720be9c31a6a95223700ba5f8724.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - GSWdblf_DDxccZuQ67FWjsQDAvv0Xry5mAD3OlSgh2kj8OmRUA6bLg== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '143' + X-Handler-Time: + - '45.9' + X-Kong-Proxy-Latency: + - '1' + X-Kong-Request-Id: + - 12c08a707853d41243a7a14032584009 + X-Kong-Upstream-Latency: + - '49' + X-Node-Id: + - ip-10-0-14-222.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9857' + X-Response-Time: + - '45.864000000000004' + X-Server-Time: + - '48.1' + content-length: + - '93366' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/cassettes/pirate_weather/current_nyc.yaml b/tests/integration/cassettes/pirate_weather/current_nyc.yaml new file mode 100644 index 00000000..0d67b287 --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/current_nyc.yaml @@ -0,0 +1,238 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/40.7128,-74.006?extend=hourly&units=us + response: + body: + string: "{\"latitude\":40.7128,\"longitude\":-74.006,\"timezone\":\"America/New_York\",\"offset\":-4.0,\"elevation\":62,\"currently\":{\"time\":1773877680,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"nearestStormDistance\":356.19,\"nearestStormBearing\":35,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\",\"temperature\":32.88,\"apparentTemperature\":21.34,\"dewPoint\":16.48,\"humidity\":0.5,\"pressure\":1028.29,\"windSpeed\":10.46,\"windGust\":13.69,\"windBearing\":141,\"cloudCover\":0.0,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":401.24},\"minutely\":{\"summary\":\"Clear + for the hour.\",\"icon\":\"clear-night\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878340,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878400,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878460,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878520,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878580,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878640,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878700,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878760,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878820,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878880,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878940,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879000,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879060,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879120,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879240,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879300,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879360,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879420,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879480,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879540,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879600,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879660,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879720,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879780,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879840,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879900,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879960,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880020,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880080,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880140,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880200,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880260,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880320,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880380,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880440,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880500,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880560,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880620,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"}]},\"hourly\":{\"summary\":\"Partly + cloudy starting tomorrow morning.\",\"icon\":\"partly-cloudy-day\",\"data\":[{\"time\":1773874800,\"summary\":\"Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.62,\"apparentTemperature\":28.36,\"dewPoint\":13.44,\"humidity\":0.4,\"pressure\":1028.7,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":160,\"cloudCover\":0.04,\"uvIndex\":0.28,\"visibility\":10.0,\"ozone\":404.2,\"nearestStormDistance\":351.03,\"nearestStormBearing\":33},{\"time\":1773878400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.49,\"apparentTemperature\":28.15,\"dewPoint\":15.98,\"humidity\":0.44,\"pressure\":1028.19,\"windSpeed\":8.94,\"windGust\":10.95,\"windBearing\":150,\"cloudCover\":0.05,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.5,\"nearestStormDistance\":357.48,\"nearestStormBearing\":35},{\"time\":1773882000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.97,\"apparentTemperature\":28.81,\"dewPoint\":18.12,\"humidity\":0.49,\"pressure\":1029.01,\"windSpeed\":8.04,\"windGust\":10.05,\"windBearing\":150,\"cloudCover\":0.03,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":397.01,\"nearestStormDistance\":227.41,\"nearestStormBearing\":259},{\"time\":1773885600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.15,\"apparentTemperature\":28.8,\"dewPoint\":18.86,\"humidity\":0.51,\"pressure\":1029.03,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.06,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.34,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773889200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.83,\"apparentTemperature\":29.39,\"dewPoint\":19.08,\"humidity\":0.52,\"pressure\":1028.92,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.0,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773892800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.4,\"apparentTemperature\":29.71,\"dewPoint\":19.92,\"humidity\":0.54,\"pressure\":1028.24,\"windSpeed\":6.26,\"windGust\":8.04,\"windBearing\":150,\"cloudCover\":0.21,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.58,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773896400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.93,\"apparentTemperature\":30.0,\"dewPoint\":20.34,\"humidity\":0.55,\"pressure\":1027.83,\"windSpeed\":5.36,\"windGust\":8.04,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":392.93,\"nearestStormDistance\":240.11,\"nearestStormBearing\":260},{\"time\":1773900000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.01,\"apparentTemperature\":30.54,\"dewPoint\":21.34,\"humidity\":0.56,\"pressure\":1027.3,\"windSpeed\":5.36,\"windGust\":7.15,\"windBearing\":150,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.63,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773903600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.49,\"dewPoint\":22.14,\"humidity\":0.59,\"pressure\":1026.66,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.34,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.17,\"nearestStormDistance\":250.34,\"nearestStormBearing\":263},{\"time\":1773907200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.7,\"dewPoint\":22.5,\"humidity\":0.61,\"pressure\":1026.74,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.75,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773910800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.03,\"apparentTemperature\":31.01,\"dewPoint\":22.78,\"humidity\":0.61,\"pressure\":1026.25,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":140,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.66,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773914400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.18,\"apparentTemperature\":30.96,\"dewPoint\":22.62,\"humidity\":0.62,\"pressure\":1025.95,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":120,\"cloudCover\":0.53,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.2,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773918000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.92,\"apparentTemperature\":30.83,\"dewPoint\":23.05,\"humidity\":0.63,\"pressure\":1026.14,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":110,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.27,\"nearestStormDistance\":224.52,\"nearestStormBearing\":263},{\"time\":1773921600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.44,\"apparentTemperature\":31.32,\"dewPoint\":23.81,\"humidity\":0.62,\"pressure\":1026.84,\"windSpeed\":4.47,\"windGust\":6.48,\"windBearing\":110,\"cloudCover\":0.58,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":394.1,\"nearestStormDistance\":249.01,\"nearestStormBearing\":266},{\"time\":1773925200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":36.37,\"apparentTemperature\":32.29,\"dewPoint\":23.81,\"humidity\":0.6,\"pressure\":1026.81,\"windSpeed\":5.36,\"windGust\":6.7,\"windBearing\":130,\"cloudCover\":0.52,\"uvIndex\":1.08,\"visibility\":10.0,\"ozone\":396.41,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1773928800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.47,\"apparentTemperature\":32.23,\"dewPoint\":23.0,\"humidity\":0.56,\"pressure\":1026.22,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":160,\"cloudCover\":0.48,\"uvIndex\":2.14,\"visibility\":10.0,\"ozone\":396.14,\"nearestStormDistance\":180.4,\"nearestStormBearing\":201},{\"time\":1773932400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":38.7,\"apparentTemperature\":33.15,\"dewPoint\":22.05,\"humidity\":0.51,\"pressure\":1025.6,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.49,\"uvIndex\":3.44,\"visibility\":10.0,\"ozone\":398.5,\"nearestStormDistance\":165.94,\"nearestStormBearing\":239},{\"time\":1773936000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.2,\"apparentTemperature\":33.82,\"dewPoint\":21.4,\"humidity\":0.49,\"pressure\":1024.88,\"windSpeed\":8.04,\"windGust\":11.39,\"windBearing\":170,\"cloudCover\":0.52,\"uvIndex\":4.78,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":151.12,\"nearestStormBearing\":225},{\"time\":1773939600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.26,\"apparentTemperature\":34.25,\"dewPoint\":22.05,\"humidity\":0.48,\"pressure\":1024.24,\"windSpeed\":8.94,\"windGust\":13.18,\"windBearing\":170,\"cloudCover\":0.51,\"uvIndex\":5.06,\"visibility\":10.0,\"ozone\":405.51,\"nearestStormDistance\":146.62,\"nearestStormBearing\":233},{\"time\":1773943200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.45,\"apparentTemperature\":34.84,\"dewPoint\":22.82,\"humidity\":0.47,\"pressure\":1023.43,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":5.42,\"visibility\":10.0,\"ozone\":404.17,\"nearestStormDistance\":145.3,\"nearestStormBearing\":240},{\"time\":1773946800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.19,\"apparentTemperature\":35.74,\"dewPoint\":23.4,\"humidity\":0.47,\"pressure\":1023.23,\"windSpeed\":10.72,\"windGust\":14.74,\"windBearing\":170,\"cloudCover\":0.39,\"uvIndex\":4.9,\"visibility\":10.0,\"ozone\":399.76,\"nearestStormDistance\":124.91,\"nearestStormBearing\":243},{\"time\":1773950400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.46,\"apparentTemperature\":36.07,\"dewPoint\":24.39,\"humidity\":0.48,\"pressure\":1023.08,\"windSpeed\":11.62,\"windGust\":14.97,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":3.89,\"visibility\":10.0,\"ozone\":398.15,\"nearestStormDistance\":129.62,\"nearestStormBearing\":225},{\"time\":1773954000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.73,\"apparentTemperature\":36.01,\"dewPoint\":24.93,\"humidity\":0.49,\"pressure\":1022.57,\"windSpeed\":11.62,\"windGust\":15.86,\"windBearing\":160,\"cloudCover\":0.4,\"uvIndex\":2.57,\"visibility\":10.0,\"ozone\":397.86,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1773957600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.23,\"apparentTemperature\":36.99,\"dewPoint\":25.27,\"humidity\":0.5,\"pressure\":1022.38,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":160,\"cloudCover\":0.45,\"uvIndex\":1.25,\"visibility\":10.0,\"ozone\":398.76,\"nearestStormDistance\":93.81,\"nearestStormBearing\":243},{\"time\":1773961200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.05,\"apparentTemperature\":37.56,\"dewPoint\":26.82,\"humidity\":0.52,\"pressure\":1022.34,\"windSpeed\":9.83,\"windGust\":12.73,\"windBearing\":160,\"cloudCover\":0.39,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":401.36,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1773964800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.14,\"apparentTemperature\":37.63,\"dewPoint\":28.24,\"humidity\":0.55,\"pressure\":1022.62,\"windSpeed\":8.94,\"windGust\":11.62,\"windBearing\":160,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.26,\"nearestStormDistance\":90.27,\"nearestStormBearing\":201},{\"time\":1773968400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":37.85,\"dewPoint\":29.77,\"humidity\":0.59,\"pressure\":1022.45,\"windSpeed\":8.04,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":143.65,\"nearestStormBearing\":159},{\"time\":1773972000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.93,\"apparentTemperature\":38.41,\"dewPoint\":29.93,\"humidity\":0.6,\"pressure\":1021.95,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":180,\"cloudCover\":0.36,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.62,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773975600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.84,\"apparentTemperature\":38.93,\"dewPoint\":30.92,\"humidity\":0.61,\"pressure\":1022.17,\"windSpeed\":7.15,\"windGust\":9.38,\"windBearing\":190,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.73,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773979200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.11,\"apparentTemperature\":39.09,\"dewPoint\":31.23,\"humidity\":0.63,\"pressure\":1022.29,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":200,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":405.77,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1773982800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":39.15,\"dewPoint\":31.35,\"humidity\":0.64,\"pressure\":1021.96,\"windSpeed\":6.26,\"windGust\":8.27,\"windBearing\":220,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.51,\"nearestStormDistance\":252.47,\"nearestStormBearing\":145},{\"time\":1773986400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.17,\"apparentTemperature\":39.18,\"dewPoint\":31.48,\"humidity\":0.64,\"pressure\":1021.54,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":230,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":403.63,\"nearestStormDistance\":283.51,\"nearestStormBearing\":149},{\"time\":1773990000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.0,\"apparentTemperature\":38.94,\"dewPoint\":31.72,\"humidity\":0.65,\"pressure\":1021.22,\"windSpeed\":5.96,\"windGust\":8.19,\"windBearing\":235,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.56,\"nearestStormDistance\":335.93,\"nearestStormBearing\":150},{\"time\":1773993600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.84,\"apparentTemperature\":38.69,\"dewPoint\":31.96,\"humidity\":0.66,\"pressure\":1021.39,\"windSpeed\":5.66,\"windGust\":7.89,\"windBearing\":240,\"cloudCover\":0.48,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.77,\"nearestStormDistance\":267.07,\"nearestStormBearing\":161},{\"time\":1773997200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.68,\"apparentTemperature\":38.44,\"dewPoint\":32.2,\"humidity\":0.68,\"pressure\":1021.25,\"windSpeed\":5.36,\"windGust\":7.6,\"windBearing\":245,\"cloudCover\":0.44,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":388.23,\"nearestStormBearing\":33},{\"time\":1774000800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.51,\"apparentTemperature\":38.2,\"dewPoint\":32.44,\"humidity\":0.69,\"pressure\":1021.74,\"windSpeed\":5.06,\"windGust\":7.3,\"windBearing\":250,\"cloudCover\":0.41,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.47,\"nearestStormDistance\":368.02,\"nearestStormBearing\":206},{\"time\":1774004400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.35,\"apparentTemperature\":37.95,\"dewPoint\":32.68,\"humidity\":0.7,\"pressure\":1021.6,\"windSpeed\":4.77,\"windGust\":7.0,\"windBearing\":255,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.13,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774008000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.18,\"apparentTemperature\":37.71,\"dewPoint\":32.92,\"humidity\":0.71,\"pressure\":1021.73,\"windSpeed\":4.47,\"windGust\":6.7,\"windBearing\":260,\"cloudCover\":0.35,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":397.97,\"nearestStormDistance\":421.2,\"nearestStormBearing\":218},{\"time\":1774011600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.57,\"apparentTemperature\":39.55,\"dewPoint\":32.76,\"humidity\":0.69,\"pressure\":1021.52,\"windSpeed\":5.55,\"windGust\":7.6,\"windBearing\":248,\"cloudCover\":0.39,\"uvIndex\":1.13,\"visibility\":10.0,\"ozone\":395.53,\"nearestStormDistance\":367.17,\"nearestStormBearing\":214},{\"time\":1774015200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":43.95,\"apparentTemperature\":41.39,\"dewPoint\":32.59,\"humidity\":0.66,\"pressure\":1020.51,\"windSpeed\":6.64,\"windGust\":8.49,\"windBearing\":236,\"cloudCover\":0.44,\"uvIndex\":2.44,\"visibility\":10.0,\"ozone\":395.04,\"nearestStormDistance\":299.32,\"nearestStormBearing\":209},{\"time\":1774018800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.34,\"apparentTemperature\":43.23,\"dewPoint\":32.43,\"humidity\":0.64,\"pressure\":1020.97,\"windSpeed\":7.72,\"windGust\":9.38,\"windBearing\":224,\"cloudCover\":0.48,\"uvIndex\":3.72,\"visibility\":10.0,\"ozone\":394.63,\"nearestStormDistance\":270.38,\"nearestStormBearing\":201},{\"time\":1774022400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.73,\"apparentTemperature\":45.08,\"dewPoint\":33.12,\"humidity\":0.61,\"pressure\":1020.41,\"windSpeed\":8.81,\"windGust\":11.47,\"windBearing\":212,\"cloudCover\":0.53,\"uvIndex\":4.44,\"visibility\":10.0,\"ozone\":395.99,\"nearestStormDistance\":243.43,\"nearestStormBearing\":188},{\"time\":1774026000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.11,\"apparentTemperature\":46.92,\"dewPoint\":33.8,\"humidity\":0.59,\"pressure\":1019.22,\"windSpeed\":9.89,\"windGust\":13.55,\"windBearing\":200,\"cloudCover\":0.57,\"uvIndex\":4.4,\"visibility\":10.0,\"ozone\":396.23,\"nearestStormDistance\":242.1,\"nearestStormBearing\":180},{\"time\":1774029600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.5,\"apparentTemperature\":48.76,\"dewPoint\":34.48,\"humidity\":0.56,\"pressure\":1017.07,\"windSpeed\":10.98,\"windGust\":15.64,\"windBearing\":189,\"cloudCover\":0.62,\"uvIndex\":5.15,\"visibility\":10.0,\"ozone\":395.58,\"nearestStormDistance\":222.48,\"nearestStormBearing\":219},{\"time\":1774033200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.89,\"apparentTemperature\":50.61,\"dewPoint\":34.78,\"humidity\":0.54,\"pressure\":1017.31,\"windSpeed\":12.06,\"windGust\":17.13,\"windBearing\":177,\"cloudCover\":0.66,\"uvIndex\":4.74,\"visibility\":10.0,\"ozone\":396.7,\"nearestStormDistance\":152.64,\"nearestStormBearing\":212},{\"time\":1774036800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.45,\"apparentTemperature\":51.14,\"dewPoint\":35.07,\"humidity\":0.54,\"pressure\":1016.48,\"windSpeed\":13.4,\"windGust\":18.62,\"windBearing\":173,\"cloudCover\":0.71,\"uvIndex\":3.84,\"visibility\":10.0,\"ozone\":399.67,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774040400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.02,\"apparentTemperature\":51.67,\"dewPoint\":35.37,\"humidity\":0.54,\"pressure\":1015.65,\"windSpeed\":14.74,\"windGust\":20.11,\"windBearing\":170,\"cloudCover\":0.75,\"uvIndex\":2.41,\"visibility\":10.0,\"ozone\":398.36,\"nearestStormDistance\":155.63,\"nearestStormBearing\":180},{\"time\":1774044000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.89,\"apparentTemperature\":51.63,\"dewPoint\":36.12,\"humidity\":0.55,\"pressure\":1015.28,\"windSpeed\":14.89,\"windGust\":19.96,\"windBearing\":173,\"cloudCover\":0.79,\"uvIndex\":1.18,\"visibility\":10.0,\"ozone\":397.25,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774047600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.76,\"apparentTemperature\":51.58,\"dewPoint\":36.87,\"humidity\":0.57,\"pressure\":1014.9,\"windSpeed\":15.04,\"windGust\":19.81,\"windBearing\":177,\"cloudCover\":0.84,\"uvIndex\":0.26,\"visibility\":10.0,\"ozone\":396.55,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774051200,\"summary\":\"Breezy + and Overcast\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.64,\"apparentTemperature\":51.53,\"dewPoint\":37.62,\"humidity\":0.58,\"pressure\":1014.53,\"windSpeed\":15.19,\"windGust\":19.66,\"windBearing\":180,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.51,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774054800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.005,\"precipProbability\":0.23,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.005,\"precipType\":\"rain\",\"temperature\":51.51,\"apparentTemperature\":51.42,\"dewPoint\":38.17,\"humidity\":0.6,\"pressure\":1014.45,\"windSpeed\":14.89,\"windGust\":19.14,\"windBearing\":183,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.14,\"nearestStormDistance\":70.38,\"nearestStormBearing\":194},{\"time\":1774058400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.36,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.39,\"apparentTemperature\":51.31,\"dewPoint\":38.72,\"humidity\":0.61,\"pressure\":1014.37,\"windSpeed\":14.6,\"windGust\":18.62,\"windBearing\":187,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.49,\"nearestStormDistance\":52.24,\"nearestStormBearing\":236},{\"time\":1774062000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":51.26,\"apparentTemperature\":51.21,\"dewPoint\":39.27,\"humidity\":0.63,\"pressure\":1014.29,\"windSpeed\":14.3,\"windGust\":18.1,\"windBearing\":190,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.47,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774065600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.85,\"apparentTemperature\":50.86,\"dewPoint\":40.07,\"humidity\":0.66,\"pressure\":1013.54,\"windSpeed\":13.7,\"windGust\":17.72,\"windBearing\":193,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":8.37,\"ozone\":387.75,\"nearestStormDistance\":21.68,\"nearestStormBearing\":135},{\"time\":1774069200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.43,\"apparentTemperature\":50.51,\"dewPoint\":40.87,\"humidity\":0.68,\"pressure\":1012.8,\"windSpeed\":13.11,\"windGust\":17.35,\"windBearing\":197,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":6.66,\"ozone\":386.72,\"nearestStormDistance\":13.1,\"nearestStormBearing\":270},{\"time\":1774072800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.02,\"apparentTemperature\":50.16,\"dewPoint\":41.67,\"humidity\":0.71,\"pressure\":1012.06,\"windSpeed\":12.51,\"windGust\":16.98,\"windBearing\":200,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":4.95,\"ozone\":385.37,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774076400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0178,\"precipProbability\":0.49,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0178,\"precipType\":\"rain\",\"temperature\":49.72,\"apparentTemperature\":48.34,\"dewPoint\":41.97,\"humidity\":0.73,\"pressure\":1011.54,\"windSpeed\":11.91,\"windGust\":16.31,\"windBearing\":200,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":3.78,\"ozone\":383.4,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774080000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0206,\"precipProbability\":0.48,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0206,\"precipType\":\"rain\",\"temperature\":49.42,\"apparentTemperature\":46.51,\"dewPoint\":42.27,\"humidity\":0.76,\"pressure\":1011.01,\"windSpeed\":11.32,\"windGust\":15.64,\"windBearing\":200,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":2.6,\"ozone\":384.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774083600,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.12,\"apparentTemperature\":44.69,\"dewPoint\":42.57,\"humidity\":0.78,\"pressure\":1010.48,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":200,\"cloudCover\":0.75,\"uvIndex\":0.0,\"visibility\":1.43,\"ozone\":385.86,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774087200,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.02,\"apparentTemperature\":44.7,\"dewPoint\":42.77,\"humidity\":0.78,\"pressure\":1010.63,\"windSpeed\":10.43,\"windGust\":14.6,\"windBearing\":213,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":1.64,\"ozone\":388.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774090800,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.93,\"apparentTemperature\":44.7,\"dewPoint\":42.97,\"humidity\":0.79,\"pressure\":1010.77,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":227,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":1.86,\"ozone\":391.55,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774094400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.83,\"apparentTemperature\":44.71,\"dewPoint\":43.18,\"humidity\":0.79,\"pressure\":1010.92,\"windSpeed\":9.83,\"windGust\":13.85,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":0.02,\"visibility\":2.07,\"ozone\":393.68,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774098000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0161,\"precipProbability\":0.36,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0161,\"precipType\":\"rain\",\"temperature\":49.53,\"apparentTemperature\":46.62,\"dewPoint\":42.64,\"humidity\":0.76,\"pressure\":1010.95,\"windSpeed\":10.13,\"windGust\":14.45,\"windBearing\":263,\"cloudCover\":0.63,\"uvIndex\":0.24,\"visibility\":4.32,\"ozone\":397.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774101600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0089,\"precipProbability\":0.25,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0089,\"precipType\":\"rain\",\"temperature\":50.23,\"apparentTemperature\":48.54,\"dewPoint\":42.11,\"humidity\":0.74,\"pressure\":1010.98,\"windSpeed\":10.43,\"windGust\":15.04,\"windBearing\":287,\"cloudCover\":0.56,\"uvIndex\":0.42,\"visibility\":6.57,\"ozone\":397.24,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774105200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":50.94,\"apparentTemperature\":50.45,\"dewPoint\":41.58,\"humidity\":0.71,\"pressure\":1011.01,\"windSpeed\":10.72,\"windGust\":15.64,\"windBearing\":310,\"cloudCover\":0.5,\"uvIndex\":0.63,\"visibility\":8.83,\"ozone\":395.11,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774108800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":52.2,\"apparentTemperature\":52.06,\"dewPoint\":41.38,\"humidity\":0.67,\"pressure\":1010.65,\"windSpeed\":11.02,\"windGust\":16.31,\"windBearing\":313,\"cloudCover\":0.52,\"uvIndex\":1.47,\"visibility\":9.25,\"ozone\":393.52,\"nearestStormDistance\":21.71,\"nearestStormBearing\":45},{\"time\":1774112400,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":53.46,\"apparentTemperature\":53.67,\"dewPoint\":41.18,\"humidity\":0.63,\"pressure\":1010.29,\"windSpeed\":11.32,\"windGust\":16.98,\"windBearing\":317,\"cloudCover\":0.53,\"uvIndex\":2.39,\"visibility\":9.68,\"ozone\":392.9,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774116000,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":54.72,\"apparentTemperature\":55.27,\"dewPoint\":40.98,\"humidity\":0.59,\"pressure\":1009.93,\"windSpeed\":11.62,\"windGust\":17.65,\"windBearing\":320,\"cloudCover\":0.55,\"uvIndex\":2.96,\"visibility\":10.0,\"ozone\":389.31,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774119600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0011,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0011,\"precipType\":\"rain\",\"temperature\":55.35,\"apparentTemperature\":55.87,\"dewPoint\":40.52,\"humidity\":0.57,\"pressure\":1009.52,\"windSpeed\":11.91,\"windGust\":17.8,\"windBearing\":317,\"cloudCover\":0.54,\"uvIndex\":3.98,\"visibility\":10.0,\"ozone\":381.62,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774123200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0006,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0006,\"precipType\":\"rain\",\"temperature\":55.99,\"apparentTemperature\":56.47,\"dewPoint\":40.06,\"humidity\":0.55,\"pressure\":1009.1,\"windSpeed\":12.21,\"windGust\":17.95,\"windBearing\":313,\"cloudCover\":0.54,\"uvIndex\":3.39,\"visibility\":10.0,\"ozone\":376.35,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774126800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":56.62,\"apparentTemperature\":57.07,\"dewPoint\":39.6,\"humidity\":0.53,\"pressure\":1008.68,\"windSpeed\":12.51,\"windGust\":18.1,\"windBearing\":310,\"cloudCover\":0.53,\"uvIndex\":1.41,\"visibility\":10.0,\"ozone\":370.1,\"nearestStormDistance\":62.95,\"nearestStormBearing\":63},{\"time\":1774130400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.78,\"apparentTemperature\":56.1,\"dewPoint\":39.3,\"humidity\":0.54,\"pressure\":1009.0,\"windSpeed\":12.21,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.52,\"uvIndex\":0.54,\"visibility\":10.0,\"ozone\":364.83,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774134000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.93,\"apparentTemperature\":55.12,\"dewPoint\":39.01,\"humidity\":0.55,\"pressure\":1009.32,\"windSpeed\":11.91,\"windGust\":16.46,\"windBearing\":297,\"cloudCover\":0.51,\"uvIndex\":0.22,\"visibility\":10.0,\"ozone\":363.13,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774137600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.09,\"apparentTemperature\":54.14,\"dewPoint\":38.71,\"humidity\":0.56,\"pressure\":1009.64,\"windSpeed\":11.62,\"windGust\":15.64,\"windBearing\":290,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":359.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774141200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.09,\"apparentTemperature\":53.19,\"dewPoint\":39.06,\"humidity\":0.59,\"pressure\":1009.55,\"windSpeed\":11.02,\"windGust\":14.6,\"windBearing\":253,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":356.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774144800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.09,\"apparentTemperature\":52.23,\"dewPoint\":39.41,\"humidity\":0.62,\"pressure\":1009.46,\"windSpeed\":10.43,\"windGust\":13.55,\"windBearing\":217,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":354.23,\"nearestStormDistance\":168.25,\"nearestStormBearing\":59},{\"time\":1774148400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.1,\"apparentTemperature\":51.28,\"dewPoint\":39.76,\"humidity\":0.65,\"pressure\":1009.36,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":180,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.08,\"nearestStormDistance\":226.79,\"nearestStormBearing\":47},{\"time\":1774152000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.38,\"apparentTemperature\":49.3,\"dewPoint\":39.79,\"humidity\":0.66,\"pressure\":1008.94,\"windSpeed\":9.53,\"windGust\":12.29,\"windBearing\":193,\"cloudCover\":0.68,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":349.54,\"nearestStormDistance\":253.21,\"nearestStormBearing\":59},{\"time\":1774155600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.66,\"apparentTemperature\":47.33,\"dewPoint\":39.83,\"humidity\":0.68,\"pressure\":1008.52,\"windSpeed\":9.23,\"windGust\":12.06,\"windBearing\":207,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.8,\"nearestStormDistance\":264.46,\"nearestStormBearing\":56},{\"time\":1774159200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.94,\"apparentTemperature\":45.36,\"dewPoint\":39.87,\"humidity\":0.69,\"pressure\":1008.1,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":220,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":345.5,\"nearestStormDistance\":245.1,\"nearestStormBearing\":192},{\"time\":1774162800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.07,\"apparentTemperature\":45.39,\"dewPoint\":40.41,\"humidity\":0.71,\"pressure\":1007.39,\"windSpeed\":8.94,\"windGust\":12.14,\"windBearing\":227,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":342.51,\"nearestStormDistance\":278.62,\"nearestStormBearing\":208},{\"time\":1774166400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.2,\"apparentTemperature\":45.42,\"dewPoint\":40.96,\"humidity\":0.73,\"pressure\":1006.69,\"windSpeed\":8.94,\"windGust\":12.44,\"windBearing\":233,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":338.56,\"nearestStormDistance\":258.01,\"nearestStormBearing\":206},{\"time\":1774170000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.33,\"apparentTemperature\":45.45,\"dewPoint\":41.5,\"humidity\":0.75,\"pressure\":1005.98,\"windSpeed\":8.94,\"windGust\":12.73,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":334.91,\"nearestStormDistance\":215.43,\"nearestStormBearing\":225},{\"time\":1774173600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.3,\"apparentTemperature\":45.42,\"dewPoint\":41.71,\"humidity\":0.75,\"pressure\":1005.95,\"windSpeed\":9.23,\"windGust\":12.66,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.76,\"nearestStormDistance\":189.33,\"nearestStormBearing\":210},{\"time\":1774177200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.27,\"apparentTemperature\":45.4,\"dewPoint\":41.92,\"humidity\":0.75,\"pressure\":1005.91,\"windSpeed\":9.53,\"windGust\":12.58,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.24,\"nearestStormDistance\":177.17,\"nearestStormBearing\":196},{\"time\":1774180800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.24,\"apparentTemperature\":45.37,\"dewPoint\":42.13,\"humidity\":0.75,\"pressure\":1005.87,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":330.76,\"nearestStormDistance\":160.35,\"nearestStormBearing\":198},{\"time\":1774184400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.6,\"apparentTemperature\":47.97,\"dewPoint\":41.78,\"humidity\":0.71,\"pressure\":1005.69,\"windSpeed\":10.43,\"windGust\":13.78,\"windBearing\":240,\"cloudCover\":0.73,\"uvIndex\":1.05,\"visibility\":10.0,\"ozone\":328.48,\"nearestStormDistance\":194.91,\"nearestStormBearing\":214},{\"time\":1774188000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.96,\"apparentTemperature\":50.57,\"dewPoint\":41.43,\"humidity\":0.68,\"pressure\":1005.51,\"windSpeed\":11.02,\"windGust\":15.04,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":2.17,\"visibility\":10.0,\"ozone\":328.87,\"nearestStormDistance\":209.08,\"nearestStormBearing\":189},{\"time\":1774191600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.31,\"apparentTemperature\":53.17,\"dewPoint\":41.07,\"humidity\":0.64,\"pressure\":1005.33,\"windSpeed\":11.62,\"windGust\":16.31,\"windBearing\":240,\"cloudCover\":0.64,\"uvIndex\":3.41,\"visibility\":10.0,\"ozone\":328.31,\"nearestStormDistance\":246.92,\"nearestStormBearing\":148},{\"time\":1774195200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.26,\"apparentTemperature\":55.17,\"dewPoint\":41.19,\"humidity\":0.6,\"pressure\":1005.07,\"windSpeed\":12.21,\"windGust\":17.57,\"windBearing\":243,\"cloudCover\":0.65,\"uvIndex\":4.25,\"visibility\":10.0,\"ozone\":325.51,\"nearestStormDistance\":179.84,\"nearestStormBearing\":217},{\"time\":1774198800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.2,\"apparentTemperature\":57.16,\"dewPoint\":41.31,\"humidity\":0.57,\"pressure\":1004.81,\"windSpeed\":12.81,\"windGust\":18.84,\"windBearing\":247,\"cloudCover\":0.66,\"uvIndex\":4.83,\"visibility\":10.0,\"ozone\":324.7,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774202400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.14,\"apparentTemperature\":59.16,\"dewPoint\":41.43,\"humidity\":0.53,\"pressure\":1004.55,\"windSpeed\":13.4,\"windGust\":20.11,\"windBearing\":250,\"cloudCover\":0.67,\"uvIndex\":5.55,\"visibility\":10.0,\"ozone\":324.95,\"nearestStormDistance\":227.48,\"nearestStormBearing\":119},{\"time\":1774206000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.39,\"apparentTemperature\":59.37,\"dewPoint\":41.45,\"humidity\":0.52,\"pressure\":1005.49,\"windSpeed\":13.93,\"windGust\":20.4,\"windBearing\":260,\"cloudCover\":0.69,\"uvIndex\":4.84,\"visibility\":10.0,\"ozone\":321.6,\"nearestStormDistance\":176.23,\"nearestStormBearing\":241},{\"time\":1774209600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.64,\"apparentTemperature\":59.57,\"dewPoint\":41.47,\"humidity\":0.51,\"pressure\":1006.43,\"windSpeed\":14.45,\"windGust\":20.7,\"windBearing\":270,\"cloudCover\":0.72,\"uvIndex\":3.74,\"visibility\":10.0,\"ozone\":321.19,\"nearestStormDistance\":122.3,\"nearestStormBearing\":219},{\"time\":1774213200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0154,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.88,\"apparentTemperature\":59.77,\"dewPoint\":41.49,\"humidity\":0.5,\"pressure\":1007.38,\"windSpeed\":14.97,\"windGust\":21.0,\"windBearing\":280,\"cloudCover\":0.74,\"uvIndex\":2.67,\"visibility\":10.0,\"ozone\":318.76,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774216800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.05,\"apparentTemperature\":59.0,\"dewPoint\":41.39,\"humidity\":0.51,\"pressure\":1009.18,\"windSpeed\":15.12,\"windGust\":20.55,\"windBearing\":290,\"cloudCover\":0.75,\"uvIndex\":1.36,\"visibility\":10.0,\"ozone\":317.64,\"nearestStormDistance\":103.76,\"nearestStormBearing\":180},{\"time\":1774220400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0209,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":58.21,\"apparentTemperature\":58.23,\"dewPoint\":41.29,\"humidity\":0.53,\"pressure\":1010.99,\"windSpeed\":15.27,\"windGust\":20.11,\"windBearing\":300,\"cloudCover\":0.75,\"uvIndex\":0.35,\"visibility\":10.0,\"ozone\":315.61,\"nearestStormDistance\":86.46,\"nearestStormBearing\":180},{\"time\":1774224000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0236,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.38,\"apparentTemperature\":57.45,\"dewPoint\":41.2,\"humidity\":0.54,\"pressure\":1012.8,\"windSpeed\":15.41,\"windGust\":19.66,\"windBearing\":310,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":314.16,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1774227600,\"summary\":\"Possible + Drizzle and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0033,\"precipProbability\":0.23,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0033,\"precipType\":\"rain\",\"temperature\":55.75,\"apparentTemperature\":55.71,\"dewPoint\":40.65,\"humidity\":0.56,\"pressure\":1014.28,\"windSpeed\":15.34,\"windGust\":19.51,\"windBearing\":320,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":312.5,\"nearestStormDistance\":64.95,\"nearestStormBearing\":225},{\"time\":1774231200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0067,\"precipProbability\":0.25,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0067,\"precipType\":\"rain\",\"temperature\":54.13,\"apparentTemperature\":53.96,\"dewPoint\":40.11,\"humidity\":0.59,\"pressure\":1015.75,\"windSpeed\":15.27,\"windGust\":19.36,\"windBearing\":330,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":310.26,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774234800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":52.5,\"apparentTemperature\":52.21,\"dewPoint\":39.56,\"humidity\":0.61,\"pressure\":1017.23,\"windSpeed\":15.19,\"windGust\":19.21,\"windBearing\":340,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":308.09,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774238400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.015,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.25,\"apparentTemperature\":49.24,\"dewPoint\":38.65,\"humidity\":0.62,\"pressure\":1018.56,\"windSpeed\":14.89,\"windGust\":18.99,\"windBearing\":230,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":306.08,\"nearestStormDistance\":53.49,\"nearestStormBearing\":198},{\"time\":1774242000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":49.99,\"apparentTemperature\":46.26,\"dewPoint\":37.75,\"humidity\":0.62,\"pressure\":1019.9,\"windSpeed\":14.6,\"windGust\":18.77,\"windBearing\":120,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.54,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774245600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0388,\"precipType\":\"snow\",\"temperature\":48.74,\"apparentTemperature\":43.29,\"dewPoint\":36.84,\"humidity\":0.63,\"pressure\":1021.24,\"windSpeed\":14.3,\"windGust\":18.54,\"windBearing\":10,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.66,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774249200,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0106,\"precipProbability\":0.29,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0407,\"precipType\":\"snow\",\"temperature\":47.52,\"apparentTemperature\":41.64,\"dewPoint\":35.52,\"humidity\":0.63,\"pressure\":1022.07,\"windSpeed\":14.6,\"windGust\":18.7,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.84,\"nearestStormDistance\":62.62,\"nearestStormBearing\":116},{\"time\":1774252800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0111,\"precipProbability\":0.3,\"precipIntensityError\":0.0213,\"precipAccumulation\":0.0425,\"precipType\":\"snow\",\"temperature\":46.29,\"apparentTemperature\":40.0,\"dewPoint\":34.2,\"humidity\":0.62,\"pressure\":1022.9,\"windSpeed\":14.89,\"windGust\":18.85,\"windBearing\":10,\"cloudCover\":0.57,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.6,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774256400,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0232,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":45.07,\"apparentTemperature\":38.35,\"dewPoint\":32.88,\"humidity\":0.62,\"pressure\":1023.73,\"windSpeed\":15.19,\"windGust\":19.01,\"windBearing\":10,\"cloudCover\":0.47,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":302.96,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774260000,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":44.04,\"apparentTemperature\":37.11,\"dewPoint\":31.69,\"humidity\":0.61,\"pressure\":1024.84,\"windSpeed\":15.19,\"windGust\":19.53,\"windBearing\":10,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.26,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774263600,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":43.0,\"apparentTemperature\":35.86,\"dewPoint\":30.51,\"humidity\":0.61,\"pressure\":1025.96,\"windSpeed\":15.19,\"windGust\":20.04,\"windBearing\":10,\"cloudCover\":0.56,\"uvIndex\":0.0,\"visibility\":7.22,\"ozone\":304.9,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774267200,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":41.97,\"apparentTemperature\":34.61,\"dewPoint\":29.32,\"humidity\":0.6,\"pressure\":1027.07,\"windSpeed\":15.19,\"windGust\":20.55,\"windBearing\":10,\"cloudCover\":0.6,\"uvIndex\":0.04,\"visibility\":9.35,\"ozone\":305.52,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774270800,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0078,\"precipProbability\":0.26,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0296,\"precipType\":\"snow\",\"temperature\":41.11,\"apparentTemperature\":33.63,\"dewPoint\":27.9,\"humidity\":0.58,\"pressure\":1027.55,\"windSpeed\":15.19,\"windGust\":20.63,\"windBearing\":10,\"cloudCover\":0.62,\"uvIndex\":0.1,\"visibility\":8.57,\"ozone\":306.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774274400,\"summary\":\"Possible + Flurries and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0039,\"precipProbability\":0.21,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0148,\"precipType\":\"snow\",\"temperature\":40.24,\"apparentTemperature\":32.64,\"dewPoint\":26.47,\"humidity\":0.57,\"pressure\":1028.03,\"windSpeed\":15.19,\"windGust\":20.72,\"windBearing\":10,\"cloudCover\":0.65,\"uvIndex\":0.16,\"visibility\":7.79,\"ozone\":307.39,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774278000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":31.66,\"dewPoint\":25.05,\"humidity\":0.55,\"pressure\":1028.51,\"windSpeed\":15.19,\"windGust\":20.8,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.22,\"visibility\":7.01,\"ozone\":308.32,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774281600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.83,\"apparentTemperature\":32.26,\"dewPoint\":24.23,\"humidity\":0.52,\"pressure\":1028.42,\"windSpeed\":14.6,\"windGust\":20.64,\"windBearing\":127,\"cloudCover\":0.61,\"uvIndex\":0.41,\"visibility\":9.67,\"ozone\":309.92,\"nearestStormDistance\":4.37,\"nearestStormBearing\":30},{\"time\":1774285200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.28,\"apparentTemperature\":32.86,\"dewPoint\":23.41,\"humidity\":0.5,\"pressure\":1028.34,\"windSpeed\":14.0,\"windGust\":20.49,\"windBearing\":243,\"cloudCover\":0.54,\"uvIndex\":0.6,\"visibility\":10.0,\"ozone\":311.51,\"nearestStormDistance\":8.73,\"nearestStormBearing\":60},{\"time\":1774288800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.73,\"apparentTemperature\":33.46,\"dewPoint\":22.59,\"humidity\":0.47,\"pressure\":1028.26,\"windSpeed\":13.4,\"windGust\":20.33,\"windBearing\":0,\"cloudCover\":0.48,\"uvIndex\":0.78,\"visibility\":10.0,\"ozone\":313.1,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774292400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.19,\"apparentTemperature\":34.12,\"dewPoint\":22.07,\"humidity\":0.45,\"pressure\":1028.2,\"windSpeed\":13.55,\"windGust\":20.25,\"windBearing\":357,\"cloudCover\":0.44,\"uvIndex\":1.15,\"visibility\":10.0,\"ozone\":315.84,\"nearestStormDistance\":28.08,\"nearestStormBearing\":131},{\"time\":1774296000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.65,\"apparentTemperature\":34.78,\"dewPoint\":21.55,\"humidity\":0.44,\"pressure\":1028.14,\"windSpeed\":13.7,\"windGust\":20.18,\"windBearing\":353,\"cloudCover\":0.39,\"uvIndex\":1.51,\"visibility\":10.0,\"ozone\":318.57,\"nearestStormDistance\":43.07,\"nearestStormBearing\":172},{\"time\":1774299600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.12,\"apparentTemperature\":35.44,\"dewPoint\":21.04,\"humidity\":0.42,\"pressure\":1028.08,\"windSpeed\":13.85,\"windGust\":20.11,\"windBearing\":350,\"cloudCover\":0.35,\"uvIndex\":1.88,\"visibility\":10.0,\"ozone\":321.3,\"nearestStormDistance\":58.05,\"nearestStormBearing\":213},{\"time\":1774303200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.09,\"apparentTemperature\":35.34,\"dewPoint\":20.79,\"humidity\":0.42,\"pressure\":1028.61,\"windSpeed\":13.78,\"windGust\":18.99,\"windBearing\":350,\"cloudCover\":0.34,\"uvIndex\":1.4,\"visibility\":10.0,\"ozone\":323.19,\"nearestStormDistance\":53.14,\"nearestStormBearing\":217},{\"time\":1774306800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.06,\"apparentTemperature\":35.25,\"dewPoint\":20.53,\"humidity\":0.42,\"pressure\":1029.15,\"windSpeed\":13.7,\"windGust\":17.87,\"windBearing\":350,\"cloudCover\":0.32,\"uvIndex\":0.92,\"visibility\":10.0,\"ozone\":325.07,\"nearestStormDistance\":48.24,\"nearestStormBearing\":221},{\"time\":1774310400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.03,\"apparentTemperature\":35.15,\"dewPoint\":20.28,\"humidity\":0.42,\"pressure\":1029.68,\"windSpeed\":13.63,\"windGust\":16.76,\"windBearing\":350,\"cloudCover\":0.31,\"uvIndex\":0.44,\"visibility\":10.0,\"ozone\":326.96,\"nearestStormDistance\":43.33,\"nearestStormBearing\":225},{\"time\":1774314000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.2,\"apparentTemperature\":34.12,\"dewPoint\":20.12,\"humidity\":0.43,\"pressure\":1029.87,\"windSpeed\":13.26,\"windGust\":16.31,\"windBearing\":347,\"cloudCover\":0.26,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":329.73,\"nearestStormDistance\":48.28,\"nearestStormBearing\":258},{\"time\":1774317600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.37,\"apparentTemperature\":33.09,\"dewPoint\":19.96,\"humidity\":0.43,\"pressure\":1030.06,\"windSpeed\":12.88,\"windGust\":15.86,\"windBearing\":343,\"cloudCover\":0.22,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":332.5,\"nearestStormDistance\":53.23,\"nearestStormBearing\":292},{\"time\":1774321200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.54,\"apparentTemperature\":32.05,\"dewPoint\":19.8,\"humidity\":0.44,\"pressure\":1030.25,\"windSpeed\":12.51,\"windGust\":15.41,\"windBearing\":340,\"cloudCover\":0.17,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":335.27,\"nearestStormDistance\":58.19,\"nearestStormBearing\":326},{\"time\":1774324800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":38.71,\"apparentTemperature\":31.07,\"dewPoint\":19.03,\"humidity\":0.44,\"pressure\":1030.44,\"windSpeed\":11.91,\"windGust\":14.97,\"windBearing\":343,\"cloudCover\":0.15,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":340.96,\"nearestStormDistance\":130.35,\"nearestStormBearing\":236},{\"time\":1774328400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.87,\"apparentTemperature\":30.09,\"dewPoint\":18.26,\"humidity\":0.45,\"pressure\":1030.63,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":347,\"cloudCover\":0.12,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.65,\"nearestStormDistance\":202.52,\"nearestStormBearing\":147},{\"time\":1774332000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.04,\"apparentTemperature\":29.1,\"dewPoint\":17.49,\"humidity\":0.45,\"pressure\":1030.81,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.34,\"nearestStormDistance\":274.69,\"nearestStormBearing\":57},{\"time\":1774335600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":36.39,\"apparentTemperature\":28.34,\"dewPoint\":17.37,\"humidity\":0.46,\"pressure\":1030.58,\"windSpeed\":10.72,\"windGust\":13.93,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":360.54,\"nearestStormDistance\":221.96,\"nearestStormBearing\":49},{\"time\":1774339200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.74,\"apparentTemperature\":27.58,\"dewPoint\":17.24,\"humidity\":0.47,\"pressure\":1030.34,\"windSpeed\":10.72,\"windGust\":13.79,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":368.74,\"nearestStormDistance\":169.23,\"nearestStormBearing\":41},{\"time\":1774342800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.1,\"apparentTemperature\":26.82,\"dewPoint\":17.11,\"humidity\":0.48,\"pressure\":1030.11,\"windSpeed\":10.72,\"windGust\":13.65,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":376.94,\"nearestStormDistance\":116.5,\"nearestStormBearing\":33},{\"time\":1774346400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.81,\"apparentTemperature\":26.64,\"dewPoint\":17.42,\"humidity\":0.49,\"pressure\":1029.87,\"windSpeed\":10.72,\"windGust\":13.64,\"windBearing\":233,\"cloudCover\":0.14,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":381.4,\"nearestStormDistance\":165.42,\"nearestStormBearing\":54},{\"time\":1774350000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.52,\"apparentTemperature\":26.47,\"dewPoint\":17.73,\"humidity\":0.49,\"pressure\":1029.64,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":117,\"cloudCover\":0.17,\"uvIndex\":0.07,\"visibility\":10.0,\"ozone\":385.86,\"nearestStormDistance\":214.34,\"nearestStormBearing\":75},{\"time\":1774353600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.23,\"apparentTemperature\":26.29,\"dewPoint\":18.03,\"humidity\":0.5,\"pressure\":1029.4,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":0,\"cloudCover\":0.2,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":390.32,\"nearestStormDistance\":263.26,\"nearestStormBearing\":95},{\"time\":1774357200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.01,\"apparentTemperature\":27.04,\"dewPoint\":17.47,\"humidity\":0.48,\"pressure\":1028.55,\"windSpeed\":10.72,\"windGust\":14.22,\"windBearing\":7,\"cloudCover\":0.26,\"uvIndex\":0.93,\"visibility\":10.0,\"ozone\":393.27,\"nearestStormDistance\":254.65,\"nearestStormBearing\":95},{\"time\":1774360800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.78,\"apparentTemperature\":27.79,\"dewPoint\":16.92,\"humidity\":0.45,\"pressure\":1027.69,\"windSpeed\":10.72,\"windGust\":14.82,\"windBearing\":13,\"cloudCover\":0.33,\"uvIndex\":1.77,\"visibility\":10.0,\"ozone\":396.21,\"nearestStormDistance\":246.03,\"nearestStormBearing\":96},{\"time\":1774364400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":36.55,\"apparentTemperature\":28.54,\"dewPoint\":16.36,\"humidity\":0.43,\"pressure\":1026.83,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":20,\"cloudCover\":0.39,\"uvIndex\":2.6,\"visibility\":10.0,\"ozone\":399.16,\"nearestStormDistance\":237.42,\"nearestStormBearing\":96},{\"time\":1774368000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":37.68,\"apparentTemperature\":29.94,\"dewPoint\":16.6,\"humidity\":0.42,\"pressure\":1025.98,\"windSpeed\":11.24,\"windGust\":16.23,\"windBearing\":60,\"cloudCover\":0.42,\"uvIndex\":3.57,\"visibility\":10.0,\"ozone\":393.36,\"nearestStormDistance\":232.51,\"nearestStormBearing\":94},{\"time\":1774371600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":38.81,\"apparentTemperature\":31.34,\"dewPoint\":16.85,\"humidity\":0.4,\"pressure\":1025.12,\"windSpeed\":11.77,\"windGust\":17.05,\"windBearing\":100,\"cloudCover\":0.46,\"uvIndex\":4.54,\"visibility\":10.0,\"ozone\":387.55,\"nearestStormDistance\":227.6,\"nearestStormBearing\":92},{\"time\":1774375200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.94,\"apparentTemperature\":32.74,\"dewPoint\":17.1,\"humidity\":0.39,\"pressure\":1024.26,\"windSpeed\":12.29,\"windGust\":17.87,\"windBearing\":140,\"cloudCover\":0.49,\"uvIndex\":5.51,\"visibility\":10.0,\"ozone\":381.74,\"nearestStormDistance\":222.68,\"nearestStormBearing\":90},{\"time\":1774378800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.65,\"apparentTemperature\":33.65,\"dewPoint\":17.72,\"humidity\":0.39,\"pressure\":1023.53,\"windSpeed\":12.44,\"windGust\":17.8,\"windBearing\":160,\"cloudCover\":0.52,\"uvIndex\":5.02,\"visibility\":10.0,\"ozone\":380.91,\"nearestStormDistance\":225.08,\"nearestStormBearing\":86},{\"time\":1774382400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.37,\"apparentTemperature\":34.56,\"dewPoint\":18.34,\"humidity\":0.39,\"pressure\":1022.8,\"windSpeed\":12.58,\"windGust\":17.72,\"windBearing\":180,\"cloudCover\":0.56,\"uvIndex\":4.53,\"visibility\":10.0,\"ozone\":380.07,\"nearestStormDistance\":227.47,\"nearestStormBearing\":83},{\"time\":1774386000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.08,\"apparentTemperature\":35.47,\"dewPoint\":18.97,\"humidity\":0.39,\"pressure\":1022.07,\"windSpeed\":12.73,\"windGust\":17.65,\"windBearing\":200,\"cloudCover\":0.59,\"uvIndex\":4.04,\"visibility\":10.0,\"ozone\":379.24,\"nearestStormDistance\":229.86,\"nearestStormBearing\":79},{\"time\":1774389600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.03,\"apparentTemperature\":35.61,\"dewPoint\":19.71,\"humidity\":0.4,\"pressure\":1021.34,\"windSpeed\":12.51,\"windGust\":17.05,\"windBearing\":200,\"cloudCover\":0.58,\"uvIndex\":2.89,\"visibility\":10.0,\"ozone\":380.33,\"nearestStormDistance\":301.76,\"nearestStormBearing\":122},{\"time\":1774393200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.98,\"apparentTemperature\":35.75,\"dewPoint\":20.46,\"humidity\":0.42,\"pressure\":1020.61,\"windSpeed\":12.29,\"windGust\":16.46,\"windBearing\":200,\"cloudCover\":0.56,\"uvIndex\":1.74,\"visibility\":10.0,\"ozone\":381.42,\"nearestStormDistance\":373.66,\"nearestStormBearing\":165},{\"time\":1774396800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.94,\"apparentTemperature\":35.89,\"dewPoint\":21.2,\"humidity\":0.43,\"pressure\":1019.88,\"windSpeed\":12.06,\"windGust\":15.86,\"windBearing\":200,\"cloudCover\":0.55,\"uvIndex\":0.59,\"visibility\":10.0,\"ozone\":382.51,\"nearestStormDistance\":445.56,\"nearestStormBearing\":208},{\"time\":1774400400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.82,\"apparentTemperature\":35.65,\"dewPoint\":22.16,\"humidity\":0.45,\"pressure\":1019.97,\"windSpeed\":11.69,\"windGust\":15.19,\"windBearing\":203,\"cloudCover\":0.56,\"uvIndex\":0.39,\"visibility\":10.0,\"ozone\":385.23,\"nearestStormDistance\":426.54,\"nearestStormBearing\":208},{\"time\":1774404000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.7,\"apparentTemperature\":35.41,\"dewPoint\":23.12,\"humidity\":0.48,\"pressure\":1020.07,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":207,\"cloudCover\":0.58,\"uvIndex\":0.2,\"visibility\":10.0,\"ozone\":387.94,\"nearestStormDistance\":407.53,\"nearestStormBearing\":207},{\"time\":1774407600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.58,\"apparentTemperature\":35.17,\"dewPoint\":24.08,\"humidity\":0.5,\"pressure\":1020.16,\"windSpeed\":10.95,\"windGust\":13.85,\"windBearing\":210,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.66,\"nearestStormDistance\":388.51,\"nearestStormBearing\":207},{\"time\":1774411200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.29,\"apparentTemperature\":34.82,\"dewPoint\":24.87,\"humidity\":0.52,\"pressure\":1020.25,\"windSpeed\":10.79,\"windGust\":13.84,\"windBearing\":217,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.22,\"nearestStormDistance\":380.31,\"nearestStormBearing\":206},{\"time\":1774414800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.01,\"apparentTemperature\":34.47,\"dewPoint\":25.66,\"humidity\":0.53,\"pressure\":1020.35,\"windSpeed\":10.63,\"windGust\":13.83,\"windBearing\":223,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.78,\"nearestStormDistance\":372.11,\"nearestStormBearing\":205},{\"time\":1774418400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.72,\"apparentTemperature\":34.12,\"dewPoint\":26.46,\"humidity\":0.55,\"pressure\":1020.44,\"windSpeed\":10.47,\"windGust\":13.82,\"windBearing\":230,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":398.33,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774422000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.43,\"apparentTemperature\":33.75,\"dewPoint\":26.76,\"humidity\":0.57,\"pressure\":1020.61,\"windSpeed\":10.31,\"windGust\":13.81,\"windBearing\":237,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.56,\"nearestStormDistance\":342.85,\"nearestStormBearing\":190},{\"time\":1774425600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.15,\"apparentTemperature\":33.38,\"dewPoint\":27.07,\"humidity\":0.58,\"pressure\":1020.77,\"windSpeed\":10.15,\"windGust\":13.8,\"windBearing\":243,\"cloudCover\":0.69,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.78,\"nearestStormDistance\":321.78,\"nearestStormBearing\":177},{\"time\":1774429200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.86,\"apparentTemperature\":33.01,\"dewPoint\":27.37,\"humidity\":0.6,\"pressure\":1020.93,\"windSpeed\":9.99,\"windGust\":13.79,\"windBearing\":250,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.01,\"nearestStormDistance\":300.72,\"nearestStormBearing\":163},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.58,\"apparentTemperature\":33.27,\"dewPoint\":27.81,\"humidity\":0.62,\"pressure\":1021.1,\"windSpeed\":9.83,\"windGust\":13.78,\"windBearing\":257,\"cloudCover\":0.69,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":407.34,\"nearestStormDistance\":272.51,\"nearestStormBearing\":181},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.65,\"apparentTemperature\":33.54,\"dewPoint\":28.24,\"humidity\":0.62,\"pressure\":1021.26,\"windSpeed\":9.83,\"windGust\":13.7,\"windBearing\":263,\"cloudCover\":0.69,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":412.67,\"nearestStormDistance\":244.31,\"nearestStormBearing\":198},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.72,\"apparentTemperature\":33.8,\"dewPoint\":28.67,\"humidity\":0.63,\"pressure\":1021.42,\"windSpeed\":9.83,\"windGust\":13.63,\"windBearing\":270,\"cloudCover\":0.68,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":418.0,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.74,\"apparentTemperature\":34.92,\"dewPoint\":28.15,\"humidity\":0.6,\"pressure\":1021.35,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":273,\"cloudCover\":0.67,\"uvIndex\":0.89,\"visibility\":10.0,\"ozone\":417.94,\"nearestStormDistance\":214.18,\"nearestStormBearing\":214},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.76,\"apparentTemperature\":36.03,\"dewPoint\":27.64,\"humidity\":0.57,\"pressure\":1021.27,\"windSpeed\":10.43,\"windGust\":14.82,\"windBearing\":277,\"cloudCover\":0.66,\"uvIndex\":1.68,\"visibility\":10.0,\"ozone\":417.87,\"nearestStormDistance\":212.26,\"nearestStormBearing\":213},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.78,\"apparentTemperature\":37.15,\"dewPoint\":27.12,\"humidity\":0.54,\"pressure\":1021.2,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":280,\"cloudCover\":0.65,\"uvIndex\":2.48,\"visibility\":10.0,\"ozone\":417.81,\"nearestStormDistance\":210.33,\"nearestStormBearing\":212},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":44.07,\"apparentTemperature\":38.64,\"dewPoint\":27.09,\"humidity\":0.51,\"pressure\":1021.12,\"windSpeed\":11.1,\"windGust\":16.08,\"windBearing\":277,\"cloudCover\":0.63,\"uvIndex\":3.46,\"visibility\":10.0,\"ozone\":414.05,\"nearestStormDistance\":193.67,\"nearestStormBearing\":195},{\"time\":1774458000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.35,\"apparentTemperature\":40.12,\"dewPoint\":27.05,\"humidity\":0.49,\"pressure\":1021.04,\"windSpeed\":11.47,\"windGust\":16.76,\"windBearing\":273,\"cloudCover\":0.61,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":410.3,\"nearestStormDistance\":177.01,\"nearestStormBearing\":178},{\"time\":1774461600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.63,\"apparentTemperature\":41.61,\"dewPoint\":27.01,\"humidity\":0.46,\"pressure\":1020.97,\"windSpeed\":11.84,\"windGust\":17.43,\"windBearing\":270,\"cloudCover\":0.59,\"uvIndex\":5.44,\"visibility\":10.0,\"ozone\":406.55,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774465200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":47.34,\"apparentTemperature\":42.34,\"dewPoint\":27.39,\"humidity\":0.45,\"pressure\":1020.84,\"windSpeed\":12.29,\"windGust\":17.57,\"windBearing\":277,\"cloudCover\":0.58,\"uvIndex\":4.94,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774468800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.05,\"apparentTemperature\":43.06,\"dewPoint\":27.76,\"humidity\":0.45,\"pressure\":1020.72,\"windSpeed\":12.73,\"windGust\":17.72,\"windBearing\":283,\"cloudCover\":0.58,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":395.52,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774472400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.76,\"apparentTemperature\":43.79,\"dewPoint\":28.13,\"humidity\":0.44,\"pressure\":1020.6,\"windSpeed\":13.18,\"windGust\":17.87,\"windBearing\":290,\"cloudCover\":0.57,\"uvIndex\":3.95,\"visibility\":10.0,\"ozone\":390.0,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774476000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.36,\"apparentTemperature\":43.41,\"dewPoint\":28.35,\"humidity\":0.45,\"pressure\":1020.48,\"windSpeed\":12.81,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.56,\"uvIndex\":2.84,\"visibility\":10.0,\"ozone\":386.11,\"nearestStormDistance\":237.03,\"nearestStormBearing\":146}]},\"daily\":{\"summary\":\"Mixed + precipitation on Saturday and Monday, with highs reaching 60\xB0F on Sunday.\",\"icon\":\"sleet\",\"data\":[{\"time\":1773806400,\"summary\":\"Mostly + clear until afternoon, returning overnight.\",\"icon\":\"clear-day\",\"sunriseTime\":1773831768,\"sunsetTime\":1773875149,\"moonPhase\":0.98,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773806400,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":35.8,\"temperatureHighTime\":1773871200,\"temperatureLow\":34.03,\"temperatureLowTime\":1773910800,\"apparentTemperatureHigh\":31.89,\"apparentTemperatureHighTime\":1773860400,\"apparentTemperatureLow\":24.89,\"apparentTemperatureLowTime\":1773882000,\"dewPoint\":12.86,\"humidity\":0.43,\"pressure\":1027.89,\"windSpeed\":9.38,\"windGust\":12.08,\"windGustTime\":1773806400,\"windBearing\":210,\"cloudCover\":0.26,\"uvIndex\":5.29,\"uvIndexTime\":1773856800,\"visibility\":10.0,\"temperatureMin\":29.73,\"temperatureMinTime\":1773838800,\"temperatureMax\":35.8,\"temperatureMaxTime\":1773871200,\"apparentTemperatureMin\":18.06,\"apparentTemperatureMinTime\":1773828000,\"apparentTemperatureMax\":31.89,\"apparentTemperatureMaxTime\":1773860400},{\"time\":1773892800,\"summary\":\"Partly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1773918069,\"sunsetTime\":1773961613,\"moonPhase\":0.02,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773892800,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":43.23,\"temperatureHighTime\":1773957600,\"temperatureLow\":41.51,\"temperatureLowTime\":1774000800,\"apparentTemperatureHigh\":35.19,\"apparentTemperatureHighTime\":1773946800,\"apparentTemperatureLow\":33.87,\"apparentTemperatureLowTime\":1773961200,\"dewPoint\":24.05,\"humidity\":0.55,\"pressure\":1024.83,\"windSpeed\":7.33,\"windGust\":9.91,\"windGustTime\":1773954000,\"windBearing\":154,\"cloudCover\":0.44,\"uvIndex\":5.42,\"uvIndexTime\":1773943200,\"visibility\":10.0,\"temperatureMin\":34.03,\"temperatureMinTime\":1773910800,\"temperatureMax\":43.23,\"temperatureMaxTime\":1773957600,\"apparentTemperatureMin\":26.4,\"apparentTemperatureMinTime\":1773910800,\"apparentTemperatureMax\":35.19,\"apparentTemperatureMaxTime\":1773946800},{\"time\":1773979200,\"summary\":\"Light + rain overnight.\",\"icon\":\"rain\",\"sunriseTime\":1774004370,\"sunsetTime\":1774048077,\"moonPhase\":0.05,\"precipIntensity\":0.0013,\"precipIntensityMax\":0.015,\"precipIntensityMaxTime\":1774062000,\"precipProbability\":0.49,\"precipAccumulation\":0.03,\"precipType\":\"rain\",\"temperatureHigh\":52.02,\"temperatureHighTime\":1774040400,\"temperatureLow\":49.02,\"temperatureLowTime\":1774087200,\"apparentTemperatureHigh\":45.07,\"apparentTemperatureHighTime\":1774033200,\"apparentTemperatureLow\":40.62,\"apparentTemperatureLowTime\":1774062000,\"dewPoint\":34.13,\"humidity\":0.62,\"pressure\":1018.82,\"windSpeed\":9.53,\"windGust\":12.8,\"windGustTime\":1774040400,\"windBearing\":210,\"cloudCover\":0.61,\"uvIndex\":5.15,\"uvIndexTime\":1774029600,\"visibility\":10.0,\"temperatureMin\":41.18,\"temperatureMinTime\":1774008000,\"temperatureMax\":52.02,\"temperatureMaxTime\":1774040400,\"apparentTemperatureMin\":34.65,\"apparentTemperatureMinTime\":1773986400,\"apparentTemperatureMax\":45.07,\"apparentTemperatureMaxTime\":1774033200},{\"time\":1774065600,\"summary\":\"Light + rain in the morning.\",\"icon\":\"rain\",\"sunriseTime\":1774090671,\"sunsetTime\":1774134541,\"moonPhase\":0.09,\"precipIntensity\":0.0088,\"precipIntensityMax\":0.0234,\"precipIntensityMaxTime\":1774083600,\"precipProbability\":0.49,\"precipAccumulation\":0.2102,\"precipType\":\"rain\",\"temperatureHigh\":56.62,\"temperatureHighTime\":1774126800,\"temperatureLow\":48.94,\"temperatureLowTime\":1774159200,\"apparentTemperatureHigh\":50.4,\"apparentTemperatureHighTime\":1774126800,\"apparentTemperatureLow\":41.34,\"apparentTemperatureLowTime\":1774159200,\"dewPoint\":40.98,\"humidity\":0.66,\"pressure\":1010.47,\"windSpeed\":11.36,\"windGust\":15.9,\"windGustTime\":1774126800,\"windBearing\":256,\"cloudCover\":0.64,\"uvIndex\":3.98,\"uvIndexTime\":1774119600,\"visibility\":7.17,\"temperatureMin\":48.83,\"temperatureMinTime\":1774094400,\"temperatureMax\":56.62,\"temperatureMaxTime\":1774126800,\"apparentTemperatureMin\":40.67,\"apparentTemperatureMinTime\":1774065600,\"apparentTemperatureMax\":50.4,\"apparentTemperatureMaxTime\":1774126800},{\"time\":1774152000,\"summary\":\"Breezy + in the evening and flurries and rain overnight.\",\"icon\":\"wind\",\"sunriseTime\":1774176971,\"sunsetTime\":1774221005,\"moonPhase\":0.13,\"precipIntensity\":0.0008,\"precipIntensityMax\":0.01,\"precipIntensityMaxTime\":1774234800,\"precipProbability\":0.28,\"precipAccumulation\":0.02,\"precipType\":\"rain\",\"temperatureHigh\":59.88,\"temperatureHighTime\":1774213200,\"temperatureLow\":44.04,\"temperatureLowTime\":1774260000,\"apparentTemperatureHigh\":53.29,\"apparentTemperatureHighTime\":1774202400,\"apparentTemperatureLow\":31.58,\"apparentTemperatureLowTime\":1774260000,\"dewPoint\":41.04,\"humidity\":0.63,\"pressure\":1008.08,\"windSpeed\":12.06,\"windGust\":16.39,\"windGustTime\":1774213200,\"windBearing\":258,\"cloudCover\":0.74,\"uvIndex\":5.55,\"uvIndexTime\":1774202400,\"visibility\":10.0,\"temperatureMin\":48.94,\"temperatureMinTime\":1774159200,\"temperatureMax\":59.88,\"temperatureMaxTime\":1774213200,\"apparentTemperatureMin\":41.34,\"apparentTemperatureMinTime\":1774159200,\"apparentTemperatureMax\":53.29,\"apparentTemperatureMaxTime\":1774202400},{\"time\":1774238400,\"summary\":\"Flurries + and breezy in the morning.\",\"icon\":\"snow\",\"sunriseTime\":1774263272,\"sunsetTime\":1774307468,\"moonPhase\":0.16,\"precipIntensity\":0.0046,\"precipIntensityMax\":0.0117,\"precipIntensityMaxTime\":1774256400,\"precipProbability\":0.31,\"precipAccumulation\":0.364,\"precipType\":\"snow\",\"temperatureHigh\":43.0,\"temperatureHighTime\":1774263600,\"temperatureLow\":34.81,\"temperatureLowTime\":1774346400,\"apparentTemperatureHigh\":30.57,\"apparentTemperatureHighTime\":1774299600,\"apparentTemperatureLow\":23.23,\"apparentTemperatureLowTime\":1774346400,\"dewPoint\":26.8,\"humidity\":0.53,\"pressure\":1026.56,\"windSpeed\":14.27,\"windGust\":19.1,\"windGustTime\":1774278000,\"windBearing\":164,\"cloudCover\":0.5,\"uvIndex\":1.88,\"uvIndexTime\":1774299600,\"visibility\":9.57,\"temperatureMin\":39.38,\"temperatureMinTime\":1774278000,\"temperatureMax\":51.25,\"temperatureMaxTime\":1774238400,\"apparentTemperatureMin\":26.12,\"apparentTemperatureMinTime\":1774278000,\"apparentTemperatureMax\":40.16,\"apparentTemperatureMaxTime\":1774238400},{\"time\":1774324800,\"summary\":\"Partly + cloudy from afternoon until night.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774349573,\"sunsetTime\":1774393932,\"moonPhase\":0.2,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774324800,\"precipProbability\":0.07,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":42.08,\"temperatureHighTime\":1774386000,\"temperatureLow\":39.58,\"temperatureLowTime\":1774432800,\"apparentTemperatureHigh\":34.71,\"apparentTemperatureHighTime\":1774386000,\"apparentTemperatureLow\":29.6,\"apparentTemperatureLowTime\":1774432800,\"dewPoint\":18.61,\"humidity\":0.44,\"pressure\":1025.86,\"windSpeed\":11.43,\"windGust\":15.32,\"windGustTime\":1774375200,\"windBearing\":189,\"cloudCover\":0.36,\"uvIndex\":5.51,\"uvIndexTime\":1774375200,\"visibility\":10.0,\"temperatureMin\":34.23,\"temperatureMinTime\":1774353600,\"temperatureMax\":42.08,\"temperatureMaxTime\":1774386000,\"apparentTemperatureMin\":22.73,\"apparentTemperatureMinTime\":1774353600,\"apparentTemperatureMax\":34.71,\"apparentTemperatureMaxTime\":1774386000},{\"time\":1774411200,\"summary\":\"Mostly + cloudy until afternoon, returning overnight.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774435873,\"sunsetTime\":1774480395,\"moonPhase\":0.24,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774411200,\"precipProbability\":0.12,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":48.76,\"temperatureHighTime\":1774472400,\"temperatureLow\":42.0,\"temperatureLowTime\":1774512000,\"apparentTemperatureHigh\":41.83,\"apparentTemperatureHighTime\":1774472400,\"apparentTemperatureLow\":31.72,\"apparentTemperatureLowTime\":1774512000,\"dewPoint\":27.59,\"humidity\":0.53,\"pressure\":1020.86,\"windSpeed\":11.18,\"windGust\":15.35,\"windGustTime\":1774472400,\"windBearing\":263,\"cloudCover\":0.62,\"uvIndex\":5.44,\"uvIndexTime\":1774461600,\"visibility\":10.0,\"temperatureMin\":39.58,\"temperatureMinTime\":1774432800,\"temperatureMax\":48.76,\"temperatureMaxTime\":1774472400,\"apparentTemperatureMin\":29.6,\"apparentTemperatureMinTime\":1774432800,\"apparentTemperatureMax\":41.83,\"apparentTemperatureMaxTime\":1774472400}]},\"alerts\":[],\"flags\":{\"sources\":[\"ETOPO1\",\"hrrrsubh\",\"rtma_ru\",\"hrrr_0-18\",\"nbm\",\"nbm_fire\",\"dwd_mosmix\",\"ecmwf_ifs\",\"hrrr_18-48\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"hrrr_subh\":\"2026-03-18 + 21Z\",\"rtma_ru\":\"2026-03-18 23:15Z\",\"hrrr_0-18\":\"2026-03-18 21Z\",\"nbm\":\"2026-03-18 + 19Z\",\"nbm_fire\":\"2026-03-18 18Z\",\"dwd_mosmix\":\"2026-03-18 22Z\",\"ecmwf_ifs\":\"2026-03-18 + 00Z\",\"hrrr_18-48\":\"2026-03-18 18Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":6.81,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:53 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9858' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 24df21f8156a0df29febdf6c3e09e32c.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - 1c5KAzVmWnRQf8ZIPq7ligWcRllgY8eyYl50JOcr23zkBSSuFYwhzA== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '142' + X-Handler-Time: + - '43.4' + X-Kong-Proxy-Latency: + - '1' + X-Kong-Request-Id: + - 34a6890ac13d9a2e18e8ee78417dcd68 + X-Kong-Upstream-Latency: + - '45' + X-Node-Id: + - ip-10-0-14-222.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9858' + X-Response-Time: + - '43.392' + X-Server-Time: + - '44.6' + content-length: + - '94228' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/cassettes/pirate_weather/current_wind_gust.yaml b/tests/integration/cassettes/pirate_weather/current_wind_gust.yaml new file mode 100644 index 00000000..64f589ad --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/current_wind_gust.yaml @@ -0,0 +1,238 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/40.7128,-74.006?extend=hourly&units=us + response: + body: + string: "{\"latitude\":40.7128,\"longitude\":-74.006,\"timezone\":\"America/New_York\",\"offset\":-4.0,\"elevation\":62,\"currently\":{\"time\":1773877680,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"nearestStormDistance\":356.19,\"nearestStormBearing\":35,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\",\"temperature\":32.88,\"apparentTemperature\":21.34,\"dewPoint\":16.48,\"humidity\":0.5,\"pressure\":1028.29,\"windSpeed\":10.46,\"windGust\":13.69,\"windBearing\":141,\"cloudCover\":0.0,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":401.24},\"minutely\":{\"summary\":\"Clear + for the hour.\",\"icon\":\"clear-night\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878340,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878400,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878460,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878520,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878580,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878640,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878700,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878760,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878820,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878880,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878940,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879000,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879060,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879120,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879240,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879300,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879360,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879420,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879480,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879540,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879600,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879660,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879720,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879780,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879840,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879900,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879960,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880020,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880080,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880140,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880200,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880260,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880320,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880380,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880440,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880500,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880560,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880620,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"}]},\"hourly\":{\"summary\":\"Partly + cloudy starting tomorrow morning.\",\"icon\":\"partly-cloudy-day\",\"data\":[{\"time\":1773874800,\"summary\":\"Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.62,\"apparentTemperature\":28.36,\"dewPoint\":13.44,\"humidity\":0.4,\"pressure\":1028.7,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":160,\"cloudCover\":0.04,\"uvIndex\":0.28,\"visibility\":10.0,\"ozone\":404.2,\"nearestStormDistance\":351.03,\"nearestStormBearing\":33},{\"time\":1773878400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.49,\"apparentTemperature\":28.15,\"dewPoint\":15.98,\"humidity\":0.44,\"pressure\":1028.19,\"windSpeed\":8.94,\"windGust\":10.95,\"windBearing\":150,\"cloudCover\":0.05,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.5,\"nearestStormDistance\":357.48,\"nearestStormBearing\":35},{\"time\":1773882000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.97,\"apparentTemperature\":28.81,\"dewPoint\":18.12,\"humidity\":0.49,\"pressure\":1029.01,\"windSpeed\":8.04,\"windGust\":10.05,\"windBearing\":150,\"cloudCover\":0.03,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":397.01,\"nearestStormDistance\":227.41,\"nearestStormBearing\":259},{\"time\":1773885600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.15,\"apparentTemperature\":28.8,\"dewPoint\":18.86,\"humidity\":0.51,\"pressure\":1029.03,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.06,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.34,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773889200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.83,\"apparentTemperature\":29.39,\"dewPoint\":19.08,\"humidity\":0.52,\"pressure\":1028.92,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.0,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773892800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.4,\"apparentTemperature\":29.71,\"dewPoint\":19.92,\"humidity\":0.54,\"pressure\":1028.24,\"windSpeed\":6.26,\"windGust\":8.04,\"windBearing\":150,\"cloudCover\":0.21,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.58,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773896400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.93,\"apparentTemperature\":30.0,\"dewPoint\":20.34,\"humidity\":0.55,\"pressure\":1027.83,\"windSpeed\":5.36,\"windGust\":8.04,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":392.93,\"nearestStormDistance\":240.11,\"nearestStormBearing\":260},{\"time\":1773900000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.01,\"apparentTemperature\":30.54,\"dewPoint\":21.34,\"humidity\":0.56,\"pressure\":1027.3,\"windSpeed\":5.36,\"windGust\":7.15,\"windBearing\":150,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.63,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773903600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.49,\"dewPoint\":22.14,\"humidity\":0.59,\"pressure\":1026.66,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.34,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.17,\"nearestStormDistance\":250.34,\"nearestStormBearing\":263},{\"time\":1773907200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.7,\"dewPoint\":22.5,\"humidity\":0.61,\"pressure\":1026.74,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.75,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773910800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.03,\"apparentTemperature\":31.01,\"dewPoint\":22.78,\"humidity\":0.61,\"pressure\":1026.25,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":140,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.66,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773914400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.18,\"apparentTemperature\":30.96,\"dewPoint\":22.62,\"humidity\":0.62,\"pressure\":1025.95,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":120,\"cloudCover\":0.53,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.2,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773918000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.92,\"apparentTemperature\":30.83,\"dewPoint\":23.05,\"humidity\":0.63,\"pressure\":1026.14,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":110,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.27,\"nearestStormDistance\":224.52,\"nearestStormBearing\":263},{\"time\":1773921600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.44,\"apparentTemperature\":31.32,\"dewPoint\":23.81,\"humidity\":0.62,\"pressure\":1026.84,\"windSpeed\":4.47,\"windGust\":6.48,\"windBearing\":110,\"cloudCover\":0.58,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":394.1,\"nearestStormDistance\":249.01,\"nearestStormBearing\":266},{\"time\":1773925200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":36.37,\"apparentTemperature\":32.29,\"dewPoint\":23.81,\"humidity\":0.6,\"pressure\":1026.81,\"windSpeed\":5.36,\"windGust\":6.7,\"windBearing\":130,\"cloudCover\":0.52,\"uvIndex\":1.08,\"visibility\":10.0,\"ozone\":396.41,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1773928800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.47,\"apparentTemperature\":32.23,\"dewPoint\":23.0,\"humidity\":0.56,\"pressure\":1026.22,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":160,\"cloudCover\":0.48,\"uvIndex\":2.14,\"visibility\":10.0,\"ozone\":396.14,\"nearestStormDistance\":180.4,\"nearestStormBearing\":201},{\"time\":1773932400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":38.7,\"apparentTemperature\":33.15,\"dewPoint\":22.05,\"humidity\":0.51,\"pressure\":1025.6,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.49,\"uvIndex\":3.44,\"visibility\":10.0,\"ozone\":398.5,\"nearestStormDistance\":165.94,\"nearestStormBearing\":239},{\"time\":1773936000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.2,\"apparentTemperature\":33.82,\"dewPoint\":21.4,\"humidity\":0.49,\"pressure\":1024.88,\"windSpeed\":8.04,\"windGust\":11.39,\"windBearing\":170,\"cloudCover\":0.52,\"uvIndex\":4.78,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":151.12,\"nearestStormBearing\":225},{\"time\":1773939600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.26,\"apparentTemperature\":34.25,\"dewPoint\":22.05,\"humidity\":0.48,\"pressure\":1024.24,\"windSpeed\":8.94,\"windGust\":13.18,\"windBearing\":170,\"cloudCover\":0.51,\"uvIndex\":5.06,\"visibility\":10.0,\"ozone\":405.51,\"nearestStormDistance\":146.62,\"nearestStormBearing\":233},{\"time\":1773943200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.45,\"apparentTemperature\":34.84,\"dewPoint\":22.82,\"humidity\":0.47,\"pressure\":1023.43,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":5.42,\"visibility\":10.0,\"ozone\":404.17,\"nearestStormDistance\":145.3,\"nearestStormBearing\":240},{\"time\":1773946800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.19,\"apparentTemperature\":35.74,\"dewPoint\":23.4,\"humidity\":0.47,\"pressure\":1023.23,\"windSpeed\":10.72,\"windGust\":14.74,\"windBearing\":170,\"cloudCover\":0.39,\"uvIndex\":4.9,\"visibility\":10.0,\"ozone\":399.76,\"nearestStormDistance\":124.91,\"nearestStormBearing\":243},{\"time\":1773950400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.46,\"apparentTemperature\":36.07,\"dewPoint\":24.39,\"humidity\":0.48,\"pressure\":1023.08,\"windSpeed\":11.62,\"windGust\":14.97,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":3.89,\"visibility\":10.0,\"ozone\":398.15,\"nearestStormDistance\":129.62,\"nearestStormBearing\":225},{\"time\":1773954000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.73,\"apparentTemperature\":36.01,\"dewPoint\":24.93,\"humidity\":0.49,\"pressure\":1022.57,\"windSpeed\":11.62,\"windGust\":15.86,\"windBearing\":160,\"cloudCover\":0.4,\"uvIndex\":2.57,\"visibility\":10.0,\"ozone\":397.86,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1773957600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.23,\"apparentTemperature\":36.99,\"dewPoint\":25.27,\"humidity\":0.5,\"pressure\":1022.38,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":160,\"cloudCover\":0.45,\"uvIndex\":1.25,\"visibility\":10.0,\"ozone\":398.76,\"nearestStormDistance\":93.81,\"nearestStormBearing\":243},{\"time\":1773961200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.05,\"apparentTemperature\":37.56,\"dewPoint\":26.82,\"humidity\":0.52,\"pressure\":1022.34,\"windSpeed\":9.83,\"windGust\":12.73,\"windBearing\":160,\"cloudCover\":0.39,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":401.36,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1773964800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.14,\"apparentTemperature\":37.63,\"dewPoint\":28.24,\"humidity\":0.55,\"pressure\":1022.62,\"windSpeed\":8.94,\"windGust\":11.62,\"windBearing\":160,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.26,\"nearestStormDistance\":90.27,\"nearestStormBearing\":201},{\"time\":1773968400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":37.85,\"dewPoint\":29.77,\"humidity\":0.59,\"pressure\":1022.45,\"windSpeed\":8.04,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":143.65,\"nearestStormBearing\":159},{\"time\":1773972000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.93,\"apparentTemperature\":38.41,\"dewPoint\":29.93,\"humidity\":0.6,\"pressure\":1021.95,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":180,\"cloudCover\":0.36,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.62,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773975600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.84,\"apparentTemperature\":38.93,\"dewPoint\":30.92,\"humidity\":0.61,\"pressure\":1022.17,\"windSpeed\":7.15,\"windGust\":9.38,\"windBearing\":190,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.73,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773979200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.11,\"apparentTemperature\":39.09,\"dewPoint\":31.23,\"humidity\":0.63,\"pressure\":1022.29,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":200,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":405.77,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1773982800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":39.15,\"dewPoint\":31.35,\"humidity\":0.64,\"pressure\":1021.96,\"windSpeed\":6.26,\"windGust\":8.27,\"windBearing\":220,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.51,\"nearestStormDistance\":252.47,\"nearestStormBearing\":145},{\"time\":1773986400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.17,\"apparentTemperature\":39.18,\"dewPoint\":31.48,\"humidity\":0.64,\"pressure\":1021.54,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":230,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":403.63,\"nearestStormDistance\":283.51,\"nearestStormBearing\":149},{\"time\":1773990000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.0,\"apparentTemperature\":38.94,\"dewPoint\":31.72,\"humidity\":0.65,\"pressure\":1021.22,\"windSpeed\":5.96,\"windGust\":8.19,\"windBearing\":235,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.56,\"nearestStormDistance\":335.93,\"nearestStormBearing\":150},{\"time\":1773993600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.84,\"apparentTemperature\":38.69,\"dewPoint\":31.96,\"humidity\":0.66,\"pressure\":1021.39,\"windSpeed\":5.66,\"windGust\":7.89,\"windBearing\":240,\"cloudCover\":0.48,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.77,\"nearestStormDistance\":267.07,\"nearestStormBearing\":161},{\"time\":1773997200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.68,\"apparentTemperature\":38.44,\"dewPoint\":32.2,\"humidity\":0.68,\"pressure\":1021.25,\"windSpeed\":5.36,\"windGust\":7.6,\"windBearing\":245,\"cloudCover\":0.44,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":388.23,\"nearestStormBearing\":33},{\"time\":1774000800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.51,\"apparentTemperature\":38.2,\"dewPoint\":32.44,\"humidity\":0.69,\"pressure\":1021.74,\"windSpeed\":5.06,\"windGust\":7.3,\"windBearing\":250,\"cloudCover\":0.41,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.47,\"nearestStormDistance\":368.02,\"nearestStormBearing\":206},{\"time\":1774004400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.35,\"apparentTemperature\":37.95,\"dewPoint\":32.68,\"humidity\":0.7,\"pressure\":1021.6,\"windSpeed\":4.77,\"windGust\":7.0,\"windBearing\":255,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.13,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774008000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.18,\"apparentTemperature\":37.71,\"dewPoint\":32.92,\"humidity\":0.71,\"pressure\":1021.73,\"windSpeed\":4.47,\"windGust\":6.7,\"windBearing\":260,\"cloudCover\":0.35,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":397.97,\"nearestStormDistance\":421.2,\"nearestStormBearing\":218},{\"time\":1774011600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.57,\"apparentTemperature\":39.55,\"dewPoint\":32.76,\"humidity\":0.69,\"pressure\":1021.52,\"windSpeed\":5.55,\"windGust\":7.6,\"windBearing\":248,\"cloudCover\":0.39,\"uvIndex\":1.13,\"visibility\":10.0,\"ozone\":395.53,\"nearestStormDistance\":367.17,\"nearestStormBearing\":214},{\"time\":1774015200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":43.95,\"apparentTemperature\":41.39,\"dewPoint\":32.59,\"humidity\":0.66,\"pressure\":1020.51,\"windSpeed\":6.64,\"windGust\":8.49,\"windBearing\":236,\"cloudCover\":0.44,\"uvIndex\":2.44,\"visibility\":10.0,\"ozone\":395.04,\"nearestStormDistance\":299.32,\"nearestStormBearing\":209},{\"time\":1774018800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.34,\"apparentTemperature\":43.23,\"dewPoint\":32.43,\"humidity\":0.64,\"pressure\":1020.97,\"windSpeed\":7.72,\"windGust\":9.38,\"windBearing\":224,\"cloudCover\":0.48,\"uvIndex\":3.72,\"visibility\":10.0,\"ozone\":394.63,\"nearestStormDistance\":270.38,\"nearestStormBearing\":201},{\"time\":1774022400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.73,\"apparentTemperature\":45.08,\"dewPoint\":33.12,\"humidity\":0.61,\"pressure\":1020.41,\"windSpeed\":8.81,\"windGust\":11.47,\"windBearing\":212,\"cloudCover\":0.53,\"uvIndex\":4.44,\"visibility\":10.0,\"ozone\":395.99,\"nearestStormDistance\":243.43,\"nearestStormBearing\":188},{\"time\":1774026000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.11,\"apparentTemperature\":46.92,\"dewPoint\":33.8,\"humidity\":0.59,\"pressure\":1019.22,\"windSpeed\":9.89,\"windGust\":13.55,\"windBearing\":200,\"cloudCover\":0.57,\"uvIndex\":4.4,\"visibility\":10.0,\"ozone\":396.23,\"nearestStormDistance\":242.1,\"nearestStormBearing\":180},{\"time\":1774029600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.5,\"apparentTemperature\":48.76,\"dewPoint\":34.48,\"humidity\":0.56,\"pressure\":1017.07,\"windSpeed\":10.98,\"windGust\":15.64,\"windBearing\":189,\"cloudCover\":0.62,\"uvIndex\":5.15,\"visibility\":10.0,\"ozone\":395.58,\"nearestStormDistance\":222.48,\"nearestStormBearing\":219},{\"time\":1774033200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.89,\"apparentTemperature\":50.61,\"dewPoint\":34.78,\"humidity\":0.54,\"pressure\":1017.31,\"windSpeed\":12.06,\"windGust\":17.13,\"windBearing\":177,\"cloudCover\":0.66,\"uvIndex\":4.74,\"visibility\":10.0,\"ozone\":396.7,\"nearestStormDistance\":152.64,\"nearestStormBearing\":212},{\"time\":1774036800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.45,\"apparentTemperature\":51.14,\"dewPoint\":35.07,\"humidity\":0.54,\"pressure\":1016.48,\"windSpeed\":13.4,\"windGust\":18.62,\"windBearing\":173,\"cloudCover\":0.71,\"uvIndex\":3.84,\"visibility\":10.0,\"ozone\":399.67,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774040400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.02,\"apparentTemperature\":51.67,\"dewPoint\":35.37,\"humidity\":0.54,\"pressure\":1015.65,\"windSpeed\":14.74,\"windGust\":20.11,\"windBearing\":170,\"cloudCover\":0.75,\"uvIndex\":2.41,\"visibility\":10.0,\"ozone\":398.36,\"nearestStormDistance\":155.63,\"nearestStormBearing\":180},{\"time\":1774044000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.89,\"apparentTemperature\":51.63,\"dewPoint\":36.12,\"humidity\":0.55,\"pressure\":1015.28,\"windSpeed\":14.89,\"windGust\":19.96,\"windBearing\":173,\"cloudCover\":0.79,\"uvIndex\":1.18,\"visibility\":10.0,\"ozone\":397.25,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774047600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.76,\"apparentTemperature\":51.58,\"dewPoint\":36.87,\"humidity\":0.57,\"pressure\":1014.9,\"windSpeed\":15.04,\"windGust\":19.81,\"windBearing\":177,\"cloudCover\":0.84,\"uvIndex\":0.26,\"visibility\":10.0,\"ozone\":396.55,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774051200,\"summary\":\"Breezy + and Overcast\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.64,\"apparentTemperature\":51.53,\"dewPoint\":37.62,\"humidity\":0.58,\"pressure\":1014.53,\"windSpeed\":15.19,\"windGust\":19.66,\"windBearing\":180,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.51,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774054800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.005,\"precipProbability\":0.23,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.005,\"precipType\":\"rain\",\"temperature\":51.51,\"apparentTemperature\":51.42,\"dewPoint\":38.17,\"humidity\":0.6,\"pressure\":1014.45,\"windSpeed\":14.89,\"windGust\":19.14,\"windBearing\":183,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.14,\"nearestStormDistance\":70.38,\"nearestStormBearing\":194},{\"time\":1774058400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.36,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.39,\"apparentTemperature\":51.31,\"dewPoint\":38.72,\"humidity\":0.61,\"pressure\":1014.37,\"windSpeed\":14.6,\"windGust\":18.62,\"windBearing\":187,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.49,\"nearestStormDistance\":52.24,\"nearestStormBearing\":236},{\"time\":1774062000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":51.26,\"apparentTemperature\":51.21,\"dewPoint\":39.27,\"humidity\":0.63,\"pressure\":1014.29,\"windSpeed\":14.3,\"windGust\":18.1,\"windBearing\":190,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.47,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774065600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.85,\"apparentTemperature\":50.86,\"dewPoint\":40.07,\"humidity\":0.66,\"pressure\":1013.54,\"windSpeed\":13.7,\"windGust\":17.72,\"windBearing\":193,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":8.37,\"ozone\":387.75,\"nearestStormDistance\":21.68,\"nearestStormBearing\":135},{\"time\":1774069200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.43,\"apparentTemperature\":50.51,\"dewPoint\":40.87,\"humidity\":0.68,\"pressure\":1012.8,\"windSpeed\":13.11,\"windGust\":17.35,\"windBearing\":197,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":6.66,\"ozone\":386.72,\"nearestStormDistance\":13.1,\"nearestStormBearing\":270},{\"time\":1774072800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.02,\"apparentTemperature\":50.16,\"dewPoint\":41.67,\"humidity\":0.71,\"pressure\":1012.06,\"windSpeed\":12.51,\"windGust\":16.98,\"windBearing\":200,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":4.95,\"ozone\":385.37,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774076400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0178,\"precipProbability\":0.49,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0178,\"precipType\":\"rain\",\"temperature\":49.72,\"apparentTemperature\":48.34,\"dewPoint\":41.97,\"humidity\":0.73,\"pressure\":1011.54,\"windSpeed\":11.91,\"windGust\":16.31,\"windBearing\":200,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":3.78,\"ozone\":383.4,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774080000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0206,\"precipProbability\":0.48,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0206,\"precipType\":\"rain\",\"temperature\":49.42,\"apparentTemperature\":46.51,\"dewPoint\":42.27,\"humidity\":0.76,\"pressure\":1011.01,\"windSpeed\":11.32,\"windGust\":15.64,\"windBearing\":200,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":2.6,\"ozone\":384.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774083600,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.12,\"apparentTemperature\":44.69,\"dewPoint\":42.57,\"humidity\":0.78,\"pressure\":1010.48,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":200,\"cloudCover\":0.75,\"uvIndex\":0.0,\"visibility\":1.43,\"ozone\":385.86,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774087200,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.02,\"apparentTemperature\":44.7,\"dewPoint\":42.77,\"humidity\":0.78,\"pressure\":1010.63,\"windSpeed\":10.43,\"windGust\":14.6,\"windBearing\":213,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":1.64,\"ozone\":388.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774090800,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.93,\"apparentTemperature\":44.7,\"dewPoint\":42.97,\"humidity\":0.79,\"pressure\":1010.77,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":227,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":1.86,\"ozone\":391.55,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774094400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.83,\"apparentTemperature\":44.71,\"dewPoint\":43.18,\"humidity\":0.79,\"pressure\":1010.92,\"windSpeed\":9.83,\"windGust\":13.85,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":0.02,\"visibility\":2.07,\"ozone\":393.68,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774098000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0161,\"precipProbability\":0.36,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0161,\"precipType\":\"rain\",\"temperature\":49.53,\"apparentTemperature\":46.62,\"dewPoint\":42.64,\"humidity\":0.76,\"pressure\":1010.95,\"windSpeed\":10.13,\"windGust\":14.45,\"windBearing\":263,\"cloudCover\":0.63,\"uvIndex\":0.24,\"visibility\":4.32,\"ozone\":397.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774101600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0089,\"precipProbability\":0.25,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0089,\"precipType\":\"rain\",\"temperature\":50.23,\"apparentTemperature\":48.54,\"dewPoint\":42.11,\"humidity\":0.74,\"pressure\":1010.98,\"windSpeed\":10.43,\"windGust\":15.04,\"windBearing\":287,\"cloudCover\":0.56,\"uvIndex\":0.42,\"visibility\":6.57,\"ozone\":397.24,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774105200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":50.94,\"apparentTemperature\":50.45,\"dewPoint\":41.58,\"humidity\":0.71,\"pressure\":1011.01,\"windSpeed\":10.72,\"windGust\":15.64,\"windBearing\":310,\"cloudCover\":0.5,\"uvIndex\":0.63,\"visibility\":8.83,\"ozone\":395.11,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774108800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":52.2,\"apparentTemperature\":52.06,\"dewPoint\":41.38,\"humidity\":0.67,\"pressure\":1010.65,\"windSpeed\":11.02,\"windGust\":16.31,\"windBearing\":313,\"cloudCover\":0.52,\"uvIndex\":1.47,\"visibility\":9.25,\"ozone\":393.52,\"nearestStormDistance\":21.71,\"nearestStormBearing\":45},{\"time\":1774112400,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":53.46,\"apparentTemperature\":53.67,\"dewPoint\":41.18,\"humidity\":0.63,\"pressure\":1010.29,\"windSpeed\":11.32,\"windGust\":16.98,\"windBearing\":317,\"cloudCover\":0.53,\"uvIndex\":2.39,\"visibility\":9.68,\"ozone\":392.9,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774116000,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":54.72,\"apparentTemperature\":55.27,\"dewPoint\":40.98,\"humidity\":0.59,\"pressure\":1009.93,\"windSpeed\":11.62,\"windGust\":17.65,\"windBearing\":320,\"cloudCover\":0.55,\"uvIndex\":2.96,\"visibility\":10.0,\"ozone\":389.31,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774119600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0011,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0011,\"precipType\":\"rain\",\"temperature\":55.35,\"apparentTemperature\":55.87,\"dewPoint\":40.52,\"humidity\":0.57,\"pressure\":1009.52,\"windSpeed\":11.91,\"windGust\":17.8,\"windBearing\":317,\"cloudCover\":0.54,\"uvIndex\":3.98,\"visibility\":10.0,\"ozone\":381.62,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774123200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0006,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0006,\"precipType\":\"rain\",\"temperature\":55.99,\"apparentTemperature\":56.47,\"dewPoint\":40.06,\"humidity\":0.55,\"pressure\":1009.1,\"windSpeed\":12.21,\"windGust\":17.95,\"windBearing\":313,\"cloudCover\":0.54,\"uvIndex\":3.39,\"visibility\":10.0,\"ozone\":376.35,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774126800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":56.62,\"apparentTemperature\":57.07,\"dewPoint\":39.6,\"humidity\":0.53,\"pressure\":1008.68,\"windSpeed\":12.51,\"windGust\":18.1,\"windBearing\":310,\"cloudCover\":0.53,\"uvIndex\":1.41,\"visibility\":10.0,\"ozone\":370.1,\"nearestStormDistance\":62.95,\"nearestStormBearing\":63},{\"time\":1774130400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.78,\"apparentTemperature\":56.1,\"dewPoint\":39.3,\"humidity\":0.54,\"pressure\":1009.0,\"windSpeed\":12.21,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.52,\"uvIndex\":0.54,\"visibility\":10.0,\"ozone\":364.83,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774134000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.93,\"apparentTemperature\":55.12,\"dewPoint\":39.01,\"humidity\":0.55,\"pressure\":1009.32,\"windSpeed\":11.91,\"windGust\":16.46,\"windBearing\":297,\"cloudCover\":0.51,\"uvIndex\":0.22,\"visibility\":10.0,\"ozone\":363.13,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774137600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.09,\"apparentTemperature\":54.14,\"dewPoint\":38.71,\"humidity\":0.56,\"pressure\":1009.64,\"windSpeed\":11.62,\"windGust\":15.64,\"windBearing\":290,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":359.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774141200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.09,\"apparentTemperature\":53.19,\"dewPoint\":39.06,\"humidity\":0.59,\"pressure\":1009.55,\"windSpeed\":11.02,\"windGust\":14.6,\"windBearing\":253,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":356.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774144800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.09,\"apparentTemperature\":52.23,\"dewPoint\":39.41,\"humidity\":0.62,\"pressure\":1009.46,\"windSpeed\":10.43,\"windGust\":13.55,\"windBearing\":217,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":354.23,\"nearestStormDistance\":168.25,\"nearestStormBearing\":59},{\"time\":1774148400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.1,\"apparentTemperature\":51.28,\"dewPoint\":39.76,\"humidity\":0.65,\"pressure\":1009.36,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":180,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.08,\"nearestStormDistance\":226.79,\"nearestStormBearing\":47},{\"time\":1774152000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.38,\"apparentTemperature\":49.3,\"dewPoint\":39.79,\"humidity\":0.66,\"pressure\":1008.94,\"windSpeed\":9.53,\"windGust\":12.29,\"windBearing\":193,\"cloudCover\":0.68,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":349.54,\"nearestStormDistance\":253.21,\"nearestStormBearing\":59},{\"time\":1774155600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.66,\"apparentTemperature\":47.33,\"dewPoint\":39.83,\"humidity\":0.68,\"pressure\":1008.52,\"windSpeed\":9.23,\"windGust\":12.06,\"windBearing\":207,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.8,\"nearestStormDistance\":264.46,\"nearestStormBearing\":56},{\"time\":1774159200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.94,\"apparentTemperature\":45.36,\"dewPoint\":39.87,\"humidity\":0.69,\"pressure\":1008.1,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":220,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":345.5,\"nearestStormDistance\":245.1,\"nearestStormBearing\":192},{\"time\":1774162800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.07,\"apparentTemperature\":45.39,\"dewPoint\":40.41,\"humidity\":0.71,\"pressure\":1007.39,\"windSpeed\":8.94,\"windGust\":12.14,\"windBearing\":227,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":342.51,\"nearestStormDistance\":278.62,\"nearestStormBearing\":208},{\"time\":1774166400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.2,\"apparentTemperature\":45.42,\"dewPoint\":40.96,\"humidity\":0.73,\"pressure\":1006.69,\"windSpeed\":8.94,\"windGust\":12.44,\"windBearing\":233,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":338.56,\"nearestStormDistance\":258.01,\"nearestStormBearing\":206},{\"time\":1774170000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.33,\"apparentTemperature\":45.45,\"dewPoint\":41.5,\"humidity\":0.75,\"pressure\":1005.98,\"windSpeed\":8.94,\"windGust\":12.73,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":334.91,\"nearestStormDistance\":215.43,\"nearestStormBearing\":225},{\"time\":1774173600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.3,\"apparentTemperature\":45.42,\"dewPoint\":41.71,\"humidity\":0.75,\"pressure\":1005.95,\"windSpeed\":9.23,\"windGust\":12.66,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.76,\"nearestStormDistance\":189.33,\"nearestStormBearing\":210},{\"time\":1774177200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.27,\"apparentTemperature\":45.4,\"dewPoint\":41.92,\"humidity\":0.75,\"pressure\":1005.91,\"windSpeed\":9.53,\"windGust\":12.58,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.24,\"nearestStormDistance\":177.17,\"nearestStormBearing\":196},{\"time\":1774180800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.24,\"apparentTemperature\":45.37,\"dewPoint\":42.13,\"humidity\":0.75,\"pressure\":1005.87,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":330.76,\"nearestStormDistance\":160.35,\"nearestStormBearing\":198},{\"time\":1774184400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.6,\"apparentTemperature\":47.97,\"dewPoint\":41.78,\"humidity\":0.71,\"pressure\":1005.69,\"windSpeed\":10.43,\"windGust\":13.78,\"windBearing\":240,\"cloudCover\":0.73,\"uvIndex\":1.05,\"visibility\":10.0,\"ozone\":328.48,\"nearestStormDistance\":194.91,\"nearestStormBearing\":214},{\"time\":1774188000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.96,\"apparentTemperature\":50.57,\"dewPoint\":41.43,\"humidity\":0.68,\"pressure\":1005.51,\"windSpeed\":11.02,\"windGust\":15.04,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":2.17,\"visibility\":10.0,\"ozone\":328.87,\"nearestStormDistance\":209.08,\"nearestStormBearing\":189},{\"time\":1774191600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.31,\"apparentTemperature\":53.17,\"dewPoint\":41.07,\"humidity\":0.64,\"pressure\":1005.33,\"windSpeed\":11.62,\"windGust\":16.31,\"windBearing\":240,\"cloudCover\":0.64,\"uvIndex\":3.41,\"visibility\":10.0,\"ozone\":328.31,\"nearestStormDistance\":246.92,\"nearestStormBearing\":148},{\"time\":1774195200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.26,\"apparentTemperature\":55.17,\"dewPoint\":41.19,\"humidity\":0.6,\"pressure\":1005.07,\"windSpeed\":12.21,\"windGust\":17.57,\"windBearing\":243,\"cloudCover\":0.65,\"uvIndex\":4.25,\"visibility\":10.0,\"ozone\":325.51,\"nearestStormDistance\":179.84,\"nearestStormBearing\":217},{\"time\":1774198800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.2,\"apparentTemperature\":57.16,\"dewPoint\":41.31,\"humidity\":0.57,\"pressure\":1004.81,\"windSpeed\":12.81,\"windGust\":18.84,\"windBearing\":247,\"cloudCover\":0.66,\"uvIndex\":4.83,\"visibility\":10.0,\"ozone\":324.7,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774202400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.14,\"apparentTemperature\":59.16,\"dewPoint\":41.43,\"humidity\":0.53,\"pressure\":1004.55,\"windSpeed\":13.4,\"windGust\":20.11,\"windBearing\":250,\"cloudCover\":0.67,\"uvIndex\":5.55,\"visibility\":10.0,\"ozone\":324.95,\"nearestStormDistance\":227.48,\"nearestStormBearing\":119},{\"time\":1774206000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.39,\"apparentTemperature\":59.37,\"dewPoint\":41.45,\"humidity\":0.52,\"pressure\":1005.49,\"windSpeed\":13.93,\"windGust\":20.4,\"windBearing\":260,\"cloudCover\":0.69,\"uvIndex\":4.84,\"visibility\":10.0,\"ozone\":321.6,\"nearestStormDistance\":176.23,\"nearestStormBearing\":241},{\"time\":1774209600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.64,\"apparentTemperature\":59.57,\"dewPoint\":41.47,\"humidity\":0.51,\"pressure\":1006.43,\"windSpeed\":14.45,\"windGust\":20.7,\"windBearing\":270,\"cloudCover\":0.72,\"uvIndex\":3.74,\"visibility\":10.0,\"ozone\":321.19,\"nearestStormDistance\":122.3,\"nearestStormBearing\":219},{\"time\":1774213200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0154,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.88,\"apparentTemperature\":59.77,\"dewPoint\":41.49,\"humidity\":0.5,\"pressure\":1007.38,\"windSpeed\":14.97,\"windGust\":21.0,\"windBearing\":280,\"cloudCover\":0.74,\"uvIndex\":2.67,\"visibility\":10.0,\"ozone\":318.76,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774216800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.05,\"apparentTemperature\":59.0,\"dewPoint\":41.39,\"humidity\":0.51,\"pressure\":1009.18,\"windSpeed\":15.12,\"windGust\":20.55,\"windBearing\":290,\"cloudCover\":0.75,\"uvIndex\":1.36,\"visibility\":10.0,\"ozone\":317.64,\"nearestStormDistance\":103.76,\"nearestStormBearing\":180},{\"time\":1774220400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0209,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":58.21,\"apparentTemperature\":58.23,\"dewPoint\":41.29,\"humidity\":0.53,\"pressure\":1010.99,\"windSpeed\":15.27,\"windGust\":20.11,\"windBearing\":300,\"cloudCover\":0.75,\"uvIndex\":0.35,\"visibility\":10.0,\"ozone\":315.61,\"nearestStormDistance\":86.46,\"nearestStormBearing\":180},{\"time\":1774224000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0236,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.38,\"apparentTemperature\":57.45,\"dewPoint\":41.2,\"humidity\":0.54,\"pressure\":1012.8,\"windSpeed\":15.41,\"windGust\":19.66,\"windBearing\":310,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":314.16,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1774227600,\"summary\":\"Possible + Drizzle and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0033,\"precipProbability\":0.23,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0033,\"precipType\":\"rain\",\"temperature\":55.75,\"apparentTemperature\":55.71,\"dewPoint\":40.65,\"humidity\":0.56,\"pressure\":1014.28,\"windSpeed\":15.34,\"windGust\":19.51,\"windBearing\":320,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":312.5,\"nearestStormDistance\":64.95,\"nearestStormBearing\":225},{\"time\":1774231200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0067,\"precipProbability\":0.25,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0067,\"precipType\":\"rain\",\"temperature\":54.13,\"apparentTemperature\":53.96,\"dewPoint\":40.11,\"humidity\":0.59,\"pressure\":1015.75,\"windSpeed\":15.27,\"windGust\":19.36,\"windBearing\":330,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":310.26,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774234800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":52.5,\"apparentTemperature\":52.21,\"dewPoint\":39.56,\"humidity\":0.61,\"pressure\":1017.23,\"windSpeed\":15.19,\"windGust\":19.21,\"windBearing\":340,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":308.09,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774238400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.015,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.25,\"apparentTemperature\":49.24,\"dewPoint\":38.65,\"humidity\":0.62,\"pressure\":1018.56,\"windSpeed\":14.89,\"windGust\":18.99,\"windBearing\":230,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":306.08,\"nearestStormDistance\":53.49,\"nearestStormBearing\":198},{\"time\":1774242000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":49.99,\"apparentTemperature\":46.26,\"dewPoint\":37.75,\"humidity\":0.62,\"pressure\":1019.9,\"windSpeed\":14.6,\"windGust\":18.77,\"windBearing\":120,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.54,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774245600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0388,\"precipType\":\"snow\",\"temperature\":48.74,\"apparentTemperature\":43.29,\"dewPoint\":36.84,\"humidity\":0.63,\"pressure\":1021.24,\"windSpeed\":14.3,\"windGust\":18.54,\"windBearing\":10,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.66,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774249200,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0106,\"precipProbability\":0.29,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0407,\"precipType\":\"snow\",\"temperature\":47.52,\"apparentTemperature\":41.64,\"dewPoint\":35.52,\"humidity\":0.63,\"pressure\":1022.07,\"windSpeed\":14.6,\"windGust\":18.7,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.84,\"nearestStormDistance\":62.62,\"nearestStormBearing\":116},{\"time\":1774252800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0111,\"precipProbability\":0.3,\"precipIntensityError\":0.0213,\"precipAccumulation\":0.0425,\"precipType\":\"snow\",\"temperature\":46.29,\"apparentTemperature\":40.0,\"dewPoint\":34.2,\"humidity\":0.62,\"pressure\":1022.9,\"windSpeed\":14.89,\"windGust\":18.85,\"windBearing\":10,\"cloudCover\":0.57,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.6,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774256400,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0232,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":45.07,\"apparentTemperature\":38.35,\"dewPoint\":32.88,\"humidity\":0.62,\"pressure\":1023.73,\"windSpeed\":15.19,\"windGust\":19.01,\"windBearing\":10,\"cloudCover\":0.47,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":302.96,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774260000,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":44.04,\"apparentTemperature\":37.11,\"dewPoint\":31.69,\"humidity\":0.61,\"pressure\":1024.84,\"windSpeed\":15.19,\"windGust\":19.53,\"windBearing\":10,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.26,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774263600,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":43.0,\"apparentTemperature\":35.86,\"dewPoint\":30.51,\"humidity\":0.61,\"pressure\":1025.96,\"windSpeed\":15.19,\"windGust\":20.04,\"windBearing\":10,\"cloudCover\":0.56,\"uvIndex\":0.0,\"visibility\":7.22,\"ozone\":304.9,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774267200,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":41.97,\"apparentTemperature\":34.61,\"dewPoint\":29.32,\"humidity\":0.6,\"pressure\":1027.07,\"windSpeed\":15.19,\"windGust\":20.55,\"windBearing\":10,\"cloudCover\":0.6,\"uvIndex\":0.04,\"visibility\":9.35,\"ozone\":305.52,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774270800,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0078,\"precipProbability\":0.26,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0296,\"precipType\":\"snow\",\"temperature\":41.11,\"apparentTemperature\":33.63,\"dewPoint\":27.9,\"humidity\":0.58,\"pressure\":1027.55,\"windSpeed\":15.19,\"windGust\":20.63,\"windBearing\":10,\"cloudCover\":0.62,\"uvIndex\":0.1,\"visibility\":8.57,\"ozone\":306.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774274400,\"summary\":\"Possible + Flurries and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0039,\"precipProbability\":0.21,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0148,\"precipType\":\"snow\",\"temperature\":40.24,\"apparentTemperature\":32.64,\"dewPoint\":26.47,\"humidity\":0.57,\"pressure\":1028.03,\"windSpeed\":15.19,\"windGust\":20.72,\"windBearing\":10,\"cloudCover\":0.65,\"uvIndex\":0.16,\"visibility\":7.79,\"ozone\":307.39,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774278000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":31.66,\"dewPoint\":25.05,\"humidity\":0.55,\"pressure\":1028.51,\"windSpeed\":15.19,\"windGust\":20.8,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.22,\"visibility\":7.01,\"ozone\":308.32,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774281600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.83,\"apparentTemperature\":32.26,\"dewPoint\":24.23,\"humidity\":0.52,\"pressure\":1028.42,\"windSpeed\":14.6,\"windGust\":20.64,\"windBearing\":127,\"cloudCover\":0.61,\"uvIndex\":0.41,\"visibility\":9.67,\"ozone\":309.92,\"nearestStormDistance\":4.37,\"nearestStormBearing\":30},{\"time\":1774285200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.28,\"apparentTemperature\":32.86,\"dewPoint\":23.41,\"humidity\":0.5,\"pressure\":1028.34,\"windSpeed\":14.0,\"windGust\":20.49,\"windBearing\":243,\"cloudCover\":0.54,\"uvIndex\":0.6,\"visibility\":10.0,\"ozone\":311.51,\"nearestStormDistance\":8.73,\"nearestStormBearing\":60},{\"time\":1774288800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.73,\"apparentTemperature\":33.46,\"dewPoint\":22.59,\"humidity\":0.47,\"pressure\":1028.26,\"windSpeed\":13.4,\"windGust\":20.33,\"windBearing\":0,\"cloudCover\":0.48,\"uvIndex\":0.78,\"visibility\":10.0,\"ozone\":313.1,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774292400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.19,\"apparentTemperature\":34.12,\"dewPoint\":22.07,\"humidity\":0.45,\"pressure\":1028.2,\"windSpeed\":13.55,\"windGust\":20.25,\"windBearing\":357,\"cloudCover\":0.44,\"uvIndex\":1.15,\"visibility\":10.0,\"ozone\":315.84,\"nearestStormDistance\":28.08,\"nearestStormBearing\":131},{\"time\":1774296000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.65,\"apparentTemperature\":34.78,\"dewPoint\":21.55,\"humidity\":0.44,\"pressure\":1028.14,\"windSpeed\":13.7,\"windGust\":20.18,\"windBearing\":353,\"cloudCover\":0.39,\"uvIndex\":1.51,\"visibility\":10.0,\"ozone\":318.57,\"nearestStormDistance\":43.07,\"nearestStormBearing\":172},{\"time\":1774299600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.12,\"apparentTemperature\":35.44,\"dewPoint\":21.04,\"humidity\":0.42,\"pressure\":1028.08,\"windSpeed\":13.85,\"windGust\":20.11,\"windBearing\":350,\"cloudCover\":0.35,\"uvIndex\":1.88,\"visibility\":10.0,\"ozone\":321.3,\"nearestStormDistance\":58.05,\"nearestStormBearing\":213},{\"time\":1774303200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.09,\"apparentTemperature\":35.34,\"dewPoint\":20.79,\"humidity\":0.42,\"pressure\":1028.61,\"windSpeed\":13.78,\"windGust\":18.99,\"windBearing\":350,\"cloudCover\":0.34,\"uvIndex\":1.4,\"visibility\":10.0,\"ozone\":323.19,\"nearestStormDistance\":53.14,\"nearestStormBearing\":217},{\"time\":1774306800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.06,\"apparentTemperature\":35.25,\"dewPoint\":20.53,\"humidity\":0.42,\"pressure\":1029.15,\"windSpeed\":13.7,\"windGust\":17.87,\"windBearing\":350,\"cloudCover\":0.32,\"uvIndex\":0.92,\"visibility\":10.0,\"ozone\":325.07,\"nearestStormDistance\":48.24,\"nearestStormBearing\":221},{\"time\":1774310400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.03,\"apparentTemperature\":35.15,\"dewPoint\":20.28,\"humidity\":0.42,\"pressure\":1029.68,\"windSpeed\":13.63,\"windGust\":16.76,\"windBearing\":350,\"cloudCover\":0.31,\"uvIndex\":0.44,\"visibility\":10.0,\"ozone\":326.96,\"nearestStormDistance\":43.33,\"nearestStormBearing\":225},{\"time\":1774314000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.2,\"apparentTemperature\":34.12,\"dewPoint\":20.12,\"humidity\":0.43,\"pressure\":1029.87,\"windSpeed\":13.26,\"windGust\":16.31,\"windBearing\":347,\"cloudCover\":0.26,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":329.73,\"nearestStormDistance\":48.28,\"nearestStormBearing\":258},{\"time\":1774317600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.37,\"apparentTemperature\":33.09,\"dewPoint\":19.96,\"humidity\":0.43,\"pressure\":1030.06,\"windSpeed\":12.88,\"windGust\":15.86,\"windBearing\":343,\"cloudCover\":0.22,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":332.5,\"nearestStormDistance\":53.23,\"nearestStormBearing\":292},{\"time\":1774321200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.54,\"apparentTemperature\":32.05,\"dewPoint\":19.8,\"humidity\":0.44,\"pressure\":1030.25,\"windSpeed\":12.51,\"windGust\":15.41,\"windBearing\":340,\"cloudCover\":0.17,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":335.27,\"nearestStormDistance\":58.19,\"nearestStormBearing\":326},{\"time\":1774324800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":38.71,\"apparentTemperature\":31.07,\"dewPoint\":19.03,\"humidity\":0.44,\"pressure\":1030.44,\"windSpeed\":11.91,\"windGust\":14.97,\"windBearing\":343,\"cloudCover\":0.15,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":340.96,\"nearestStormDistance\":130.35,\"nearestStormBearing\":236},{\"time\":1774328400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.87,\"apparentTemperature\":30.09,\"dewPoint\":18.26,\"humidity\":0.45,\"pressure\":1030.63,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":347,\"cloudCover\":0.12,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.65,\"nearestStormDistance\":202.52,\"nearestStormBearing\":147},{\"time\":1774332000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.04,\"apparentTemperature\":29.1,\"dewPoint\":17.49,\"humidity\":0.45,\"pressure\":1030.81,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.34,\"nearestStormDistance\":274.69,\"nearestStormBearing\":57},{\"time\":1774335600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":36.39,\"apparentTemperature\":28.34,\"dewPoint\":17.37,\"humidity\":0.46,\"pressure\":1030.58,\"windSpeed\":10.72,\"windGust\":13.93,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":360.54,\"nearestStormDistance\":221.96,\"nearestStormBearing\":49},{\"time\":1774339200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.74,\"apparentTemperature\":27.58,\"dewPoint\":17.24,\"humidity\":0.47,\"pressure\":1030.34,\"windSpeed\":10.72,\"windGust\":13.79,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":368.74,\"nearestStormDistance\":169.23,\"nearestStormBearing\":41},{\"time\":1774342800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.1,\"apparentTemperature\":26.82,\"dewPoint\":17.11,\"humidity\":0.48,\"pressure\":1030.11,\"windSpeed\":10.72,\"windGust\":13.65,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":376.94,\"nearestStormDistance\":116.5,\"nearestStormBearing\":33},{\"time\":1774346400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.81,\"apparentTemperature\":26.64,\"dewPoint\":17.42,\"humidity\":0.49,\"pressure\":1029.87,\"windSpeed\":10.72,\"windGust\":13.64,\"windBearing\":233,\"cloudCover\":0.14,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":381.4,\"nearestStormDistance\":165.42,\"nearestStormBearing\":54},{\"time\":1774350000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.52,\"apparentTemperature\":26.47,\"dewPoint\":17.73,\"humidity\":0.49,\"pressure\":1029.64,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":117,\"cloudCover\":0.17,\"uvIndex\":0.07,\"visibility\":10.0,\"ozone\":385.86,\"nearestStormDistance\":214.34,\"nearestStormBearing\":75},{\"time\":1774353600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.23,\"apparentTemperature\":26.29,\"dewPoint\":18.03,\"humidity\":0.5,\"pressure\":1029.4,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":0,\"cloudCover\":0.2,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":390.32,\"nearestStormDistance\":263.26,\"nearestStormBearing\":95},{\"time\":1774357200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.01,\"apparentTemperature\":27.04,\"dewPoint\":17.47,\"humidity\":0.48,\"pressure\":1028.55,\"windSpeed\":10.72,\"windGust\":14.22,\"windBearing\":7,\"cloudCover\":0.26,\"uvIndex\":0.93,\"visibility\":10.0,\"ozone\":393.27,\"nearestStormDistance\":254.65,\"nearestStormBearing\":95},{\"time\":1774360800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.78,\"apparentTemperature\":27.79,\"dewPoint\":16.92,\"humidity\":0.45,\"pressure\":1027.69,\"windSpeed\":10.72,\"windGust\":14.82,\"windBearing\":13,\"cloudCover\":0.33,\"uvIndex\":1.77,\"visibility\":10.0,\"ozone\":396.21,\"nearestStormDistance\":246.03,\"nearestStormBearing\":96},{\"time\":1774364400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":36.55,\"apparentTemperature\":28.54,\"dewPoint\":16.36,\"humidity\":0.43,\"pressure\":1026.83,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":20,\"cloudCover\":0.39,\"uvIndex\":2.6,\"visibility\":10.0,\"ozone\":399.16,\"nearestStormDistance\":237.42,\"nearestStormBearing\":96},{\"time\":1774368000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":37.68,\"apparentTemperature\":29.94,\"dewPoint\":16.6,\"humidity\":0.42,\"pressure\":1025.98,\"windSpeed\":11.24,\"windGust\":16.23,\"windBearing\":60,\"cloudCover\":0.42,\"uvIndex\":3.57,\"visibility\":10.0,\"ozone\":393.36,\"nearestStormDistance\":232.51,\"nearestStormBearing\":94},{\"time\":1774371600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":38.81,\"apparentTemperature\":31.34,\"dewPoint\":16.85,\"humidity\":0.4,\"pressure\":1025.12,\"windSpeed\":11.77,\"windGust\":17.05,\"windBearing\":100,\"cloudCover\":0.46,\"uvIndex\":4.54,\"visibility\":10.0,\"ozone\":387.55,\"nearestStormDistance\":227.6,\"nearestStormBearing\":92},{\"time\":1774375200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.94,\"apparentTemperature\":32.74,\"dewPoint\":17.1,\"humidity\":0.39,\"pressure\":1024.26,\"windSpeed\":12.29,\"windGust\":17.87,\"windBearing\":140,\"cloudCover\":0.49,\"uvIndex\":5.51,\"visibility\":10.0,\"ozone\":381.74,\"nearestStormDistance\":222.68,\"nearestStormBearing\":90},{\"time\":1774378800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.65,\"apparentTemperature\":33.65,\"dewPoint\":17.72,\"humidity\":0.39,\"pressure\":1023.53,\"windSpeed\":12.44,\"windGust\":17.8,\"windBearing\":160,\"cloudCover\":0.52,\"uvIndex\":5.02,\"visibility\":10.0,\"ozone\":380.91,\"nearestStormDistance\":225.08,\"nearestStormBearing\":86},{\"time\":1774382400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.37,\"apparentTemperature\":34.56,\"dewPoint\":18.34,\"humidity\":0.39,\"pressure\":1022.8,\"windSpeed\":12.58,\"windGust\":17.72,\"windBearing\":180,\"cloudCover\":0.56,\"uvIndex\":4.53,\"visibility\":10.0,\"ozone\":380.07,\"nearestStormDistance\":227.47,\"nearestStormBearing\":83},{\"time\":1774386000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.08,\"apparentTemperature\":35.47,\"dewPoint\":18.97,\"humidity\":0.39,\"pressure\":1022.07,\"windSpeed\":12.73,\"windGust\":17.65,\"windBearing\":200,\"cloudCover\":0.59,\"uvIndex\":4.04,\"visibility\":10.0,\"ozone\":379.24,\"nearestStormDistance\":229.86,\"nearestStormBearing\":79},{\"time\":1774389600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.03,\"apparentTemperature\":35.61,\"dewPoint\":19.71,\"humidity\":0.4,\"pressure\":1021.34,\"windSpeed\":12.51,\"windGust\":17.05,\"windBearing\":200,\"cloudCover\":0.58,\"uvIndex\":2.89,\"visibility\":10.0,\"ozone\":380.33,\"nearestStormDistance\":301.76,\"nearestStormBearing\":122},{\"time\":1774393200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.98,\"apparentTemperature\":35.75,\"dewPoint\":20.46,\"humidity\":0.42,\"pressure\":1020.61,\"windSpeed\":12.29,\"windGust\":16.46,\"windBearing\":200,\"cloudCover\":0.56,\"uvIndex\":1.74,\"visibility\":10.0,\"ozone\":381.42,\"nearestStormDistance\":373.66,\"nearestStormBearing\":165},{\"time\":1774396800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.94,\"apparentTemperature\":35.89,\"dewPoint\":21.2,\"humidity\":0.43,\"pressure\":1019.88,\"windSpeed\":12.06,\"windGust\":15.86,\"windBearing\":200,\"cloudCover\":0.55,\"uvIndex\":0.59,\"visibility\":10.0,\"ozone\":382.51,\"nearestStormDistance\":445.56,\"nearestStormBearing\":208},{\"time\":1774400400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.82,\"apparentTemperature\":35.65,\"dewPoint\":22.16,\"humidity\":0.45,\"pressure\":1019.97,\"windSpeed\":11.69,\"windGust\":15.19,\"windBearing\":203,\"cloudCover\":0.56,\"uvIndex\":0.39,\"visibility\":10.0,\"ozone\":385.23,\"nearestStormDistance\":426.54,\"nearestStormBearing\":208},{\"time\":1774404000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.7,\"apparentTemperature\":35.41,\"dewPoint\":23.12,\"humidity\":0.48,\"pressure\":1020.07,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":207,\"cloudCover\":0.58,\"uvIndex\":0.2,\"visibility\":10.0,\"ozone\":387.94,\"nearestStormDistance\":407.53,\"nearestStormBearing\":207},{\"time\":1774407600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.58,\"apparentTemperature\":35.17,\"dewPoint\":24.08,\"humidity\":0.5,\"pressure\":1020.16,\"windSpeed\":10.95,\"windGust\":13.85,\"windBearing\":210,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.66,\"nearestStormDistance\":388.51,\"nearestStormBearing\":207},{\"time\":1774411200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.29,\"apparentTemperature\":34.82,\"dewPoint\":24.87,\"humidity\":0.52,\"pressure\":1020.25,\"windSpeed\":10.79,\"windGust\":13.84,\"windBearing\":217,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.22,\"nearestStormDistance\":380.31,\"nearestStormBearing\":206},{\"time\":1774414800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.01,\"apparentTemperature\":34.47,\"dewPoint\":25.66,\"humidity\":0.53,\"pressure\":1020.35,\"windSpeed\":10.63,\"windGust\":13.83,\"windBearing\":223,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.78,\"nearestStormDistance\":372.11,\"nearestStormBearing\":205},{\"time\":1774418400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.72,\"apparentTemperature\":34.12,\"dewPoint\":26.46,\"humidity\":0.55,\"pressure\":1020.44,\"windSpeed\":10.47,\"windGust\":13.82,\"windBearing\":230,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":398.33,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774422000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.43,\"apparentTemperature\":33.75,\"dewPoint\":26.76,\"humidity\":0.57,\"pressure\":1020.61,\"windSpeed\":10.31,\"windGust\":13.81,\"windBearing\":237,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.56,\"nearestStormDistance\":342.85,\"nearestStormBearing\":190},{\"time\":1774425600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.15,\"apparentTemperature\":33.38,\"dewPoint\":27.07,\"humidity\":0.58,\"pressure\":1020.77,\"windSpeed\":10.15,\"windGust\":13.8,\"windBearing\":243,\"cloudCover\":0.69,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.78,\"nearestStormDistance\":321.78,\"nearestStormBearing\":177},{\"time\":1774429200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.86,\"apparentTemperature\":33.01,\"dewPoint\":27.37,\"humidity\":0.6,\"pressure\":1020.93,\"windSpeed\":9.99,\"windGust\":13.79,\"windBearing\":250,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.01,\"nearestStormDistance\":300.72,\"nearestStormBearing\":163},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.58,\"apparentTemperature\":33.27,\"dewPoint\":27.81,\"humidity\":0.62,\"pressure\":1021.1,\"windSpeed\":9.83,\"windGust\":13.78,\"windBearing\":257,\"cloudCover\":0.69,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":407.34,\"nearestStormDistance\":272.51,\"nearestStormBearing\":181},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.65,\"apparentTemperature\":33.54,\"dewPoint\":28.24,\"humidity\":0.62,\"pressure\":1021.26,\"windSpeed\":9.83,\"windGust\":13.7,\"windBearing\":263,\"cloudCover\":0.69,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":412.67,\"nearestStormDistance\":244.31,\"nearestStormBearing\":198},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.72,\"apparentTemperature\":33.8,\"dewPoint\":28.67,\"humidity\":0.63,\"pressure\":1021.42,\"windSpeed\":9.83,\"windGust\":13.63,\"windBearing\":270,\"cloudCover\":0.68,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":418.0,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.74,\"apparentTemperature\":34.92,\"dewPoint\":28.15,\"humidity\":0.6,\"pressure\":1021.35,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":273,\"cloudCover\":0.67,\"uvIndex\":0.89,\"visibility\":10.0,\"ozone\":417.94,\"nearestStormDistance\":214.18,\"nearestStormBearing\":214},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.76,\"apparentTemperature\":36.03,\"dewPoint\":27.64,\"humidity\":0.57,\"pressure\":1021.27,\"windSpeed\":10.43,\"windGust\":14.82,\"windBearing\":277,\"cloudCover\":0.66,\"uvIndex\":1.68,\"visibility\":10.0,\"ozone\":417.87,\"nearestStormDistance\":212.26,\"nearestStormBearing\":213},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.78,\"apparentTemperature\":37.15,\"dewPoint\":27.12,\"humidity\":0.54,\"pressure\":1021.2,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":280,\"cloudCover\":0.65,\"uvIndex\":2.48,\"visibility\":10.0,\"ozone\":417.81,\"nearestStormDistance\":210.33,\"nearestStormBearing\":212},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":44.07,\"apparentTemperature\":38.64,\"dewPoint\":27.09,\"humidity\":0.51,\"pressure\":1021.12,\"windSpeed\":11.1,\"windGust\":16.08,\"windBearing\":277,\"cloudCover\":0.63,\"uvIndex\":3.46,\"visibility\":10.0,\"ozone\":414.05,\"nearestStormDistance\":193.67,\"nearestStormBearing\":195},{\"time\":1774458000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.35,\"apparentTemperature\":40.12,\"dewPoint\":27.05,\"humidity\":0.49,\"pressure\":1021.04,\"windSpeed\":11.47,\"windGust\":16.76,\"windBearing\":273,\"cloudCover\":0.61,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":410.3,\"nearestStormDistance\":177.01,\"nearestStormBearing\":178},{\"time\":1774461600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.63,\"apparentTemperature\":41.61,\"dewPoint\":27.01,\"humidity\":0.46,\"pressure\":1020.97,\"windSpeed\":11.84,\"windGust\":17.43,\"windBearing\":270,\"cloudCover\":0.59,\"uvIndex\":5.44,\"visibility\":10.0,\"ozone\":406.55,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774465200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":47.34,\"apparentTemperature\":42.34,\"dewPoint\":27.39,\"humidity\":0.45,\"pressure\":1020.84,\"windSpeed\":12.29,\"windGust\":17.57,\"windBearing\":277,\"cloudCover\":0.58,\"uvIndex\":4.94,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774468800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.05,\"apparentTemperature\":43.06,\"dewPoint\":27.76,\"humidity\":0.45,\"pressure\":1020.72,\"windSpeed\":12.73,\"windGust\":17.72,\"windBearing\":283,\"cloudCover\":0.58,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":395.52,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774472400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.76,\"apparentTemperature\":43.79,\"dewPoint\":28.13,\"humidity\":0.44,\"pressure\":1020.6,\"windSpeed\":13.18,\"windGust\":17.87,\"windBearing\":290,\"cloudCover\":0.57,\"uvIndex\":3.95,\"visibility\":10.0,\"ozone\":390.0,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774476000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.36,\"apparentTemperature\":43.41,\"dewPoint\":28.35,\"humidity\":0.45,\"pressure\":1020.48,\"windSpeed\":12.81,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.56,\"uvIndex\":2.84,\"visibility\":10.0,\"ozone\":386.11,\"nearestStormDistance\":237.03,\"nearestStormBearing\":146}]},\"daily\":{\"summary\":\"Mixed + precipitation on Saturday and Monday, with highs reaching 60\xB0F on Sunday.\",\"icon\":\"sleet\",\"data\":[{\"time\":1773806400,\"summary\":\"Mostly + clear until afternoon, returning overnight.\",\"icon\":\"clear-day\",\"sunriseTime\":1773831768,\"sunsetTime\":1773875149,\"moonPhase\":0.98,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773806400,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":35.8,\"temperatureHighTime\":1773871200,\"temperatureLow\":34.03,\"temperatureLowTime\":1773910800,\"apparentTemperatureHigh\":31.89,\"apparentTemperatureHighTime\":1773860400,\"apparentTemperatureLow\":24.89,\"apparentTemperatureLowTime\":1773882000,\"dewPoint\":12.86,\"humidity\":0.43,\"pressure\":1027.89,\"windSpeed\":9.38,\"windGust\":12.08,\"windGustTime\":1773806400,\"windBearing\":210,\"cloudCover\":0.26,\"uvIndex\":5.29,\"uvIndexTime\":1773856800,\"visibility\":10.0,\"temperatureMin\":29.73,\"temperatureMinTime\":1773838800,\"temperatureMax\":35.8,\"temperatureMaxTime\":1773871200,\"apparentTemperatureMin\":18.06,\"apparentTemperatureMinTime\":1773828000,\"apparentTemperatureMax\":31.89,\"apparentTemperatureMaxTime\":1773860400},{\"time\":1773892800,\"summary\":\"Partly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1773918069,\"sunsetTime\":1773961613,\"moonPhase\":0.02,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773892800,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":43.23,\"temperatureHighTime\":1773957600,\"temperatureLow\":41.51,\"temperatureLowTime\":1774000800,\"apparentTemperatureHigh\":35.19,\"apparentTemperatureHighTime\":1773946800,\"apparentTemperatureLow\":33.87,\"apparentTemperatureLowTime\":1773961200,\"dewPoint\":24.05,\"humidity\":0.55,\"pressure\":1024.83,\"windSpeed\":7.33,\"windGust\":9.91,\"windGustTime\":1773954000,\"windBearing\":154,\"cloudCover\":0.44,\"uvIndex\":5.42,\"uvIndexTime\":1773943200,\"visibility\":10.0,\"temperatureMin\":34.03,\"temperatureMinTime\":1773910800,\"temperatureMax\":43.23,\"temperatureMaxTime\":1773957600,\"apparentTemperatureMin\":26.4,\"apparentTemperatureMinTime\":1773910800,\"apparentTemperatureMax\":35.19,\"apparentTemperatureMaxTime\":1773946800},{\"time\":1773979200,\"summary\":\"Light + rain overnight.\",\"icon\":\"rain\",\"sunriseTime\":1774004370,\"sunsetTime\":1774048077,\"moonPhase\":0.05,\"precipIntensity\":0.0013,\"precipIntensityMax\":0.015,\"precipIntensityMaxTime\":1774062000,\"precipProbability\":0.49,\"precipAccumulation\":0.03,\"precipType\":\"rain\",\"temperatureHigh\":52.02,\"temperatureHighTime\":1774040400,\"temperatureLow\":49.02,\"temperatureLowTime\":1774087200,\"apparentTemperatureHigh\":45.07,\"apparentTemperatureHighTime\":1774033200,\"apparentTemperatureLow\":40.62,\"apparentTemperatureLowTime\":1774062000,\"dewPoint\":34.13,\"humidity\":0.62,\"pressure\":1018.82,\"windSpeed\":9.53,\"windGust\":12.8,\"windGustTime\":1774040400,\"windBearing\":210,\"cloudCover\":0.61,\"uvIndex\":5.15,\"uvIndexTime\":1774029600,\"visibility\":10.0,\"temperatureMin\":41.18,\"temperatureMinTime\":1774008000,\"temperatureMax\":52.02,\"temperatureMaxTime\":1774040400,\"apparentTemperatureMin\":34.65,\"apparentTemperatureMinTime\":1773986400,\"apparentTemperatureMax\":45.07,\"apparentTemperatureMaxTime\":1774033200},{\"time\":1774065600,\"summary\":\"Light + rain in the morning.\",\"icon\":\"rain\",\"sunriseTime\":1774090671,\"sunsetTime\":1774134541,\"moonPhase\":0.09,\"precipIntensity\":0.0088,\"precipIntensityMax\":0.0234,\"precipIntensityMaxTime\":1774083600,\"precipProbability\":0.49,\"precipAccumulation\":0.2102,\"precipType\":\"rain\",\"temperatureHigh\":56.62,\"temperatureHighTime\":1774126800,\"temperatureLow\":48.94,\"temperatureLowTime\":1774159200,\"apparentTemperatureHigh\":50.4,\"apparentTemperatureHighTime\":1774126800,\"apparentTemperatureLow\":41.34,\"apparentTemperatureLowTime\":1774159200,\"dewPoint\":40.98,\"humidity\":0.66,\"pressure\":1010.47,\"windSpeed\":11.36,\"windGust\":15.9,\"windGustTime\":1774126800,\"windBearing\":256,\"cloudCover\":0.64,\"uvIndex\":3.98,\"uvIndexTime\":1774119600,\"visibility\":7.17,\"temperatureMin\":48.83,\"temperatureMinTime\":1774094400,\"temperatureMax\":56.62,\"temperatureMaxTime\":1774126800,\"apparentTemperatureMin\":40.67,\"apparentTemperatureMinTime\":1774065600,\"apparentTemperatureMax\":50.4,\"apparentTemperatureMaxTime\":1774126800},{\"time\":1774152000,\"summary\":\"Breezy + in the evening and flurries and rain overnight.\",\"icon\":\"wind\",\"sunriseTime\":1774176971,\"sunsetTime\":1774221005,\"moonPhase\":0.13,\"precipIntensity\":0.0008,\"precipIntensityMax\":0.01,\"precipIntensityMaxTime\":1774234800,\"precipProbability\":0.28,\"precipAccumulation\":0.02,\"precipType\":\"rain\",\"temperatureHigh\":59.88,\"temperatureHighTime\":1774213200,\"temperatureLow\":44.04,\"temperatureLowTime\":1774260000,\"apparentTemperatureHigh\":53.29,\"apparentTemperatureHighTime\":1774202400,\"apparentTemperatureLow\":31.58,\"apparentTemperatureLowTime\":1774260000,\"dewPoint\":41.04,\"humidity\":0.63,\"pressure\":1008.08,\"windSpeed\":12.06,\"windGust\":16.39,\"windGustTime\":1774213200,\"windBearing\":258,\"cloudCover\":0.74,\"uvIndex\":5.55,\"uvIndexTime\":1774202400,\"visibility\":10.0,\"temperatureMin\":48.94,\"temperatureMinTime\":1774159200,\"temperatureMax\":59.88,\"temperatureMaxTime\":1774213200,\"apparentTemperatureMin\":41.34,\"apparentTemperatureMinTime\":1774159200,\"apparentTemperatureMax\":53.29,\"apparentTemperatureMaxTime\":1774202400},{\"time\":1774238400,\"summary\":\"Flurries + and breezy in the morning.\",\"icon\":\"snow\",\"sunriseTime\":1774263272,\"sunsetTime\":1774307468,\"moonPhase\":0.16,\"precipIntensity\":0.0046,\"precipIntensityMax\":0.0117,\"precipIntensityMaxTime\":1774256400,\"precipProbability\":0.31,\"precipAccumulation\":0.364,\"precipType\":\"snow\",\"temperatureHigh\":43.0,\"temperatureHighTime\":1774263600,\"temperatureLow\":34.81,\"temperatureLowTime\":1774346400,\"apparentTemperatureHigh\":30.57,\"apparentTemperatureHighTime\":1774299600,\"apparentTemperatureLow\":23.23,\"apparentTemperatureLowTime\":1774346400,\"dewPoint\":26.8,\"humidity\":0.53,\"pressure\":1026.56,\"windSpeed\":14.27,\"windGust\":19.1,\"windGustTime\":1774278000,\"windBearing\":164,\"cloudCover\":0.5,\"uvIndex\":1.88,\"uvIndexTime\":1774299600,\"visibility\":9.57,\"temperatureMin\":39.38,\"temperatureMinTime\":1774278000,\"temperatureMax\":51.25,\"temperatureMaxTime\":1774238400,\"apparentTemperatureMin\":26.12,\"apparentTemperatureMinTime\":1774278000,\"apparentTemperatureMax\":40.16,\"apparentTemperatureMaxTime\":1774238400},{\"time\":1774324800,\"summary\":\"Partly + cloudy from afternoon until night.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774349573,\"sunsetTime\":1774393932,\"moonPhase\":0.2,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774324800,\"precipProbability\":0.07,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":42.08,\"temperatureHighTime\":1774386000,\"temperatureLow\":39.58,\"temperatureLowTime\":1774432800,\"apparentTemperatureHigh\":34.71,\"apparentTemperatureHighTime\":1774386000,\"apparentTemperatureLow\":29.6,\"apparentTemperatureLowTime\":1774432800,\"dewPoint\":18.61,\"humidity\":0.44,\"pressure\":1025.86,\"windSpeed\":11.43,\"windGust\":15.32,\"windGustTime\":1774375200,\"windBearing\":189,\"cloudCover\":0.36,\"uvIndex\":5.51,\"uvIndexTime\":1774375200,\"visibility\":10.0,\"temperatureMin\":34.23,\"temperatureMinTime\":1774353600,\"temperatureMax\":42.08,\"temperatureMaxTime\":1774386000,\"apparentTemperatureMin\":22.73,\"apparentTemperatureMinTime\":1774353600,\"apparentTemperatureMax\":34.71,\"apparentTemperatureMaxTime\":1774386000},{\"time\":1774411200,\"summary\":\"Mostly + cloudy until afternoon, returning overnight.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774435873,\"sunsetTime\":1774480395,\"moonPhase\":0.24,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774411200,\"precipProbability\":0.12,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":48.76,\"temperatureHighTime\":1774472400,\"temperatureLow\":42.0,\"temperatureLowTime\":1774512000,\"apparentTemperatureHigh\":41.83,\"apparentTemperatureHighTime\":1774472400,\"apparentTemperatureLow\":31.72,\"apparentTemperatureLowTime\":1774512000,\"dewPoint\":27.59,\"humidity\":0.53,\"pressure\":1020.86,\"windSpeed\":11.18,\"windGust\":15.35,\"windGustTime\":1774472400,\"windBearing\":263,\"cloudCover\":0.62,\"uvIndex\":5.44,\"uvIndexTime\":1774461600,\"visibility\":10.0,\"temperatureMin\":39.58,\"temperatureMinTime\":1774432800,\"temperatureMax\":48.76,\"temperatureMaxTime\":1774472400,\"apparentTemperatureMin\":29.6,\"apparentTemperatureMinTime\":1774432800,\"apparentTemperatureMax\":41.83,\"apparentTemperatureMaxTime\":1774472400}]},\"alerts\":[],\"flags\":{\"sources\":[\"ETOPO1\",\"hrrrsubh\",\"rtma_ru\",\"hrrr_0-18\",\"nbm\",\"nbm_fire\",\"dwd_mosmix\",\"ecmwf_ifs\",\"hrrr_18-48\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"hrrr_subh\":\"2026-03-18 + 21Z\",\"rtma_ru\":\"2026-03-18 23:15Z\",\"hrrr_0-18\":\"2026-03-18 21Z\",\"nbm\":\"2026-03-18 + 19Z\",\"nbm_fire\":\"2026-03-18 18Z\",\"dwd_mosmix\":\"2026-03-18 22Z\",\"ecmwf_ifs\":\"2026-03-18 + 00Z\",\"hrrr_18-48\":\"2026-03-18 18Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":6.81,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:54 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9855' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 7f26f4279546775ace8410d89a15a960.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - xc9F318XTYYxF12fpKZSZDXIFnVroD6Tir7cLVtW3pKb7E2M5YcXVA== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '145' + X-Handler-Time: + - '48.1' + X-Kong-Proxy-Latency: + - '1' + X-Kong-Request-Id: + - 28ecf2154531fc19e338aa597e4e000a + X-Kong-Upstream-Latency: + - '50' + X-Node-Id: + - ip-10-0-14-222.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9855' + X-Response-Time: + - '48.084' + X-Server-Time: + - '49.3' + content-length: + - '94228' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/cassettes/pirate_weather/forecast_daily_summary.yaml b/tests/integration/cassettes/pirate_weather/forecast_daily_summary.yaml new file mode 100644 index 00000000..87d62239 --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/forecast_daily_summary.yaml @@ -0,0 +1,238 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/40.7128,-74.006?extend=hourly&units=us + response: + body: + string: "{\"latitude\":40.7128,\"longitude\":-74.006,\"timezone\":\"America/New_York\",\"offset\":-4.0,\"elevation\":62,\"currently\":{\"time\":1773877680,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"nearestStormDistance\":356.19,\"nearestStormBearing\":35,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\",\"temperature\":32.88,\"apparentTemperature\":21.34,\"dewPoint\":16.48,\"humidity\":0.5,\"pressure\":1028.29,\"windSpeed\":10.46,\"windGust\":13.69,\"windBearing\":141,\"cloudCover\":0.0,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":401.24},\"minutely\":{\"summary\":\"Clear + for the hour.\",\"icon\":\"clear-night\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878340,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878400,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878460,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878520,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878580,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878640,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878700,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878760,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878820,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878880,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878940,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879000,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879060,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879120,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879240,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879300,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879360,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879420,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879480,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879540,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879600,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879660,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879720,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879780,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879840,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879900,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879960,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880020,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880080,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880140,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880200,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880260,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880320,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880380,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880440,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880500,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880560,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880620,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"}]},\"hourly\":{\"summary\":\"Partly + cloudy starting tomorrow morning.\",\"icon\":\"partly-cloudy-day\",\"data\":[{\"time\":1773874800,\"summary\":\"Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.62,\"apparentTemperature\":28.36,\"dewPoint\":13.44,\"humidity\":0.4,\"pressure\":1028.7,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":160,\"cloudCover\":0.04,\"uvIndex\":0.28,\"visibility\":10.0,\"ozone\":404.2,\"nearestStormDistance\":351.03,\"nearestStormBearing\":33},{\"time\":1773878400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.49,\"apparentTemperature\":28.15,\"dewPoint\":15.98,\"humidity\":0.44,\"pressure\":1028.19,\"windSpeed\":8.94,\"windGust\":10.95,\"windBearing\":150,\"cloudCover\":0.05,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.5,\"nearestStormDistance\":357.48,\"nearestStormBearing\":35},{\"time\":1773882000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.97,\"apparentTemperature\":28.81,\"dewPoint\":18.12,\"humidity\":0.49,\"pressure\":1029.01,\"windSpeed\":8.04,\"windGust\":10.05,\"windBearing\":150,\"cloudCover\":0.03,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":397.01,\"nearestStormDistance\":227.41,\"nearestStormBearing\":259},{\"time\":1773885600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.15,\"apparentTemperature\":28.8,\"dewPoint\":18.86,\"humidity\":0.51,\"pressure\":1029.03,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.06,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.34,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773889200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.83,\"apparentTemperature\":29.39,\"dewPoint\":19.08,\"humidity\":0.52,\"pressure\":1028.92,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.0,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773892800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.4,\"apparentTemperature\":29.71,\"dewPoint\":19.92,\"humidity\":0.54,\"pressure\":1028.24,\"windSpeed\":6.26,\"windGust\":8.04,\"windBearing\":150,\"cloudCover\":0.21,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.58,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773896400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.93,\"apparentTemperature\":30.0,\"dewPoint\":20.34,\"humidity\":0.55,\"pressure\":1027.83,\"windSpeed\":5.36,\"windGust\":8.04,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":392.93,\"nearestStormDistance\":240.11,\"nearestStormBearing\":260},{\"time\":1773900000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.01,\"apparentTemperature\":30.54,\"dewPoint\":21.34,\"humidity\":0.56,\"pressure\":1027.3,\"windSpeed\":5.36,\"windGust\":7.15,\"windBearing\":150,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.63,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773903600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.49,\"dewPoint\":22.14,\"humidity\":0.59,\"pressure\":1026.66,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.34,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.17,\"nearestStormDistance\":250.34,\"nearestStormBearing\":263},{\"time\":1773907200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.7,\"dewPoint\":22.5,\"humidity\":0.61,\"pressure\":1026.74,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.75,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773910800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.03,\"apparentTemperature\":31.01,\"dewPoint\":22.78,\"humidity\":0.61,\"pressure\":1026.25,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":140,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.66,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773914400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.18,\"apparentTemperature\":30.96,\"dewPoint\":22.62,\"humidity\":0.62,\"pressure\":1025.95,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":120,\"cloudCover\":0.53,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.2,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773918000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.92,\"apparentTemperature\":30.83,\"dewPoint\":23.05,\"humidity\":0.63,\"pressure\":1026.14,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":110,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.27,\"nearestStormDistance\":224.52,\"nearestStormBearing\":263},{\"time\":1773921600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.44,\"apparentTemperature\":31.32,\"dewPoint\":23.81,\"humidity\":0.62,\"pressure\":1026.84,\"windSpeed\":4.47,\"windGust\":6.48,\"windBearing\":110,\"cloudCover\":0.58,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":394.1,\"nearestStormDistance\":249.01,\"nearestStormBearing\":266},{\"time\":1773925200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":36.37,\"apparentTemperature\":32.29,\"dewPoint\":23.81,\"humidity\":0.6,\"pressure\":1026.81,\"windSpeed\":5.36,\"windGust\":6.7,\"windBearing\":130,\"cloudCover\":0.52,\"uvIndex\":1.08,\"visibility\":10.0,\"ozone\":396.41,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1773928800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.47,\"apparentTemperature\":32.23,\"dewPoint\":23.0,\"humidity\":0.56,\"pressure\":1026.22,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":160,\"cloudCover\":0.48,\"uvIndex\":2.14,\"visibility\":10.0,\"ozone\":396.14,\"nearestStormDistance\":180.4,\"nearestStormBearing\":201},{\"time\":1773932400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":38.7,\"apparentTemperature\":33.15,\"dewPoint\":22.05,\"humidity\":0.51,\"pressure\":1025.6,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.49,\"uvIndex\":3.44,\"visibility\":10.0,\"ozone\":398.5,\"nearestStormDistance\":165.94,\"nearestStormBearing\":239},{\"time\":1773936000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.2,\"apparentTemperature\":33.82,\"dewPoint\":21.4,\"humidity\":0.49,\"pressure\":1024.88,\"windSpeed\":8.04,\"windGust\":11.39,\"windBearing\":170,\"cloudCover\":0.52,\"uvIndex\":4.78,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":151.12,\"nearestStormBearing\":225},{\"time\":1773939600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.26,\"apparentTemperature\":34.25,\"dewPoint\":22.05,\"humidity\":0.48,\"pressure\":1024.24,\"windSpeed\":8.94,\"windGust\":13.18,\"windBearing\":170,\"cloudCover\":0.51,\"uvIndex\":5.06,\"visibility\":10.0,\"ozone\":405.51,\"nearestStormDistance\":146.62,\"nearestStormBearing\":233},{\"time\":1773943200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.45,\"apparentTemperature\":34.84,\"dewPoint\":22.82,\"humidity\":0.47,\"pressure\":1023.43,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":5.42,\"visibility\":10.0,\"ozone\":404.17,\"nearestStormDistance\":145.3,\"nearestStormBearing\":240},{\"time\":1773946800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.19,\"apparentTemperature\":35.74,\"dewPoint\":23.4,\"humidity\":0.47,\"pressure\":1023.23,\"windSpeed\":10.72,\"windGust\":14.74,\"windBearing\":170,\"cloudCover\":0.39,\"uvIndex\":4.9,\"visibility\":10.0,\"ozone\":399.76,\"nearestStormDistance\":124.91,\"nearestStormBearing\":243},{\"time\":1773950400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.46,\"apparentTemperature\":36.07,\"dewPoint\":24.39,\"humidity\":0.48,\"pressure\":1023.08,\"windSpeed\":11.62,\"windGust\":14.97,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":3.89,\"visibility\":10.0,\"ozone\":398.15,\"nearestStormDistance\":129.62,\"nearestStormBearing\":225},{\"time\":1773954000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.73,\"apparentTemperature\":36.01,\"dewPoint\":24.93,\"humidity\":0.49,\"pressure\":1022.57,\"windSpeed\":11.62,\"windGust\":15.86,\"windBearing\":160,\"cloudCover\":0.4,\"uvIndex\":2.57,\"visibility\":10.0,\"ozone\":397.86,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1773957600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.23,\"apparentTemperature\":36.99,\"dewPoint\":25.27,\"humidity\":0.5,\"pressure\":1022.38,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":160,\"cloudCover\":0.45,\"uvIndex\":1.25,\"visibility\":10.0,\"ozone\":398.76,\"nearestStormDistance\":93.81,\"nearestStormBearing\":243},{\"time\":1773961200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.05,\"apparentTemperature\":37.56,\"dewPoint\":26.82,\"humidity\":0.52,\"pressure\":1022.34,\"windSpeed\":9.83,\"windGust\":12.73,\"windBearing\":160,\"cloudCover\":0.39,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":401.36,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1773964800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.14,\"apparentTemperature\":37.63,\"dewPoint\":28.24,\"humidity\":0.55,\"pressure\":1022.62,\"windSpeed\":8.94,\"windGust\":11.62,\"windBearing\":160,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.26,\"nearestStormDistance\":90.27,\"nearestStormBearing\":201},{\"time\":1773968400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":37.85,\"dewPoint\":29.77,\"humidity\":0.59,\"pressure\":1022.45,\"windSpeed\":8.04,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":143.65,\"nearestStormBearing\":159},{\"time\":1773972000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.93,\"apparentTemperature\":38.41,\"dewPoint\":29.93,\"humidity\":0.6,\"pressure\":1021.95,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":180,\"cloudCover\":0.36,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.62,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773975600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.84,\"apparentTemperature\":38.93,\"dewPoint\":30.92,\"humidity\":0.61,\"pressure\":1022.17,\"windSpeed\":7.15,\"windGust\":9.38,\"windBearing\":190,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.73,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773979200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.11,\"apparentTemperature\":39.09,\"dewPoint\":31.23,\"humidity\":0.63,\"pressure\":1022.29,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":200,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":405.77,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1773982800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":39.15,\"dewPoint\":31.35,\"humidity\":0.64,\"pressure\":1021.96,\"windSpeed\":6.26,\"windGust\":8.27,\"windBearing\":220,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.51,\"nearestStormDistance\":252.47,\"nearestStormBearing\":145},{\"time\":1773986400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.17,\"apparentTemperature\":39.18,\"dewPoint\":31.48,\"humidity\":0.64,\"pressure\":1021.54,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":230,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":403.63,\"nearestStormDistance\":283.51,\"nearestStormBearing\":149},{\"time\":1773990000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.0,\"apparentTemperature\":38.94,\"dewPoint\":31.72,\"humidity\":0.65,\"pressure\":1021.22,\"windSpeed\":5.96,\"windGust\":8.19,\"windBearing\":235,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.56,\"nearestStormDistance\":335.93,\"nearestStormBearing\":150},{\"time\":1773993600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.84,\"apparentTemperature\":38.69,\"dewPoint\":31.96,\"humidity\":0.66,\"pressure\":1021.39,\"windSpeed\":5.66,\"windGust\":7.89,\"windBearing\":240,\"cloudCover\":0.48,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.77,\"nearestStormDistance\":267.07,\"nearestStormBearing\":161},{\"time\":1773997200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.68,\"apparentTemperature\":38.44,\"dewPoint\":32.2,\"humidity\":0.68,\"pressure\":1021.25,\"windSpeed\":5.36,\"windGust\":7.6,\"windBearing\":245,\"cloudCover\":0.44,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":388.23,\"nearestStormBearing\":33},{\"time\":1774000800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.51,\"apparentTemperature\":38.2,\"dewPoint\":32.44,\"humidity\":0.69,\"pressure\":1021.74,\"windSpeed\":5.06,\"windGust\":7.3,\"windBearing\":250,\"cloudCover\":0.41,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.47,\"nearestStormDistance\":368.02,\"nearestStormBearing\":206},{\"time\":1774004400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.35,\"apparentTemperature\":37.95,\"dewPoint\":32.68,\"humidity\":0.7,\"pressure\":1021.6,\"windSpeed\":4.77,\"windGust\":7.0,\"windBearing\":255,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.13,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774008000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.18,\"apparentTemperature\":37.71,\"dewPoint\":32.92,\"humidity\":0.71,\"pressure\":1021.73,\"windSpeed\":4.47,\"windGust\":6.7,\"windBearing\":260,\"cloudCover\":0.35,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":397.97,\"nearestStormDistance\":421.2,\"nearestStormBearing\":218},{\"time\":1774011600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.57,\"apparentTemperature\":39.55,\"dewPoint\":32.76,\"humidity\":0.69,\"pressure\":1021.52,\"windSpeed\":5.55,\"windGust\":7.6,\"windBearing\":248,\"cloudCover\":0.39,\"uvIndex\":1.13,\"visibility\":10.0,\"ozone\":395.53,\"nearestStormDistance\":367.17,\"nearestStormBearing\":214},{\"time\":1774015200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":43.95,\"apparentTemperature\":41.39,\"dewPoint\":32.59,\"humidity\":0.66,\"pressure\":1020.51,\"windSpeed\":6.64,\"windGust\":8.49,\"windBearing\":236,\"cloudCover\":0.44,\"uvIndex\":2.44,\"visibility\":10.0,\"ozone\":395.04,\"nearestStormDistance\":299.32,\"nearestStormBearing\":209},{\"time\":1774018800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.34,\"apparentTemperature\":43.23,\"dewPoint\":32.43,\"humidity\":0.64,\"pressure\":1020.97,\"windSpeed\":7.72,\"windGust\":9.38,\"windBearing\":224,\"cloudCover\":0.48,\"uvIndex\":3.72,\"visibility\":10.0,\"ozone\":394.63,\"nearestStormDistance\":270.38,\"nearestStormBearing\":201},{\"time\":1774022400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.73,\"apparentTemperature\":45.08,\"dewPoint\":33.12,\"humidity\":0.61,\"pressure\":1020.41,\"windSpeed\":8.81,\"windGust\":11.47,\"windBearing\":212,\"cloudCover\":0.53,\"uvIndex\":4.44,\"visibility\":10.0,\"ozone\":395.99,\"nearestStormDistance\":243.43,\"nearestStormBearing\":188},{\"time\":1774026000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.11,\"apparentTemperature\":46.92,\"dewPoint\":33.8,\"humidity\":0.59,\"pressure\":1019.22,\"windSpeed\":9.89,\"windGust\":13.55,\"windBearing\":200,\"cloudCover\":0.57,\"uvIndex\":4.4,\"visibility\":10.0,\"ozone\":396.23,\"nearestStormDistance\":242.1,\"nearestStormBearing\":180},{\"time\":1774029600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.5,\"apparentTemperature\":48.76,\"dewPoint\":34.48,\"humidity\":0.56,\"pressure\":1017.07,\"windSpeed\":10.98,\"windGust\":15.64,\"windBearing\":189,\"cloudCover\":0.62,\"uvIndex\":5.15,\"visibility\":10.0,\"ozone\":395.58,\"nearestStormDistance\":222.48,\"nearestStormBearing\":219},{\"time\":1774033200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.89,\"apparentTemperature\":50.61,\"dewPoint\":34.78,\"humidity\":0.54,\"pressure\":1017.31,\"windSpeed\":12.06,\"windGust\":17.13,\"windBearing\":177,\"cloudCover\":0.66,\"uvIndex\":4.74,\"visibility\":10.0,\"ozone\":396.7,\"nearestStormDistance\":152.64,\"nearestStormBearing\":212},{\"time\":1774036800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.45,\"apparentTemperature\":51.14,\"dewPoint\":35.07,\"humidity\":0.54,\"pressure\":1016.48,\"windSpeed\":13.4,\"windGust\":18.62,\"windBearing\":173,\"cloudCover\":0.71,\"uvIndex\":3.84,\"visibility\":10.0,\"ozone\":399.67,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774040400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.02,\"apparentTemperature\":51.67,\"dewPoint\":35.37,\"humidity\":0.54,\"pressure\":1015.65,\"windSpeed\":14.74,\"windGust\":20.11,\"windBearing\":170,\"cloudCover\":0.75,\"uvIndex\":2.41,\"visibility\":10.0,\"ozone\":398.36,\"nearestStormDistance\":155.63,\"nearestStormBearing\":180},{\"time\":1774044000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.89,\"apparentTemperature\":51.63,\"dewPoint\":36.12,\"humidity\":0.55,\"pressure\":1015.28,\"windSpeed\":14.89,\"windGust\":19.96,\"windBearing\":173,\"cloudCover\":0.79,\"uvIndex\":1.18,\"visibility\":10.0,\"ozone\":397.25,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774047600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.76,\"apparentTemperature\":51.58,\"dewPoint\":36.87,\"humidity\":0.57,\"pressure\":1014.9,\"windSpeed\":15.04,\"windGust\":19.81,\"windBearing\":177,\"cloudCover\":0.84,\"uvIndex\":0.26,\"visibility\":10.0,\"ozone\":396.55,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774051200,\"summary\":\"Breezy + and Overcast\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.64,\"apparentTemperature\":51.53,\"dewPoint\":37.62,\"humidity\":0.58,\"pressure\":1014.53,\"windSpeed\":15.19,\"windGust\":19.66,\"windBearing\":180,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.51,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774054800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.005,\"precipProbability\":0.23,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.005,\"precipType\":\"rain\",\"temperature\":51.51,\"apparentTemperature\":51.42,\"dewPoint\":38.17,\"humidity\":0.6,\"pressure\":1014.45,\"windSpeed\":14.89,\"windGust\":19.14,\"windBearing\":183,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.14,\"nearestStormDistance\":70.38,\"nearestStormBearing\":194},{\"time\":1774058400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.36,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.39,\"apparentTemperature\":51.31,\"dewPoint\":38.72,\"humidity\":0.61,\"pressure\":1014.37,\"windSpeed\":14.6,\"windGust\":18.62,\"windBearing\":187,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.49,\"nearestStormDistance\":52.24,\"nearestStormBearing\":236},{\"time\":1774062000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":51.26,\"apparentTemperature\":51.21,\"dewPoint\":39.27,\"humidity\":0.63,\"pressure\":1014.29,\"windSpeed\":14.3,\"windGust\":18.1,\"windBearing\":190,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.47,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774065600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.85,\"apparentTemperature\":50.86,\"dewPoint\":40.07,\"humidity\":0.66,\"pressure\":1013.54,\"windSpeed\":13.7,\"windGust\":17.72,\"windBearing\":193,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":8.37,\"ozone\":387.75,\"nearestStormDistance\":21.68,\"nearestStormBearing\":135},{\"time\":1774069200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.43,\"apparentTemperature\":50.51,\"dewPoint\":40.87,\"humidity\":0.68,\"pressure\":1012.8,\"windSpeed\":13.11,\"windGust\":17.35,\"windBearing\":197,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":6.66,\"ozone\":386.72,\"nearestStormDistance\":13.1,\"nearestStormBearing\":270},{\"time\":1774072800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.02,\"apparentTemperature\":50.16,\"dewPoint\":41.67,\"humidity\":0.71,\"pressure\":1012.06,\"windSpeed\":12.51,\"windGust\":16.98,\"windBearing\":200,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":4.95,\"ozone\":385.37,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774076400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0178,\"precipProbability\":0.49,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0178,\"precipType\":\"rain\",\"temperature\":49.72,\"apparentTemperature\":48.34,\"dewPoint\":41.97,\"humidity\":0.73,\"pressure\":1011.54,\"windSpeed\":11.91,\"windGust\":16.31,\"windBearing\":200,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":3.78,\"ozone\":383.4,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774080000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0206,\"precipProbability\":0.48,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0206,\"precipType\":\"rain\",\"temperature\":49.42,\"apparentTemperature\":46.51,\"dewPoint\":42.27,\"humidity\":0.76,\"pressure\":1011.01,\"windSpeed\":11.32,\"windGust\":15.64,\"windBearing\":200,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":2.6,\"ozone\":384.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774083600,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.12,\"apparentTemperature\":44.69,\"dewPoint\":42.57,\"humidity\":0.78,\"pressure\":1010.48,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":200,\"cloudCover\":0.75,\"uvIndex\":0.0,\"visibility\":1.43,\"ozone\":385.86,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774087200,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.02,\"apparentTemperature\":44.7,\"dewPoint\":42.77,\"humidity\":0.78,\"pressure\":1010.63,\"windSpeed\":10.43,\"windGust\":14.6,\"windBearing\":213,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":1.64,\"ozone\":388.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774090800,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.93,\"apparentTemperature\":44.7,\"dewPoint\":42.97,\"humidity\":0.79,\"pressure\":1010.77,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":227,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":1.86,\"ozone\":391.55,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774094400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.83,\"apparentTemperature\":44.71,\"dewPoint\":43.18,\"humidity\":0.79,\"pressure\":1010.92,\"windSpeed\":9.83,\"windGust\":13.85,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":0.02,\"visibility\":2.07,\"ozone\":393.68,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774098000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0161,\"precipProbability\":0.36,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0161,\"precipType\":\"rain\",\"temperature\":49.53,\"apparentTemperature\":46.62,\"dewPoint\":42.64,\"humidity\":0.76,\"pressure\":1010.95,\"windSpeed\":10.13,\"windGust\":14.45,\"windBearing\":263,\"cloudCover\":0.63,\"uvIndex\":0.24,\"visibility\":4.32,\"ozone\":397.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774101600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0089,\"precipProbability\":0.25,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0089,\"precipType\":\"rain\",\"temperature\":50.23,\"apparentTemperature\":48.54,\"dewPoint\":42.11,\"humidity\":0.74,\"pressure\":1010.98,\"windSpeed\":10.43,\"windGust\":15.04,\"windBearing\":287,\"cloudCover\":0.56,\"uvIndex\":0.42,\"visibility\":6.57,\"ozone\":397.24,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774105200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":50.94,\"apparentTemperature\":50.45,\"dewPoint\":41.58,\"humidity\":0.71,\"pressure\":1011.01,\"windSpeed\":10.72,\"windGust\":15.64,\"windBearing\":310,\"cloudCover\":0.5,\"uvIndex\":0.63,\"visibility\":8.83,\"ozone\":395.11,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774108800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":52.2,\"apparentTemperature\":52.06,\"dewPoint\":41.38,\"humidity\":0.67,\"pressure\":1010.65,\"windSpeed\":11.02,\"windGust\":16.31,\"windBearing\":313,\"cloudCover\":0.52,\"uvIndex\":1.47,\"visibility\":9.25,\"ozone\":393.52,\"nearestStormDistance\":21.71,\"nearestStormBearing\":45},{\"time\":1774112400,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":53.46,\"apparentTemperature\":53.67,\"dewPoint\":41.18,\"humidity\":0.63,\"pressure\":1010.29,\"windSpeed\":11.32,\"windGust\":16.98,\"windBearing\":317,\"cloudCover\":0.53,\"uvIndex\":2.39,\"visibility\":9.68,\"ozone\":392.9,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774116000,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":54.72,\"apparentTemperature\":55.27,\"dewPoint\":40.98,\"humidity\":0.59,\"pressure\":1009.93,\"windSpeed\":11.62,\"windGust\":17.65,\"windBearing\":320,\"cloudCover\":0.55,\"uvIndex\":2.96,\"visibility\":10.0,\"ozone\":389.31,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774119600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0011,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0011,\"precipType\":\"rain\",\"temperature\":55.35,\"apparentTemperature\":55.87,\"dewPoint\":40.52,\"humidity\":0.57,\"pressure\":1009.52,\"windSpeed\":11.91,\"windGust\":17.8,\"windBearing\":317,\"cloudCover\":0.54,\"uvIndex\":3.98,\"visibility\":10.0,\"ozone\":381.62,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774123200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0006,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0006,\"precipType\":\"rain\",\"temperature\":55.99,\"apparentTemperature\":56.47,\"dewPoint\":40.06,\"humidity\":0.55,\"pressure\":1009.1,\"windSpeed\":12.21,\"windGust\":17.95,\"windBearing\":313,\"cloudCover\":0.54,\"uvIndex\":3.39,\"visibility\":10.0,\"ozone\":376.35,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774126800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":56.62,\"apparentTemperature\":57.07,\"dewPoint\":39.6,\"humidity\":0.53,\"pressure\":1008.68,\"windSpeed\":12.51,\"windGust\":18.1,\"windBearing\":310,\"cloudCover\":0.53,\"uvIndex\":1.41,\"visibility\":10.0,\"ozone\":370.1,\"nearestStormDistance\":62.95,\"nearestStormBearing\":63},{\"time\":1774130400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.78,\"apparentTemperature\":56.1,\"dewPoint\":39.3,\"humidity\":0.54,\"pressure\":1009.0,\"windSpeed\":12.21,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.52,\"uvIndex\":0.54,\"visibility\":10.0,\"ozone\":364.83,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774134000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.93,\"apparentTemperature\":55.12,\"dewPoint\":39.01,\"humidity\":0.55,\"pressure\":1009.32,\"windSpeed\":11.91,\"windGust\":16.46,\"windBearing\":297,\"cloudCover\":0.51,\"uvIndex\":0.22,\"visibility\":10.0,\"ozone\":363.13,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774137600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.09,\"apparentTemperature\":54.14,\"dewPoint\":38.71,\"humidity\":0.56,\"pressure\":1009.64,\"windSpeed\":11.62,\"windGust\":15.64,\"windBearing\":290,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":359.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774141200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.09,\"apparentTemperature\":53.19,\"dewPoint\":39.06,\"humidity\":0.59,\"pressure\":1009.55,\"windSpeed\":11.02,\"windGust\":14.6,\"windBearing\":253,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":356.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774144800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.09,\"apparentTemperature\":52.23,\"dewPoint\":39.41,\"humidity\":0.62,\"pressure\":1009.46,\"windSpeed\":10.43,\"windGust\":13.55,\"windBearing\":217,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":354.23,\"nearestStormDistance\":168.25,\"nearestStormBearing\":59},{\"time\":1774148400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.1,\"apparentTemperature\":51.28,\"dewPoint\":39.76,\"humidity\":0.65,\"pressure\":1009.36,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":180,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.08,\"nearestStormDistance\":226.79,\"nearestStormBearing\":47},{\"time\":1774152000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.38,\"apparentTemperature\":49.3,\"dewPoint\":39.79,\"humidity\":0.66,\"pressure\":1008.94,\"windSpeed\":9.53,\"windGust\":12.29,\"windBearing\":193,\"cloudCover\":0.68,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":349.54,\"nearestStormDistance\":253.21,\"nearestStormBearing\":59},{\"time\":1774155600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.66,\"apparentTemperature\":47.33,\"dewPoint\":39.83,\"humidity\":0.68,\"pressure\":1008.52,\"windSpeed\":9.23,\"windGust\":12.06,\"windBearing\":207,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.8,\"nearestStormDistance\":264.46,\"nearestStormBearing\":56},{\"time\":1774159200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.94,\"apparentTemperature\":45.36,\"dewPoint\":39.87,\"humidity\":0.69,\"pressure\":1008.1,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":220,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":345.5,\"nearestStormDistance\":245.1,\"nearestStormBearing\":192},{\"time\":1774162800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.07,\"apparentTemperature\":45.39,\"dewPoint\":40.41,\"humidity\":0.71,\"pressure\":1007.39,\"windSpeed\":8.94,\"windGust\":12.14,\"windBearing\":227,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":342.51,\"nearestStormDistance\":278.62,\"nearestStormBearing\":208},{\"time\":1774166400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.2,\"apparentTemperature\":45.42,\"dewPoint\":40.96,\"humidity\":0.73,\"pressure\":1006.69,\"windSpeed\":8.94,\"windGust\":12.44,\"windBearing\":233,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":338.56,\"nearestStormDistance\":258.01,\"nearestStormBearing\":206},{\"time\":1774170000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.33,\"apparentTemperature\":45.45,\"dewPoint\":41.5,\"humidity\":0.75,\"pressure\":1005.98,\"windSpeed\":8.94,\"windGust\":12.73,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":334.91,\"nearestStormDistance\":215.43,\"nearestStormBearing\":225},{\"time\":1774173600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.3,\"apparentTemperature\":45.42,\"dewPoint\":41.71,\"humidity\":0.75,\"pressure\":1005.95,\"windSpeed\":9.23,\"windGust\":12.66,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.76,\"nearestStormDistance\":189.33,\"nearestStormBearing\":210},{\"time\":1774177200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.27,\"apparentTemperature\":45.4,\"dewPoint\":41.92,\"humidity\":0.75,\"pressure\":1005.91,\"windSpeed\":9.53,\"windGust\":12.58,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.24,\"nearestStormDistance\":177.17,\"nearestStormBearing\":196},{\"time\":1774180800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.24,\"apparentTemperature\":45.37,\"dewPoint\":42.13,\"humidity\":0.75,\"pressure\":1005.87,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":330.76,\"nearestStormDistance\":160.35,\"nearestStormBearing\":198},{\"time\":1774184400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.6,\"apparentTemperature\":47.97,\"dewPoint\":41.78,\"humidity\":0.71,\"pressure\":1005.69,\"windSpeed\":10.43,\"windGust\":13.78,\"windBearing\":240,\"cloudCover\":0.73,\"uvIndex\":1.05,\"visibility\":10.0,\"ozone\":328.48,\"nearestStormDistance\":194.91,\"nearestStormBearing\":214},{\"time\":1774188000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.96,\"apparentTemperature\":50.57,\"dewPoint\":41.43,\"humidity\":0.68,\"pressure\":1005.51,\"windSpeed\":11.02,\"windGust\":15.04,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":2.17,\"visibility\":10.0,\"ozone\":328.87,\"nearestStormDistance\":209.08,\"nearestStormBearing\":189},{\"time\":1774191600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.31,\"apparentTemperature\":53.17,\"dewPoint\":41.07,\"humidity\":0.64,\"pressure\":1005.33,\"windSpeed\":11.62,\"windGust\":16.31,\"windBearing\":240,\"cloudCover\":0.64,\"uvIndex\":3.41,\"visibility\":10.0,\"ozone\":328.31,\"nearestStormDistance\":246.92,\"nearestStormBearing\":148},{\"time\":1774195200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.26,\"apparentTemperature\":55.17,\"dewPoint\":41.19,\"humidity\":0.6,\"pressure\":1005.07,\"windSpeed\":12.21,\"windGust\":17.57,\"windBearing\":243,\"cloudCover\":0.65,\"uvIndex\":4.25,\"visibility\":10.0,\"ozone\":325.51,\"nearestStormDistance\":179.84,\"nearestStormBearing\":217},{\"time\":1774198800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.2,\"apparentTemperature\":57.16,\"dewPoint\":41.31,\"humidity\":0.57,\"pressure\":1004.81,\"windSpeed\":12.81,\"windGust\":18.84,\"windBearing\":247,\"cloudCover\":0.66,\"uvIndex\":4.83,\"visibility\":10.0,\"ozone\":324.7,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774202400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.14,\"apparentTemperature\":59.16,\"dewPoint\":41.43,\"humidity\":0.53,\"pressure\":1004.55,\"windSpeed\":13.4,\"windGust\":20.11,\"windBearing\":250,\"cloudCover\":0.67,\"uvIndex\":5.55,\"visibility\":10.0,\"ozone\":324.95,\"nearestStormDistance\":227.48,\"nearestStormBearing\":119},{\"time\":1774206000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.39,\"apparentTemperature\":59.37,\"dewPoint\":41.45,\"humidity\":0.52,\"pressure\":1005.49,\"windSpeed\":13.93,\"windGust\":20.4,\"windBearing\":260,\"cloudCover\":0.69,\"uvIndex\":4.84,\"visibility\":10.0,\"ozone\":321.6,\"nearestStormDistance\":176.23,\"nearestStormBearing\":241},{\"time\":1774209600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.64,\"apparentTemperature\":59.57,\"dewPoint\":41.47,\"humidity\":0.51,\"pressure\":1006.43,\"windSpeed\":14.45,\"windGust\":20.7,\"windBearing\":270,\"cloudCover\":0.72,\"uvIndex\":3.74,\"visibility\":10.0,\"ozone\":321.19,\"nearestStormDistance\":122.3,\"nearestStormBearing\":219},{\"time\":1774213200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0154,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.88,\"apparentTemperature\":59.77,\"dewPoint\":41.49,\"humidity\":0.5,\"pressure\":1007.38,\"windSpeed\":14.97,\"windGust\":21.0,\"windBearing\":280,\"cloudCover\":0.74,\"uvIndex\":2.67,\"visibility\":10.0,\"ozone\":318.76,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774216800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.05,\"apparentTemperature\":59.0,\"dewPoint\":41.39,\"humidity\":0.51,\"pressure\":1009.18,\"windSpeed\":15.12,\"windGust\":20.55,\"windBearing\":290,\"cloudCover\":0.75,\"uvIndex\":1.36,\"visibility\":10.0,\"ozone\":317.64,\"nearestStormDistance\":103.76,\"nearestStormBearing\":180},{\"time\":1774220400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0209,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":58.21,\"apparentTemperature\":58.23,\"dewPoint\":41.29,\"humidity\":0.53,\"pressure\":1010.99,\"windSpeed\":15.27,\"windGust\":20.11,\"windBearing\":300,\"cloudCover\":0.75,\"uvIndex\":0.35,\"visibility\":10.0,\"ozone\":315.61,\"nearestStormDistance\":86.46,\"nearestStormBearing\":180},{\"time\":1774224000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0236,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.38,\"apparentTemperature\":57.45,\"dewPoint\":41.2,\"humidity\":0.54,\"pressure\":1012.8,\"windSpeed\":15.41,\"windGust\":19.66,\"windBearing\":310,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":314.16,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1774227600,\"summary\":\"Possible + Drizzle and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0033,\"precipProbability\":0.23,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0033,\"precipType\":\"rain\",\"temperature\":55.75,\"apparentTemperature\":55.71,\"dewPoint\":40.65,\"humidity\":0.56,\"pressure\":1014.28,\"windSpeed\":15.34,\"windGust\":19.51,\"windBearing\":320,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":312.5,\"nearestStormDistance\":64.95,\"nearestStormBearing\":225},{\"time\":1774231200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0067,\"precipProbability\":0.25,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0067,\"precipType\":\"rain\",\"temperature\":54.13,\"apparentTemperature\":53.96,\"dewPoint\":40.11,\"humidity\":0.59,\"pressure\":1015.75,\"windSpeed\":15.27,\"windGust\":19.36,\"windBearing\":330,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":310.26,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774234800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":52.5,\"apparentTemperature\":52.21,\"dewPoint\":39.56,\"humidity\":0.61,\"pressure\":1017.23,\"windSpeed\":15.19,\"windGust\":19.21,\"windBearing\":340,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":308.09,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774238400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.015,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.25,\"apparentTemperature\":49.24,\"dewPoint\":38.65,\"humidity\":0.62,\"pressure\":1018.56,\"windSpeed\":14.89,\"windGust\":18.99,\"windBearing\":230,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":306.08,\"nearestStormDistance\":53.49,\"nearestStormBearing\":198},{\"time\":1774242000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":49.99,\"apparentTemperature\":46.26,\"dewPoint\":37.75,\"humidity\":0.62,\"pressure\":1019.9,\"windSpeed\":14.6,\"windGust\":18.77,\"windBearing\":120,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.54,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774245600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0388,\"precipType\":\"snow\",\"temperature\":48.74,\"apparentTemperature\":43.29,\"dewPoint\":36.84,\"humidity\":0.63,\"pressure\":1021.24,\"windSpeed\":14.3,\"windGust\":18.54,\"windBearing\":10,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.66,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774249200,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0106,\"precipProbability\":0.29,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0407,\"precipType\":\"snow\",\"temperature\":47.52,\"apparentTemperature\":41.64,\"dewPoint\":35.52,\"humidity\":0.63,\"pressure\":1022.07,\"windSpeed\":14.6,\"windGust\":18.7,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.84,\"nearestStormDistance\":62.62,\"nearestStormBearing\":116},{\"time\":1774252800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0111,\"precipProbability\":0.3,\"precipIntensityError\":0.0213,\"precipAccumulation\":0.0425,\"precipType\":\"snow\",\"temperature\":46.29,\"apparentTemperature\":40.0,\"dewPoint\":34.2,\"humidity\":0.62,\"pressure\":1022.9,\"windSpeed\":14.89,\"windGust\":18.85,\"windBearing\":10,\"cloudCover\":0.57,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.6,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774256400,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0232,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":45.07,\"apparentTemperature\":38.35,\"dewPoint\":32.88,\"humidity\":0.62,\"pressure\":1023.73,\"windSpeed\":15.19,\"windGust\":19.01,\"windBearing\":10,\"cloudCover\":0.47,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":302.96,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774260000,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":44.04,\"apparentTemperature\":37.11,\"dewPoint\":31.69,\"humidity\":0.61,\"pressure\":1024.84,\"windSpeed\":15.19,\"windGust\":19.53,\"windBearing\":10,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.26,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774263600,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":43.0,\"apparentTemperature\":35.86,\"dewPoint\":30.51,\"humidity\":0.61,\"pressure\":1025.96,\"windSpeed\":15.19,\"windGust\":20.04,\"windBearing\":10,\"cloudCover\":0.56,\"uvIndex\":0.0,\"visibility\":7.22,\"ozone\":304.9,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774267200,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":41.97,\"apparentTemperature\":34.61,\"dewPoint\":29.32,\"humidity\":0.6,\"pressure\":1027.07,\"windSpeed\":15.19,\"windGust\":20.55,\"windBearing\":10,\"cloudCover\":0.6,\"uvIndex\":0.04,\"visibility\":9.35,\"ozone\":305.52,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774270800,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0078,\"precipProbability\":0.26,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0296,\"precipType\":\"snow\",\"temperature\":41.11,\"apparentTemperature\":33.63,\"dewPoint\":27.9,\"humidity\":0.58,\"pressure\":1027.55,\"windSpeed\":15.19,\"windGust\":20.63,\"windBearing\":10,\"cloudCover\":0.62,\"uvIndex\":0.1,\"visibility\":8.57,\"ozone\":306.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774274400,\"summary\":\"Possible + Flurries and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0039,\"precipProbability\":0.21,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0148,\"precipType\":\"snow\",\"temperature\":40.24,\"apparentTemperature\":32.64,\"dewPoint\":26.47,\"humidity\":0.57,\"pressure\":1028.03,\"windSpeed\":15.19,\"windGust\":20.72,\"windBearing\":10,\"cloudCover\":0.65,\"uvIndex\":0.16,\"visibility\":7.79,\"ozone\":307.39,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774278000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":31.66,\"dewPoint\":25.05,\"humidity\":0.55,\"pressure\":1028.51,\"windSpeed\":15.19,\"windGust\":20.8,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.22,\"visibility\":7.01,\"ozone\":308.32,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774281600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.83,\"apparentTemperature\":32.26,\"dewPoint\":24.23,\"humidity\":0.52,\"pressure\":1028.42,\"windSpeed\":14.6,\"windGust\":20.64,\"windBearing\":127,\"cloudCover\":0.61,\"uvIndex\":0.41,\"visibility\":9.67,\"ozone\":309.92,\"nearestStormDistance\":4.37,\"nearestStormBearing\":30},{\"time\":1774285200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.28,\"apparentTemperature\":32.86,\"dewPoint\":23.41,\"humidity\":0.5,\"pressure\":1028.34,\"windSpeed\":14.0,\"windGust\":20.49,\"windBearing\":243,\"cloudCover\":0.54,\"uvIndex\":0.6,\"visibility\":10.0,\"ozone\":311.51,\"nearestStormDistance\":8.73,\"nearestStormBearing\":60},{\"time\":1774288800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.73,\"apparentTemperature\":33.46,\"dewPoint\":22.59,\"humidity\":0.47,\"pressure\":1028.26,\"windSpeed\":13.4,\"windGust\":20.33,\"windBearing\":0,\"cloudCover\":0.48,\"uvIndex\":0.78,\"visibility\":10.0,\"ozone\":313.1,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774292400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.19,\"apparentTemperature\":34.12,\"dewPoint\":22.07,\"humidity\":0.45,\"pressure\":1028.2,\"windSpeed\":13.55,\"windGust\":20.25,\"windBearing\":357,\"cloudCover\":0.44,\"uvIndex\":1.15,\"visibility\":10.0,\"ozone\":315.84,\"nearestStormDistance\":28.08,\"nearestStormBearing\":131},{\"time\":1774296000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.65,\"apparentTemperature\":34.78,\"dewPoint\":21.55,\"humidity\":0.44,\"pressure\":1028.14,\"windSpeed\":13.7,\"windGust\":20.18,\"windBearing\":353,\"cloudCover\":0.39,\"uvIndex\":1.51,\"visibility\":10.0,\"ozone\":318.57,\"nearestStormDistance\":43.07,\"nearestStormBearing\":172},{\"time\":1774299600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.12,\"apparentTemperature\":35.44,\"dewPoint\":21.04,\"humidity\":0.42,\"pressure\":1028.08,\"windSpeed\":13.85,\"windGust\":20.11,\"windBearing\":350,\"cloudCover\":0.35,\"uvIndex\":1.88,\"visibility\":10.0,\"ozone\":321.3,\"nearestStormDistance\":58.05,\"nearestStormBearing\":213},{\"time\":1774303200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.09,\"apparentTemperature\":35.34,\"dewPoint\":20.79,\"humidity\":0.42,\"pressure\":1028.61,\"windSpeed\":13.78,\"windGust\":18.99,\"windBearing\":350,\"cloudCover\":0.34,\"uvIndex\":1.4,\"visibility\":10.0,\"ozone\":323.19,\"nearestStormDistance\":53.14,\"nearestStormBearing\":217},{\"time\":1774306800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.06,\"apparentTemperature\":35.25,\"dewPoint\":20.53,\"humidity\":0.42,\"pressure\":1029.15,\"windSpeed\":13.7,\"windGust\":17.87,\"windBearing\":350,\"cloudCover\":0.32,\"uvIndex\":0.92,\"visibility\":10.0,\"ozone\":325.07,\"nearestStormDistance\":48.24,\"nearestStormBearing\":221},{\"time\":1774310400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.03,\"apparentTemperature\":35.15,\"dewPoint\":20.28,\"humidity\":0.42,\"pressure\":1029.68,\"windSpeed\":13.63,\"windGust\":16.76,\"windBearing\":350,\"cloudCover\":0.31,\"uvIndex\":0.44,\"visibility\":10.0,\"ozone\":326.96,\"nearestStormDistance\":43.33,\"nearestStormBearing\":225},{\"time\":1774314000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.2,\"apparentTemperature\":34.12,\"dewPoint\":20.12,\"humidity\":0.43,\"pressure\":1029.87,\"windSpeed\":13.26,\"windGust\":16.31,\"windBearing\":347,\"cloudCover\":0.26,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":329.73,\"nearestStormDistance\":48.28,\"nearestStormBearing\":258},{\"time\":1774317600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.37,\"apparentTemperature\":33.09,\"dewPoint\":19.96,\"humidity\":0.43,\"pressure\":1030.06,\"windSpeed\":12.88,\"windGust\":15.86,\"windBearing\":343,\"cloudCover\":0.22,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":332.5,\"nearestStormDistance\":53.23,\"nearestStormBearing\":292},{\"time\":1774321200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.54,\"apparentTemperature\":32.05,\"dewPoint\":19.8,\"humidity\":0.44,\"pressure\":1030.25,\"windSpeed\":12.51,\"windGust\":15.41,\"windBearing\":340,\"cloudCover\":0.17,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":335.27,\"nearestStormDistance\":58.19,\"nearestStormBearing\":326},{\"time\":1774324800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":38.71,\"apparentTemperature\":31.07,\"dewPoint\":19.03,\"humidity\":0.44,\"pressure\":1030.44,\"windSpeed\":11.91,\"windGust\":14.97,\"windBearing\":343,\"cloudCover\":0.15,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":340.96,\"nearestStormDistance\":130.35,\"nearestStormBearing\":236},{\"time\":1774328400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.87,\"apparentTemperature\":30.09,\"dewPoint\":18.26,\"humidity\":0.45,\"pressure\":1030.63,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":347,\"cloudCover\":0.12,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.65,\"nearestStormDistance\":202.52,\"nearestStormBearing\":147},{\"time\":1774332000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.04,\"apparentTemperature\":29.1,\"dewPoint\":17.49,\"humidity\":0.45,\"pressure\":1030.81,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.34,\"nearestStormDistance\":274.69,\"nearestStormBearing\":57},{\"time\":1774335600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":36.39,\"apparentTemperature\":28.34,\"dewPoint\":17.37,\"humidity\":0.46,\"pressure\":1030.58,\"windSpeed\":10.72,\"windGust\":13.93,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":360.54,\"nearestStormDistance\":221.96,\"nearestStormBearing\":49},{\"time\":1774339200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.74,\"apparentTemperature\":27.58,\"dewPoint\":17.24,\"humidity\":0.47,\"pressure\":1030.34,\"windSpeed\":10.72,\"windGust\":13.79,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":368.74,\"nearestStormDistance\":169.23,\"nearestStormBearing\":41},{\"time\":1774342800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.1,\"apparentTemperature\":26.82,\"dewPoint\":17.11,\"humidity\":0.48,\"pressure\":1030.11,\"windSpeed\":10.72,\"windGust\":13.65,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":376.94,\"nearestStormDistance\":116.5,\"nearestStormBearing\":33},{\"time\":1774346400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.81,\"apparentTemperature\":26.64,\"dewPoint\":17.42,\"humidity\":0.49,\"pressure\":1029.87,\"windSpeed\":10.72,\"windGust\":13.64,\"windBearing\":233,\"cloudCover\":0.14,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":381.4,\"nearestStormDistance\":165.42,\"nearestStormBearing\":54},{\"time\":1774350000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.52,\"apparentTemperature\":26.47,\"dewPoint\":17.73,\"humidity\":0.49,\"pressure\":1029.64,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":117,\"cloudCover\":0.17,\"uvIndex\":0.07,\"visibility\":10.0,\"ozone\":385.86,\"nearestStormDistance\":214.34,\"nearestStormBearing\":75},{\"time\":1774353600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.23,\"apparentTemperature\":26.29,\"dewPoint\":18.03,\"humidity\":0.5,\"pressure\":1029.4,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":0,\"cloudCover\":0.2,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":390.32,\"nearestStormDistance\":263.26,\"nearestStormBearing\":95},{\"time\":1774357200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.01,\"apparentTemperature\":27.04,\"dewPoint\":17.47,\"humidity\":0.48,\"pressure\":1028.55,\"windSpeed\":10.72,\"windGust\":14.22,\"windBearing\":7,\"cloudCover\":0.26,\"uvIndex\":0.93,\"visibility\":10.0,\"ozone\":393.27,\"nearestStormDistance\":254.65,\"nearestStormBearing\":95},{\"time\":1774360800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.78,\"apparentTemperature\":27.79,\"dewPoint\":16.92,\"humidity\":0.45,\"pressure\":1027.69,\"windSpeed\":10.72,\"windGust\":14.82,\"windBearing\":13,\"cloudCover\":0.33,\"uvIndex\":1.77,\"visibility\":10.0,\"ozone\":396.21,\"nearestStormDistance\":246.03,\"nearestStormBearing\":96},{\"time\":1774364400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":36.55,\"apparentTemperature\":28.54,\"dewPoint\":16.36,\"humidity\":0.43,\"pressure\":1026.83,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":20,\"cloudCover\":0.39,\"uvIndex\":2.6,\"visibility\":10.0,\"ozone\":399.16,\"nearestStormDistance\":237.42,\"nearestStormBearing\":96},{\"time\":1774368000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":37.68,\"apparentTemperature\":29.94,\"dewPoint\":16.6,\"humidity\":0.42,\"pressure\":1025.98,\"windSpeed\":11.24,\"windGust\":16.23,\"windBearing\":60,\"cloudCover\":0.42,\"uvIndex\":3.57,\"visibility\":10.0,\"ozone\":393.36,\"nearestStormDistance\":232.51,\"nearestStormBearing\":94},{\"time\":1774371600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":38.81,\"apparentTemperature\":31.34,\"dewPoint\":16.85,\"humidity\":0.4,\"pressure\":1025.12,\"windSpeed\":11.77,\"windGust\":17.05,\"windBearing\":100,\"cloudCover\":0.46,\"uvIndex\":4.54,\"visibility\":10.0,\"ozone\":387.55,\"nearestStormDistance\":227.6,\"nearestStormBearing\":92},{\"time\":1774375200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.94,\"apparentTemperature\":32.74,\"dewPoint\":17.1,\"humidity\":0.39,\"pressure\":1024.26,\"windSpeed\":12.29,\"windGust\":17.87,\"windBearing\":140,\"cloudCover\":0.49,\"uvIndex\":5.51,\"visibility\":10.0,\"ozone\":381.74,\"nearestStormDistance\":222.68,\"nearestStormBearing\":90},{\"time\":1774378800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.65,\"apparentTemperature\":33.65,\"dewPoint\":17.72,\"humidity\":0.39,\"pressure\":1023.53,\"windSpeed\":12.44,\"windGust\":17.8,\"windBearing\":160,\"cloudCover\":0.52,\"uvIndex\":5.02,\"visibility\":10.0,\"ozone\":380.91,\"nearestStormDistance\":225.08,\"nearestStormBearing\":86},{\"time\":1774382400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.37,\"apparentTemperature\":34.56,\"dewPoint\":18.34,\"humidity\":0.39,\"pressure\":1022.8,\"windSpeed\":12.58,\"windGust\":17.72,\"windBearing\":180,\"cloudCover\":0.56,\"uvIndex\":4.53,\"visibility\":10.0,\"ozone\":380.07,\"nearestStormDistance\":227.47,\"nearestStormBearing\":83},{\"time\":1774386000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.08,\"apparentTemperature\":35.47,\"dewPoint\":18.97,\"humidity\":0.39,\"pressure\":1022.07,\"windSpeed\":12.73,\"windGust\":17.65,\"windBearing\":200,\"cloudCover\":0.59,\"uvIndex\":4.04,\"visibility\":10.0,\"ozone\":379.24,\"nearestStormDistance\":229.86,\"nearestStormBearing\":79},{\"time\":1774389600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.03,\"apparentTemperature\":35.61,\"dewPoint\":19.71,\"humidity\":0.4,\"pressure\":1021.34,\"windSpeed\":12.51,\"windGust\":17.05,\"windBearing\":200,\"cloudCover\":0.58,\"uvIndex\":2.89,\"visibility\":10.0,\"ozone\":380.33,\"nearestStormDistance\":301.76,\"nearestStormBearing\":122},{\"time\":1774393200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.98,\"apparentTemperature\":35.75,\"dewPoint\":20.46,\"humidity\":0.42,\"pressure\":1020.61,\"windSpeed\":12.29,\"windGust\":16.46,\"windBearing\":200,\"cloudCover\":0.56,\"uvIndex\":1.74,\"visibility\":10.0,\"ozone\":381.42,\"nearestStormDistance\":373.66,\"nearestStormBearing\":165},{\"time\":1774396800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.94,\"apparentTemperature\":35.89,\"dewPoint\":21.2,\"humidity\":0.43,\"pressure\":1019.88,\"windSpeed\":12.06,\"windGust\":15.86,\"windBearing\":200,\"cloudCover\":0.55,\"uvIndex\":0.59,\"visibility\":10.0,\"ozone\":382.51,\"nearestStormDistance\":445.56,\"nearestStormBearing\":208},{\"time\":1774400400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.82,\"apparentTemperature\":35.65,\"dewPoint\":22.16,\"humidity\":0.45,\"pressure\":1019.97,\"windSpeed\":11.69,\"windGust\":15.19,\"windBearing\":203,\"cloudCover\":0.56,\"uvIndex\":0.39,\"visibility\":10.0,\"ozone\":385.23,\"nearestStormDistance\":426.54,\"nearestStormBearing\":208},{\"time\":1774404000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.7,\"apparentTemperature\":35.41,\"dewPoint\":23.12,\"humidity\":0.48,\"pressure\":1020.07,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":207,\"cloudCover\":0.58,\"uvIndex\":0.2,\"visibility\":10.0,\"ozone\":387.94,\"nearestStormDistance\":407.53,\"nearestStormBearing\":207},{\"time\":1774407600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.58,\"apparentTemperature\":35.17,\"dewPoint\":24.08,\"humidity\":0.5,\"pressure\":1020.16,\"windSpeed\":10.95,\"windGust\":13.85,\"windBearing\":210,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.66,\"nearestStormDistance\":388.51,\"nearestStormBearing\":207},{\"time\":1774411200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.29,\"apparentTemperature\":34.82,\"dewPoint\":24.87,\"humidity\":0.52,\"pressure\":1020.25,\"windSpeed\":10.79,\"windGust\":13.84,\"windBearing\":217,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.22,\"nearestStormDistance\":380.31,\"nearestStormBearing\":206},{\"time\":1774414800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.01,\"apparentTemperature\":34.47,\"dewPoint\":25.66,\"humidity\":0.53,\"pressure\":1020.35,\"windSpeed\":10.63,\"windGust\":13.83,\"windBearing\":223,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.78,\"nearestStormDistance\":372.11,\"nearestStormBearing\":205},{\"time\":1774418400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.72,\"apparentTemperature\":34.12,\"dewPoint\":26.46,\"humidity\":0.55,\"pressure\":1020.44,\"windSpeed\":10.47,\"windGust\":13.82,\"windBearing\":230,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":398.33,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774422000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.43,\"apparentTemperature\":33.75,\"dewPoint\":26.76,\"humidity\":0.57,\"pressure\":1020.61,\"windSpeed\":10.31,\"windGust\":13.81,\"windBearing\":237,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.56,\"nearestStormDistance\":342.85,\"nearestStormBearing\":190},{\"time\":1774425600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.15,\"apparentTemperature\":33.38,\"dewPoint\":27.07,\"humidity\":0.58,\"pressure\":1020.77,\"windSpeed\":10.15,\"windGust\":13.8,\"windBearing\":243,\"cloudCover\":0.69,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.78,\"nearestStormDistance\":321.78,\"nearestStormBearing\":177},{\"time\":1774429200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.86,\"apparentTemperature\":33.01,\"dewPoint\":27.37,\"humidity\":0.6,\"pressure\":1020.93,\"windSpeed\":9.99,\"windGust\":13.79,\"windBearing\":250,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.01,\"nearestStormDistance\":300.72,\"nearestStormBearing\":163},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.58,\"apparentTemperature\":33.27,\"dewPoint\":27.81,\"humidity\":0.62,\"pressure\":1021.1,\"windSpeed\":9.83,\"windGust\":13.78,\"windBearing\":257,\"cloudCover\":0.69,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":407.34,\"nearestStormDistance\":272.51,\"nearestStormBearing\":181},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.65,\"apparentTemperature\":33.54,\"dewPoint\":28.24,\"humidity\":0.62,\"pressure\":1021.26,\"windSpeed\":9.83,\"windGust\":13.7,\"windBearing\":263,\"cloudCover\":0.69,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":412.67,\"nearestStormDistance\":244.31,\"nearestStormBearing\":198},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.72,\"apparentTemperature\":33.8,\"dewPoint\":28.67,\"humidity\":0.63,\"pressure\":1021.42,\"windSpeed\":9.83,\"windGust\":13.63,\"windBearing\":270,\"cloudCover\":0.68,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":418.0,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.74,\"apparentTemperature\":34.92,\"dewPoint\":28.15,\"humidity\":0.6,\"pressure\":1021.35,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":273,\"cloudCover\":0.67,\"uvIndex\":0.89,\"visibility\":10.0,\"ozone\":417.94,\"nearestStormDistance\":214.18,\"nearestStormBearing\":214},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.76,\"apparentTemperature\":36.03,\"dewPoint\":27.64,\"humidity\":0.57,\"pressure\":1021.27,\"windSpeed\":10.43,\"windGust\":14.82,\"windBearing\":277,\"cloudCover\":0.66,\"uvIndex\":1.68,\"visibility\":10.0,\"ozone\":417.87,\"nearestStormDistance\":212.26,\"nearestStormBearing\":213},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.78,\"apparentTemperature\":37.15,\"dewPoint\":27.12,\"humidity\":0.54,\"pressure\":1021.2,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":280,\"cloudCover\":0.65,\"uvIndex\":2.48,\"visibility\":10.0,\"ozone\":417.81,\"nearestStormDistance\":210.33,\"nearestStormBearing\":212},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":44.07,\"apparentTemperature\":38.64,\"dewPoint\":27.09,\"humidity\":0.51,\"pressure\":1021.12,\"windSpeed\":11.1,\"windGust\":16.08,\"windBearing\":277,\"cloudCover\":0.63,\"uvIndex\":3.46,\"visibility\":10.0,\"ozone\":414.05,\"nearestStormDistance\":193.67,\"nearestStormBearing\":195},{\"time\":1774458000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.35,\"apparentTemperature\":40.12,\"dewPoint\":27.05,\"humidity\":0.49,\"pressure\":1021.04,\"windSpeed\":11.47,\"windGust\":16.76,\"windBearing\":273,\"cloudCover\":0.61,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":410.3,\"nearestStormDistance\":177.01,\"nearestStormBearing\":178},{\"time\":1774461600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.63,\"apparentTemperature\":41.61,\"dewPoint\":27.01,\"humidity\":0.46,\"pressure\":1020.97,\"windSpeed\":11.84,\"windGust\":17.43,\"windBearing\":270,\"cloudCover\":0.59,\"uvIndex\":5.44,\"visibility\":10.0,\"ozone\":406.55,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774465200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":47.34,\"apparentTemperature\":42.34,\"dewPoint\":27.39,\"humidity\":0.45,\"pressure\":1020.84,\"windSpeed\":12.29,\"windGust\":17.57,\"windBearing\":277,\"cloudCover\":0.58,\"uvIndex\":4.94,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774468800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.05,\"apparentTemperature\":43.06,\"dewPoint\":27.76,\"humidity\":0.45,\"pressure\":1020.72,\"windSpeed\":12.73,\"windGust\":17.72,\"windBearing\":283,\"cloudCover\":0.58,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":395.52,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774472400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.76,\"apparentTemperature\":43.79,\"dewPoint\":28.13,\"humidity\":0.44,\"pressure\":1020.6,\"windSpeed\":13.18,\"windGust\":17.87,\"windBearing\":290,\"cloudCover\":0.57,\"uvIndex\":3.95,\"visibility\":10.0,\"ozone\":390.0,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774476000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.36,\"apparentTemperature\":43.41,\"dewPoint\":28.35,\"humidity\":0.45,\"pressure\":1020.48,\"windSpeed\":12.81,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.56,\"uvIndex\":2.84,\"visibility\":10.0,\"ozone\":386.11,\"nearestStormDistance\":237.03,\"nearestStormBearing\":146}]},\"daily\":{\"summary\":\"Mixed + precipitation on Saturday and Monday, with highs reaching 60\xB0F on Sunday.\",\"icon\":\"sleet\",\"data\":[{\"time\":1773806400,\"summary\":\"Mostly + clear until afternoon, returning overnight.\",\"icon\":\"clear-day\",\"sunriseTime\":1773831768,\"sunsetTime\":1773875149,\"moonPhase\":0.98,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773806400,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":35.8,\"temperatureHighTime\":1773871200,\"temperatureLow\":34.03,\"temperatureLowTime\":1773910800,\"apparentTemperatureHigh\":31.89,\"apparentTemperatureHighTime\":1773860400,\"apparentTemperatureLow\":24.89,\"apparentTemperatureLowTime\":1773882000,\"dewPoint\":12.86,\"humidity\":0.43,\"pressure\":1027.89,\"windSpeed\":9.38,\"windGust\":12.08,\"windGustTime\":1773806400,\"windBearing\":210,\"cloudCover\":0.26,\"uvIndex\":5.29,\"uvIndexTime\":1773856800,\"visibility\":10.0,\"temperatureMin\":29.73,\"temperatureMinTime\":1773838800,\"temperatureMax\":35.8,\"temperatureMaxTime\":1773871200,\"apparentTemperatureMin\":18.06,\"apparentTemperatureMinTime\":1773828000,\"apparentTemperatureMax\":31.89,\"apparentTemperatureMaxTime\":1773860400},{\"time\":1773892800,\"summary\":\"Partly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1773918069,\"sunsetTime\":1773961613,\"moonPhase\":0.02,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773892800,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":43.23,\"temperatureHighTime\":1773957600,\"temperatureLow\":41.51,\"temperatureLowTime\":1774000800,\"apparentTemperatureHigh\":35.19,\"apparentTemperatureHighTime\":1773946800,\"apparentTemperatureLow\":33.87,\"apparentTemperatureLowTime\":1773961200,\"dewPoint\":24.05,\"humidity\":0.55,\"pressure\":1024.83,\"windSpeed\":7.33,\"windGust\":9.91,\"windGustTime\":1773954000,\"windBearing\":154,\"cloudCover\":0.44,\"uvIndex\":5.42,\"uvIndexTime\":1773943200,\"visibility\":10.0,\"temperatureMin\":34.03,\"temperatureMinTime\":1773910800,\"temperatureMax\":43.23,\"temperatureMaxTime\":1773957600,\"apparentTemperatureMin\":26.4,\"apparentTemperatureMinTime\":1773910800,\"apparentTemperatureMax\":35.19,\"apparentTemperatureMaxTime\":1773946800},{\"time\":1773979200,\"summary\":\"Light + rain overnight.\",\"icon\":\"rain\",\"sunriseTime\":1774004370,\"sunsetTime\":1774048077,\"moonPhase\":0.05,\"precipIntensity\":0.0013,\"precipIntensityMax\":0.015,\"precipIntensityMaxTime\":1774062000,\"precipProbability\":0.49,\"precipAccumulation\":0.03,\"precipType\":\"rain\",\"temperatureHigh\":52.02,\"temperatureHighTime\":1774040400,\"temperatureLow\":49.02,\"temperatureLowTime\":1774087200,\"apparentTemperatureHigh\":45.07,\"apparentTemperatureHighTime\":1774033200,\"apparentTemperatureLow\":40.62,\"apparentTemperatureLowTime\":1774062000,\"dewPoint\":34.13,\"humidity\":0.62,\"pressure\":1018.82,\"windSpeed\":9.53,\"windGust\":12.8,\"windGustTime\":1774040400,\"windBearing\":210,\"cloudCover\":0.61,\"uvIndex\":5.15,\"uvIndexTime\":1774029600,\"visibility\":10.0,\"temperatureMin\":41.18,\"temperatureMinTime\":1774008000,\"temperatureMax\":52.02,\"temperatureMaxTime\":1774040400,\"apparentTemperatureMin\":34.65,\"apparentTemperatureMinTime\":1773986400,\"apparentTemperatureMax\":45.07,\"apparentTemperatureMaxTime\":1774033200},{\"time\":1774065600,\"summary\":\"Light + rain in the morning.\",\"icon\":\"rain\",\"sunriseTime\":1774090671,\"sunsetTime\":1774134541,\"moonPhase\":0.09,\"precipIntensity\":0.0088,\"precipIntensityMax\":0.0234,\"precipIntensityMaxTime\":1774083600,\"precipProbability\":0.49,\"precipAccumulation\":0.2102,\"precipType\":\"rain\",\"temperatureHigh\":56.62,\"temperatureHighTime\":1774126800,\"temperatureLow\":48.94,\"temperatureLowTime\":1774159200,\"apparentTemperatureHigh\":50.4,\"apparentTemperatureHighTime\":1774126800,\"apparentTemperatureLow\":41.34,\"apparentTemperatureLowTime\":1774159200,\"dewPoint\":40.98,\"humidity\":0.66,\"pressure\":1010.47,\"windSpeed\":11.36,\"windGust\":15.9,\"windGustTime\":1774126800,\"windBearing\":256,\"cloudCover\":0.64,\"uvIndex\":3.98,\"uvIndexTime\":1774119600,\"visibility\":7.17,\"temperatureMin\":48.83,\"temperatureMinTime\":1774094400,\"temperatureMax\":56.62,\"temperatureMaxTime\":1774126800,\"apparentTemperatureMin\":40.67,\"apparentTemperatureMinTime\":1774065600,\"apparentTemperatureMax\":50.4,\"apparentTemperatureMaxTime\":1774126800},{\"time\":1774152000,\"summary\":\"Breezy + in the evening and flurries and rain overnight.\",\"icon\":\"wind\",\"sunriseTime\":1774176971,\"sunsetTime\":1774221005,\"moonPhase\":0.13,\"precipIntensity\":0.0008,\"precipIntensityMax\":0.01,\"precipIntensityMaxTime\":1774234800,\"precipProbability\":0.28,\"precipAccumulation\":0.02,\"precipType\":\"rain\",\"temperatureHigh\":59.88,\"temperatureHighTime\":1774213200,\"temperatureLow\":44.04,\"temperatureLowTime\":1774260000,\"apparentTemperatureHigh\":53.29,\"apparentTemperatureHighTime\":1774202400,\"apparentTemperatureLow\":31.58,\"apparentTemperatureLowTime\":1774260000,\"dewPoint\":41.04,\"humidity\":0.63,\"pressure\":1008.08,\"windSpeed\":12.06,\"windGust\":16.39,\"windGustTime\":1774213200,\"windBearing\":258,\"cloudCover\":0.74,\"uvIndex\":5.55,\"uvIndexTime\":1774202400,\"visibility\":10.0,\"temperatureMin\":48.94,\"temperatureMinTime\":1774159200,\"temperatureMax\":59.88,\"temperatureMaxTime\":1774213200,\"apparentTemperatureMin\":41.34,\"apparentTemperatureMinTime\":1774159200,\"apparentTemperatureMax\":53.29,\"apparentTemperatureMaxTime\":1774202400},{\"time\":1774238400,\"summary\":\"Flurries + and breezy in the morning.\",\"icon\":\"snow\",\"sunriseTime\":1774263272,\"sunsetTime\":1774307468,\"moonPhase\":0.16,\"precipIntensity\":0.0046,\"precipIntensityMax\":0.0117,\"precipIntensityMaxTime\":1774256400,\"precipProbability\":0.31,\"precipAccumulation\":0.364,\"precipType\":\"snow\",\"temperatureHigh\":43.0,\"temperatureHighTime\":1774263600,\"temperatureLow\":34.81,\"temperatureLowTime\":1774346400,\"apparentTemperatureHigh\":30.57,\"apparentTemperatureHighTime\":1774299600,\"apparentTemperatureLow\":23.23,\"apparentTemperatureLowTime\":1774346400,\"dewPoint\":26.8,\"humidity\":0.53,\"pressure\":1026.56,\"windSpeed\":14.27,\"windGust\":19.1,\"windGustTime\":1774278000,\"windBearing\":164,\"cloudCover\":0.5,\"uvIndex\":1.88,\"uvIndexTime\":1774299600,\"visibility\":9.57,\"temperatureMin\":39.38,\"temperatureMinTime\":1774278000,\"temperatureMax\":51.25,\"temperatureMaxTime\":1774238400,\"apparentTemperatureMin\":26.12,\"apparentTemperatureMinTime\":1774278000,\"apparentTemperatureMax\":40.16,\"apparentTemperatureMaxTime\":1774238400},{\"time\":1774324800,\"summary\":\"Partly + cloudy from afternoon until night.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774349573,\"sunsetTime\":1774393932,\"moonPhase\":0.2,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774324800,\"precipProbability\":0.07,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":42.08,\"temperatureHighTime\":1774386000,\"temperatureLow\":39.58,\"temperatureLowTime\":1774432800,\"apparentTemperatureHigh\":34.71,\"apparentTemperatureHighTime\":1774386000,\"apparentTemperatureLow\":29.6,\"apparentTemperatureLowTime\":1774432800,\"dewPoint\":18.61,\"humidity\":0.44,\"pressure\":1025.86,\"windSpeed\":11.43,\"windGust\":15.32,\"windGustTime\":1774375200,\"windBearing\":189,\"cloudCover\":0.36,\"uvIndex\":5.51,\"uvIndexTime\":1774375200,\"visibility\":10.0,\"temperatureMin\":34.23,\"temperatureMinTime\":1774353600,\"temperatureMax\":42.08,\"temperatureMaxTime\":1774386000,\"apparentTemperatureMin\":22.73,\"apparentTemperatureMinTime\":1774353600,\"apparentTemperatureMax\":34.71,\"apparentTemperatureMaxTime\":1774386000},{\"time\":1774411200,\"summary\":\"Mostly + cloudy until afternoon, returning overnight.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774435873,\"sunsetTime\":1774480395,\"moonPhase\":0.24,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774411200,\"precipProbability\":0.12,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":48.76,\"temperatureHighTime\":1774472400,\"temperatureLow\":42.0,\"temperatureLowTime\":1774512000,\"apparentTemperatureHigh\":41.83,\"apparentTemperatureHighTime\":1774472400,\"apparentTemperatureLow\":31.72,\"apparentTemperatureLowTime\":1774512000,\"dewPoint\":27.59,\"humidity\":0.53,\"pressure\":1020.86,\"windSpeed\":11.18,\"windGust\":15.35,\"windGustTime\":1774472400,\"windBearing\":263,\"cloudCover\":0.62,\"uvIndex\":5.44,\"uvIndexTime\":1774461600,\"visibility\":10.0,\"temperatureMin\":39.58,\"temperatureMinTime\":1774432800,\"temperatureMax\":48.76,\"temperatureMaxTime\":1774472400,\"apparentTemperatureMin\":29.6,\"apparentTemperatureMinTime\":1774432800,\"apparentTemperatureMax\":41.83,\"apparentTemperatureMaxTime\":1774472400}]},\"alerts\":[],\"flags\":{\"sources\":[\"ETOPO1\",\"hrrrsubh\",\"rtma_ru\",\"hrrr_0-18\",\"nbm\",\"nbm_fire\",\"dwd_mosmix\",\"ecmwf_ifs\",\"hrrr_18-48\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"hrrr_subh\":\"2026-03-18 + 21Z\",\"rtma_ru\":\"2026-03-18 23:15Z\",\"hrrr_0-18\":\"2026-03-18 21Z\",\"nbm\":\"2026-03-18 + 19Z\",\"nbm_fire\":\"2026-03-18 18Z\",\"dwd_mosmix\":\"2026-03-18 22Z\",\"ecmwf_ifs\":\"2026-03-18 + 00Z\",\"hrrr_18-48\":\"2026-03-18 18Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":6.81,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:53 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9856' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 2148953aab7910c366395376a0db1450.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - ScATX4KcY6rPCrYjfFe6vYycgE02HRKoRjb2Ln_4fUeztj24Cmtp6w== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '144' + X-Handler-Time: + - '46.2' + X-Kong-Proxy-Latency: + - '0' + X-Kong-Request-Id: + - 1515365d43c0493712171e031637260d + X-Kong-Upstream-Latency: + - '49' + X-Node-Id: + - ip-10-0-17-43.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9856' + X-Response-Time: + - '46.214999999999996' + X-Server-Time: + - '47.8' + content-length: + - '94228' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/cassettes/pirate_weather/forecast_nyc.yaml b/tests/integration/cassettes/pirate_weather/forecast_nyc.yaml new file mode 100644 index 00000000..b26c7130 --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/forecast_nyc.yaml @@ -0,0 +1,238 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/40.7128,-74.006?extend=hourly&units=us + response: + body: + string: "{\"latitude\":40.7128,\"longitude\":-74.006,\"timezone\":\"America/New_York\",\"offset\":-4.0,\"elevation\":62,\"currently\":{\"time\":1773877680,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"nearestStormDistance\":356.19,\"nearestStormBearing\":35,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\",\"temperature\":32.88,\"apparentTemperature\":21.34,\"dewPoint\":16.48,\"humidity\":0.5,\"pressure\":1028.29,\"windSpeed\":10.46,\"windGust\":13.69,\"windBearing\":141,\"cloudCover\":0.0,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":401.24},\"minutely\":{\"summary\":\"Clear + for the hour.\",\"icon\":\"clear-night\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878340,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878400,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878460,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878520,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878580,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878640,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878700,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878760,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878820,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878880,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878940,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879000,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879060,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879120,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879240,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879300,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879360,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879420,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879480,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879540,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879600,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879660,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879720,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879780,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879840,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879900,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879960,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880020,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880080,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880140,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880200,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880260,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880320,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880380,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880440,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880500,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880560,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880620,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"}]},\"hourly\":{\"summary\":\"Partly + cloudy starting tomorrow morning.\",\"icon\":\"partly-cloudy-day\",\"data\":[{\"time\":1773874800,\"summary\":\"Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.62,\"apparentTemperature\":28.36,\"dewPoint\":13.44,\"humidity\":0.4,\"pressure\":1028.7,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":160,\"cloudCover\":0.04,\"uvIndex\":0.28,\"visibility\":10.0,\"ozone\":404.2,\"nearestStormDistance\":351.03,\"nearestStormBearing\":33},{\"time\":1773878400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.49,\"apparentTemperature\":28.15,\"dewPoint\":15.98,\"humidity\":0.44,\"pressure\":1028.19,\"windSpeed\":8.94,\"windGust\":10.95,\"windBearing\":150,\"cloudCover\":0.05,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.5,\"nearestStormDistance\":357.48,\"nearestStormBearing\":35},{\"time\":1773882000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.97,\"apparentTemperature\":28.81,\"dewPoint\":18.12,\"humidity\":0.49,\"pressure\":1029.01,\"windSpeed\":8.04,\"windGust\":10.05,\"windBearing\":150,\"cloudCover\":0.03,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":397.01,\"nearestStormDistance\":227.41,\"nearestStormBearing\":259},{\"time\":1773885600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.15,\"apparentTemperature\":28.8,\"dewPoint\":18.86,\"humidity\":0.51,\"pressure\":1029.03,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.06,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.34,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773889200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.83,\"apparentTemperature\":29.39,\"dewPoint\":19.08,\"humidity\":0.52,\"pressure\":1028.92,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.0,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773892800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.4,\"apparentTemperature\":29.71,\"dewPoint\":19.92,\"humidity\":0.54,\"pressure\":1028.24,\"windSpeed\":6.26,\"windGust\":8.04,\"windBearing\":150,\"cloudCover\":0.21,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.58,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773896400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.93,\"apparentTemperature\":30.0,\"dewPoint\":20.34,\"humidity\":0.55,\"pressure\":1027.83,\"windSpeed\":5.36,\"windGust\":8.04,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":392.93,\"nearestStormDistance\":240.11,\"nearestStormBearing\":260},{\"time\":1773900000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.01,\"apparentTemperature\":30.54,\"dewPoint\":21.34,\"humidity\":0.56,\"pressure\":1027.3,\"windSpeed\":5.36,\"windGust\":7.15,\"windBearing\":150,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.63,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773903600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.49,\"dewPoint\":22.14,\"humidity\":0.59,\"pressure\":1026.66,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.34,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.17,\"nearestStormDistance\":250.34,\"nearestStormBearing\":263},{\"time\":1773907200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.7,\"dewPoint\":22.5,\"humidity\":0.61,\"pressure\":1026.74,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.75,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773910800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.03,\"apparentTemperature\":31.01,\"dewPoint\":22.78,\"humidity\":0.61,\"pressure\":1026.25,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":140,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.66,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773914400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.18,\"apparentTemperature\":30.96,\"dewPoint\":22.62,\"humidity\":0.62,\"pressure\":1025.95,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":120,\"cloudCover\":0.53,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.2,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773918000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.92,\"apparentTemperature\":30.83,\"dewPoint\":23.05,\"humidity\":0.63,\"pressure\":1026.14,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":110,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.27,\"nearestStormDistance\":224.52,\"nearestStormBearing\":263},{\"time\":1773921600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.44,\"apparentTemperature\":31.32,\"dewPoint\":23.81,\"humidity\":0.62,\"pressure\":1026.84,\"windSpeed\":4.47,\"windGust\":6.48,\"windBearing\":110,\"cloudCover\":0.58,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":394.1,\"nearestStormDistance\":249.01,\"nearestStormBearing\":266},{\"time\":1773925200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":36.37,\"apparentTemperature\":32.29,\"dewPoint\":23.81,\"humidity\":0.6,\"pressure\":1026.81,\"windSpeed\":5.36,\"windGust\":6.7,\"windBearing\":130,\"cloudCover\":0.52,\"uvIndex\":1.08,\"visibility\":10.0,\"ozone\":396.41,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1773928800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.47,\"apparentTemperature\":32.23,\"dewPoint\":23.0,\"humidity\":0.56,\"pressure\":1026.22,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":160,\"cloudCover\":0.48,\"uvIndex\":2.14,\"visibility\":10.0,\"ozone\":396.14,\"nearestStormDistance\":180.4,\"nearestStormBearing\":201},{\"time\":1773932400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":38.7,\"apparentTemperature\":33.15,\"dewPoint\":22.05,\"humidity\":0.51,\"pressure\":1025.6,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.49,\"uvIndex\":3.44,\"visibility\":10.0,\"ozone\":398.5,\"nearestStormDistance\":165.94,\"nearestStormBearing\":239},{\"time\":1773936000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.2,\"apparentTemperature\":33.82,\"dewPoint\":21.4,\"humidity\":0.49,\"pressure\":1024.88,\"windSpeed\":8.04,\"windGust\":11.39,\"windBearing\":170,\"cloudCover\":0.52,\"uvIndex\":4.78,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":151.12,\"nearestStormBearing\":225},{\"time\":1773939600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.26,\"apparentTemperature\":34.25,\"dewPoint\":22.05,\"humidity\":0.48,\"pressure\":1024.24,\"windSpeed\":8.94,\"windGust\":13.18,\"windBearing\":170,\"cloudCover\":0.51,\"uvIndex\":5.06,\"visibility\":10.0,\"ozone\":405.51,\"nearestStormDistance\":146.62,\"nearestStormBearing\":233},{\"time\":1773943200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.45,\"apparentTemperature\":34.84,\"dewPoint\":22.82,\"humidity\":0.47,\"pressure\":1023.43,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":5.42,\"visibility\":10.0,\"ozone\":404.17,\"nearestStormDistance\":145.3,\"nearestStormBearing\":240},{\"time\":1773946800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.19,\"apparentTemperature\":35.74,\"dewPoint\":23.4,\"humidity\":0.47,\"pressure\":1023.23,\"windSpeed\":10.72,\"windGust\":14.74,\"windBearing\":170,\"cloudCover\":0.39,\"uvIndex\":4.9,\"visibility\":10.0,\"ozone\":399.76,\"nearestStormDistance\":124.91,\"nearestStormBearing\":243},{\"time\":1773950400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.46,\"apparentTemperature\":36.07,\"dewPoint\":24.39,\"humidity\":0.48,\"pressure\":1023.08,\"windSpeed\":11.62,\"windGust\":14.97,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":3.89,\"visibility\":10.0,\"ozone\":398.15,\"nearestStormDistance\":129.62,\"nearestStormBearing\":225},{\"time\":1773954000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.73,\"apparentTemperature\":36.01,\"dewPoint\":24.93,\"humidity\":0.49,\"pressure\":1022.57,\"windSpeed\":11.62,\"windGust\":15.86,\"windBearing\":160,\"cloudCover\":0.4,\"uvIndex\":2.57,\"visibility\":10.0,\"ozone\":397.86,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1773957600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.23,\"apparentTemperature\":36.99,\"dewPoint\":25.27,\"humidity\":0.5,\"pressure\":1022.38,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":160,\"cloudCover\":0.45,\"uvIndex\":1.25,\"visibility\":10.0,\"ozone\":398.76,\"nearestStormDistance\":93.81,\"nearestStormBearing\":243},{\"time\":1773961200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.05,\"apparentTemperature\":37.56,\"dewPoint\":26.82,\"humidity\":0.52,\"pressure\":1022.34,\"windSpeed\":9.83,\"windGust\":12.73,\"windBearing\":160,\"cloudCover\":0.39,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":401.36,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1773964800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.14,\"apparentTemperature\":37.63,\"dewPoint\":28.24,\"humidity\":0.55,\"pressure\":1022.62,\"windSpeed\":8.94,\"windGust\":11.62,\"windBearing\":160,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.26,\"nearestStormDistance\":90.27,\"nearestStormBearing\":201},{\"time\":1773968400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":37.85,\"dewPoint\":29.77,\"humidity\":0.59,\"pressure\":1022.45,\"windSpeed\":8.04,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":143.65,\"nearestStormBearing\":159},{\"time\":1773972000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.93,\"apparentTemperature\":38.41,\"dewPoint\":29.93,\"humidity\":0.6,\"pressure\":1021.95,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":180,\"cloudCover\":0.36,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.62,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773975600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.84,\"apparentTemperature\":38.93,\"dewPoint\":30.92,\"humidity\":0.61,\"pressure\":1022.17,\"windSpeed\":7.15,\"windGust\":9.38,\"windBearing\":190,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.73,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773979200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.11,\"apparentTemperature\":39.09,\"dewPoint\":31.23,\"humidity\":0.63,\"pressure\":1022.29,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":200,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":405.77,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1773982800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":39.15,\"dewPoint\":31.35,\"humidity\":0.64,\"pressure\":1021.96,\"windSpeed\":6.26,\"windGust\":8.27,\"windBearing\":220,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.51,\"nearestStormDistance\":252.47,\"nearestStormBearing\":145},{\"time\":1773986400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.17,\"apparentTemperature\":39.18,\"dewPoint\":31.48,\"humidity\":0.64,\"pressure\":1021.54,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":230,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":403.63,\"nearestStormDistance\":283.51,\"nearestStormBearing\":149},{\"time\":1773990000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.0,\"apparentTemperature\":38.94,\"dewPoint\":31.72,\"humidity\":0.65,\"pressure\":1021.22,\"windSpeed\":5.96,\"windGust\":8.19,\"windBearing\":235,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.56,\"nearestStormDistance\":335.93,\"nearestStormBearing\":150},{\"time\":1773993600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.84,\"apparentTemperature\":38.69,\"dewPoint\":31.96,\"humidity\":0.66,\"pressure\":1021.39,\"windSpeed\":5.66,\"windGust\":7.89,\"windBearing\":240,\"cloudCover\":0.48,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.77,\"nearestStormDistance\":267.07,\"nearestStormBearing\":161},{\"time\":1773997200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.68,\"apparentTemperature\":38.44,\"dewPoint\":32.2,\"humidity\":0.68,\"pressure\":1021.25,\"windSpeed\":5.36,\"windGust\":7.6,\"windBearing\":245,\"cloudCover\":0.44,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":388.23,\"nearestStormBearing\":33},{\"time\":1774000800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.51,\"apparentTemperature\":38.2,\"dewPoint\":32.44,\"humidity\":0.69,\"pressure\":1021.74,\"windSpeed\":5.06,\"windGust\":7.3,\"windBearing\":250,\"cloudCover\":0.41,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.47,\"nearestStormDistance\":368.02,\"nearestStormBearing\":206},{\"time\":1774004400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.35,\"apparentTemperature\":37.95,\"dewPoint\":32.68,\"humidity\":0.7,\"pressure\":1021.6,\"windSpeed\":4.77,\"windGust\":7.0,\"windBearing\":255,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.13,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774008000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.18,\"apparentTemperature\":37.71,\"dewPoint\":32.92,\"humidity\":0.71,\"pressure\":1021.73,\"windSpeed\":4.47,\"windGust\":6.7,\"windBearing\":260,\"cloudCover\":0.35,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":397.97,\"nearestStormDistance\":421.2,\"nearestStormBearing\":218},{\"time\":1774011600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.57,\"apparentTemperature\":39.55,\"dewPoint\":32.76,\"humidity\":0.69,\"pressure\":1021.52,\"windSpeed\":5.55,\"windGust\":7.6,\"windBearing\":248,\"cloudCover\":0.39,\"uvIndex\":1.13,\"visibility\":10.0,\"ozone\":395.53,\"nearestStormDistance\":367.17,\"nearestStormBearing\":214},{\"time\":1774015200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":43.95,\"apparentTemperature\":41.39,\"dewPoint\":32.59,\"humidity\":0.66,\"pressure\":1020.51,\"windSpeed\":6.64,\"windGust\":8.49,\"windBearing\":236,\"cloudCover\":0.44,\"uvIndex\":2.44,\"visibility\":10.0,\"ozone\":395.04,\"nearestStormDistance\":299.32,\"nearestStormBearing\":209},{\"time\":1774018800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.34,\"apparentTemperature\":43.23,\"dewPoint\":32.43,\"humidity\":0.64,\"pressure\":1020.97,\"windSpeed\":7.72,\"windGust\":9.38,\"windBearing\":224,\"cloudCover\":0.48,\"uvIndex\":3.72,\"visibility\":10.0,\"ozone\":394.63,\"nearestStormDistance\":270.38,\"nearestStormBearing\":201},{\"time\":1774022400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.73,\"apparentTemperature\":45.08,\"dewPoint\":33.12,\"humidity\":0.61,\"pressure\":1020.41,\"windSpeed\":8.81,\"windGust\":11.47,\"windBearing\":212,\"cloudCover\":0.53,\"uvIndex\":4.44,\"visibility\":10.0,\"ozone\":395.99,\"nearestStormDistance\":243.43,\"nearestStormBearing\":188},{\"time\":1774026000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.11,\"apparentTemperature\":46.92,\"dewPoint\":33.8,\"humidity\":0.59,\"pressure\":1019.22,\"windSpeed\":9.89,\"windGust\":13.55,\"windBearing\":200,\"cloudCover\":0.57,\"uvIndex\":4.4,\"visibility\":10.0,\"ozone\":396.23,\"nearestStormDistance\":242.1,\"nearestStormBearing\":180},{\"time\":1774029600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.5,\"apparentTemperature\":48.76,\"dewPoint\":34.48,\"humidity\":0.56,\"pressure\":1017.07,\"windSpeed\":10.98,\"windGust\":15.64,\"windBearing\":189,\"cloudCover\":0.62,\"uvIndex\":5.15,\"visibility\":10.0,\"ozone\":395.58,\"nearestStormDistance\":222.48,\"nearestStormBearing\":219},{\"time\":1774033200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.89,\"apparentTemperature\":50.61,\"dewPoint\":34.78,\"humidity\":0.54,\"pressure\":1017.31,\"windSpeed\":12.06,\"windGust\":17.13,\"windBearing\":177,\"cloudCover\":0.66,\"uvIndex\":4.74,\"visibility\":10.0,\"ozone\":396.7,\"nearestStormDistance\":152.64,\"nearestStormBearing\":212},{\"time\":1774036800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.45,\"apparentTemperature\":51.14,\"dewPoint\":35.07,\"humidity\":0.54,\"pressure\":1016.48,\"windSpeed\":13.4,\"windGust\":18.62,\"windBearing\":173,\"cloudCover\":0.71,\"uvIndex\":3.84,\"visibility\":10.0,\"ozone\":399.67,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774040400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.02,\"apparentTemperature\":51.67,\"dewPoint\":35.37,\"humidity\":0.54,\"pressure\":1015.65,\"windSpeed\":14.74,\"windGust\":20.11,\"windBearing\":170,\"cloudCover\":0.75,\"uvIndex\":2.41,\"visibility\":10.0,\"ozone\":398.36,\"nearestStormDistance\":155.63,\"nearestStormBearing\":180},{\"time\":1774044000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.89,\"apparentTemperature\":51.63,\"dewPoint\":36.12,\"humidity\":0.55,\"pressure\":1015.28,\"windSpeed\":14.89,\"windGust\":19.96,\"windBearing\":173,\"cloudCover\":0.79,\"uvIndex\":1.18,\"visibility\":10.0,\"ozone\":397.25,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774047600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.76,\"apparentTemperature\":51.58,\"dewPoint\":36.87,\"humidity\":0.57,\"pressure\":1014.9,\"windSpeed\":15.04,\"windGust\":19.81,\"windBearing\":177,\"cloudCover\":0.84,\"uvIndex\":0.26,\"visibility\":10.0,\"ozone\":396.55,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774051200,\"summary\":\"Breezy + and Overcast\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.64,\"apparentTemperature\":51.53,\"dewPoint\":37.62,\"humidity\":0.58,\"pressure\":1014.53,\"windSpeed\":15.19,\"windGust\":19.66,\"windBearing\":180,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.51,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774054800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.005,\"precipProbability\":0.23,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.005,\"precipType\":\"rain\",\"temperature\":51.51,\"apparentTemperature\":51.42,\"dewPoint\":38.17,\"humidity\":0.6,\"pressure\":1014.45,\"windSpeed\":14.89,\"windGust\":19.14,\"windBearing\":183,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.14,\"nearestStormDistance\":70.38,\"nearestStormBearing\":194},{\"time\":1774058400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.36,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.39,\"apparentTemperature\":51.31,\"dewPoint\":38.72,\"humidity\":0.61,\"pressure\":1014.37,\"windSpeed\":14.6,\"windGust\":18.62,\"windBearing\":187,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.49,\"nearestStormDistance\":52.24,\"nearestStormBearing\":236},{\"time\":1774062000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":51.26,\"apparentTemperature\":51.21,\"dewPoint\":39.27,\"humidity\":0.63,\"pressure\":1014.29,\"windSpeed\":14.3,\"windGust\":18.1,\"windBearing\":190,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.47,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774065600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.85,\"apparentTemperature\":50.86,\"dewPoint\":40.07,\"humidity\":0.66,\"pressure\":1013.54,\"windSpeed\":13.7,\"windGust\":17.72,\"windBearing\":193,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":8.37,\"ozone\":387.75,\"nearestStormDistance\":21.68,\"nearestStormBearing\":135},{\"time\":1774069200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.43,\"apparentTemperature\":50.51,\"dewPoint\":40.87,\"humidity\":0.68,\"pressure\":1012.8,\"windSpeed\":13.11,\"windGust\":17.35,\"windBearing\":197,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":6.66,\"ozone\":386.72,\"nearestStormDistance\":13.1,\"nearestStormBearing\":270},{\"time\":1774072800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.02,\"apparentTemperature\":50.16,\"dewPoint\":41.67,\"humidity\":0.71,\"pressure\":1012.06,\"windSpeed\":12.51,\"windGust\":16.98,\"windBearing\":200,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":4.95,\"ozone\":385.37,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774076400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0178,\"precipProbability\":0.49,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0178,\"precipType\":\"rain\",\"temperature\":49.72,\"apparentTemperature\":48.34,\"dewPoint\":41.97,\"humidity\":0.73,\"pressure\":1011.54,\"windSpeed\":11.91,\"windGust\":16.31,\"windBearing\":200,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":3.78,\"ozone\":383.4,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774080000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0206,\"precipProbability\":0.48,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0206,\"precipType\":\"rain\",\"temperature\":49.42,\"apparentTemperature\":46.51,\"dewPoint\":42.27,\"humidity\":0.76,\"pressure\":1011.01,\"windSpeed\":11.32,\"windGust\":15.64,\"windBearing\":200,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":2.6,\"ozone\":384.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774083600,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.12,\"apparentTemperature\":44.69,\"dewPoint\":42.57,\"humidity\":0.78,\"pressure\":1010.48,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":200,\"cloudCover\":0.75,\"uvIndex\":0.0,\"visibility\":1.43,\"ozone\":385.86,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774087200,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.02,\"apparentTemperature\":44.7,\"dewPoint\":42.77,\"humidity\":0.78,\"pressure\":1010.63,\"windSpeed\":10.43,\"windGust\":14.6,\"windBearing\":213,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":1.64,\"ozone\":388.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774090800,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.93,\"apparentTemperature\":44.7,\"dewPoint\":42.97,\"humidity\":0.79,\"pressure\":1010.77,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":227,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":1.86,\"ozone\":391.55,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774094400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.83,\"apparentTemperature\":44.71,\"dewPoint\":43.18,\"humidity\":0.79,\"pressure\":1010.92,\"windSpeed\":9.83,\"windGust\":13.85,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":0.02,\"visibility\":2.07,\"ozone\":393.68,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774098000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0161,\"precipProbability\":0.36,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0161,\"precipType\":\"rain\",\"temperature\":49.53,\"apparentTemperature\":46.62,\"dewPoint\":42.64,\"humidity\":0.76,\"pressure\":1010.95,\"windSpeed\":10.13,\"windGust\":14.45,\"windBearing\":263,\"cloudCover\":0.63,\"uvIndex\":0.24,\"visibility\":4.32,\"ozone\":397.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774101600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0089,\"precipProbability\":0.25,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0089,\"precipType\":\"rain\",\"temperature\":50.23,\"apparentTemperature\":48.54,\"dewPoint\":42.11,\"humidity\":0.74,\"pressure\":1010.98,\"windSpeed\":10.43,\"windGust\":15.04,\"windBearing\":287,\"cloudCover\":0.56,\"uvIndex\":0.42,\"visibility\":6.57,\"ozone\":397.24,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774105200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":50.94,\"apparentTemperature\":50.45,\"dewPoint\":41.58,\"humidity\":0.71,\"pressure\":1011.01,\"windSpeed\":10.72,\"windGust\":15.64,\"windBearing\":310,\"cloudCover\":0.5,\"uvIndex\":0.63,\"visibility\":8.83,\"ozone\":395.11,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774108800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":52.2,\"apparentTemperature\":52.06,\"dewPoint\":41.38,\"humidity\":0.67,\"pressure\":1010.65,\"windSpeed\":11.02,\"windGust\":16.31,\"windBearing\":313,\"cloudCover\":0.52,\"uvIndex\":1.47,\"visibility\":9.25,\"ozone\":393.52,\"nearestStormDistance\":21.71,\"nearestStormBearing\":45},{\"time\":1774112400,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":53.46,\"apparentTemperature\":53.67,\"dewPoint\":41.18,\"humidity\":0.63,\"pressure\":1010.29,\"windSpeed\":11.32,\"windGust\":16.98,\"windBearing\":317,\"cloudCover\":0.53,\"uvIndex\":2.39,\"visibility\":9.68,\"ozone\":392.9,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774116000,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":54.72,\"apparentTemperature\":55.27,\"dewPoint\":40.98,\"humidity\":0.59,\"pressure\":1009.93,\"windSpeed\":11.62,\"windGust\":17.65,\"windBearing\":320,\"cloudCover\":0.55,\"uvIndex\":2.96,\"visibility\":10.0,\"ozone\":389.31,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774119600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0011,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0011,\"precipType\":\"rain\",\"temperature\":55.35,\"apparentTemperature\":55.87,\"dewPoint\":40.52,\"humidity\":0.57,\"pressure\":1009.52,\"windSpeed\":11.91,\"windGust\":17.8,\"windBearing\":317,\"cloudCover\":0.54,\"uvIndex\":3.98,\"visibility\":10.0,\"ozone\":381.62,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774123200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0006,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0006,\"precipType\":\"rain\",\"temperature\":55.99,\"apparentTemperature\":56.47,\"dewPoint\":40.06,\"humidity\":0.55,\"pressure\":1009.1,\"windSpeed\":12.21,\"windGust\":17.95,\"windBearing\":313,\"cloudCover\":0.54,\"uvIndex\":3.39,\"visibility\":10.0,\"ozone\":376.35,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774126800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":56.62,\"apparentTemperature\":57.07,\"dewPoint\":39.6,\"humidity\":0.53,\"pressure\":1008.68,\"windSpeed\":12.51,\"windGust\":18.1,\"windBearing\":310,\"cloudCover\":0.53,\"uvIndex\":1.41,\"visibility\":10.0,\"ozone\":370.1,\"nearestStormDistance\":62.95,\"nearestStormBearing\":63},{\"time\":1774130400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.78,\"apparentTemperature\":56.1,\"dewPoint\":39.3,\"humidity\":0.54,\"pressure\":1009.0,\"windSpeed\":12.21,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.52,\"uvIndex\":0.54,\"visibility\":10.0,\"ozone\":364.83,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774134000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.93,\"apparentTemperature\":55.12,\"dewPoint\":39.01,\"humidity\":0.55,\"pressure\":1009.32,\"windSpeed\":11.91,\"windGust\":16.46,\"windBearing\":297,\"cloudCover\":0.51,\"uvIndex\":0.22,\"visibility\":10.0,\"ozone\":363.13,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774137600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.09,\"apparentTemperature\":54.14,\"dewPoint\":38.71,\"humidity\":0.56,\"pressure\":1009.64,\"windSpeed\":11.62,\"windGust\":15.64,\"windBearing\":290,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":359.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774141200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.09,\"apparentTemperature\":53.19,\"dewPoint\":39.06,\"humidity\":0.59,\"pressure\":1009.55,\"windSpeed\":11.02,\"windGust\":14.6,\"windBearing\":253,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":356.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774144800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.09,\"apparentTemperature\":52.23,\"dewPoint\":39.41,\"humidity\":0.62,\"pressure\":1009.46,\"windSpeed\":10.43,\"windGust\":13.55,\"windBearing\":217,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":354.23,\"nearestStormDistance\":168.25,\"nearestStormBearing\":59},{\"time\":1774148400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.1,\"apparentTemperature\":51.28,\"dewPoint\":39.76,\"humidity\":0.65,\"pressure\":1009.36,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":180,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.08,\"nearestStormDistance\":226.79,\"nearestStormBearing\":47},{\"time\":1774152000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.38,\"apparentTemperature\":49.3,\"dewPoint\":39.79,\"humidity\":0.66,\"pressure\":1008.94,\"windSpeed\":9.53,\"windGust\":12.29,\"windBearing\":193,\"cloudCover\":0.68,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":349.54,\"nearestStormDistance\":253.21,\"nearestStormBearing\":59},{\"time\":1774155600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.66,\"apparentTemperature\":47.33,\"dewPoint\":39.83,\"humidity\":0.68,\"pressure\":1008.52,\"windSpeed\":9.23,\"windGust\":12.06,\"windBearing\":207,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.8,\"nearestStormDistance\":264.46,\"nearestStormBearing\":56},{\"time\":1774159200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.94,\"apparentTemperature\":45.36,\"dewPoint\":39.87,\"humidity\":0.69,\"pressure\":1008.1,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":220,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":345.5,\"nearestStormDistance\":245.1,\"nearestStormBearing\":192},{\"time\":1774162800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.07,\"apparentTemperature\":45.39,\"dewPoint\":40.41,\"humidity\":0.71,\"pressure\":1007.39,\"windSpeed\":8.94,\"windGust\":12.14,\"windBearing\":227,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":342.51,\"nearestStormDistance\":278.62,\"nearestStormBearing\":208},{\"time\":1774166400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.2,\"apparentTemperature\":45.42,\"dewPoint\":40.96,\"humidity\":0.73,\"pressure\":1006.69,\"windSpeed\":8.94,\"windGust\":12.44,\"windBearing\":233,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":338.56,\"nearestStormDistance\":258.01,\"nearestStormBearing\":206},{\"time\":1774170000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.33,\"apparentTemperature\":45.45,\"dewPoint\":41.5,\"humidity\":0.75,\"pressure\":1005.98,\"windSpeed\":8.94,\"windGust\":12.73,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":334.91,\"nearestStormDistance\":215.43,\"nearestStormBearing\":225},{\"time\":1774173600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.3,\"apparentTemperature\":45.42,\"dewPoint\":41.71,\"humidity\":0.75,\"pressure\":1005.95,\"windSpeed\":9.23,\"windGust\":12.66,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.76,\"nearestStormDistance\":189.33,\"nearestStormBearing\":210},{\"time\":1774177200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.27,\"apparentTemperature\":45.4,\"dewPoint\":41.92,\"humidity\":0.75,\"pressure\":1005.91,\"windSpeed\":9.53,\"windGust\":12.58,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.24,\"nearestStormDistance\":177.17,\"nearestStormBearing\":196},{\"time\":1774180800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.24,\"apparentTemperature\":45.37,\"dewPoint\":42.13,\"humidity\":0.75,\"pressure\":1005.87,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":330.76,\"nearestStormDistance\":160.35,\"nearestStormBearing\":198},{\"time\":1774184400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.6,\"apparentTemperature\":47.97,\"dewPoint\":41.78,\"humidity\":0.71,\"pressure\":1005.69,\"windSpeed\":10.43,\"windGust\":13.78,\"windBearing\":240,\"cloudCover\":0.73,\"uvIndex\":1.05,\"visibility\":10.0,\"ozone\":328.48,\"nearestStormDistance\":194.91,\"nearestStormBearing\":214},{\"time\":1774188000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.96,\"apparentTemperature\":50.57,\"dewPoint\":41.43,\"humidity\":0.68,\"pressure\":1005.51,\"windSpeed\":11.02,\"windGust\":15.04,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":2.17,\"visibility\":10.0,\"ozone\":328.87,\"nearestStormDistance\":209.08,\"nearestStormBearing\":189},{\"time\":1774191600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.31,\"apparentTemperature\":53.17,\"dewPoint\":41.07,\"humidity\":0.64,\"pressure\":1005.33,\"windSpeed\":11.62,\"windGust\":16.31,\"windBearing\":240,\"cloudCover\":0.64,\"uvIndex\":3.41,\"visibility\":10.0,\"ozone\":328.31,\"nearestStormDistance\":246.92,\"nearestStormBearing\":148},{\"time\":1774195200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.26,\"apparentTemperature\":55.17,\"dewPoint\":41.19,\"humidity\":0.6,\"pressure\":1005.07,\"windSpeed\":12.21,\"windGust\":17.57,\"windBearing\":243,\"cloudCover\":0.65,\"uvIndex\":4.25,\"visibility\":10.0,\"ozone\":325.51,\"nearestStormDistance\":179.84,\"nearestStormBearing\":217},{\"time\":1774198800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.2,\"apparentTemperature\":57.16,\"dewPoint\":41.31,\"humidity\":0.57,\"pressure\":1004.81,\"windSpeed\":12.81,\"windGust\":18.84,\"windBearing\":247,\"cloudCover\":0.66,\"uvIndex\":4.83,\"visibility\":10.0,\"ozone\":324.7,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774202400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.14,\"apparentTemperature\":59.16,\"dewPoint\":41.43,\"humidity\":0.53,\"pressure\":1004.55,\"windSpeed\":13.4,\"windGust\":20.11,\"windBearing\":250,\"cloudCover\":0.67,\"uvIndex\":5.55,\"visibility\":10.0,\"ozone\":324.95,\"nearestStormDistance\":227.48,\"nearestStormBearing\":119},{\"time\":1774206000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.39,\"apparentTemperature\":59.37,\"dewPoint\":41.45,\"humidity\":0.52,\"pressure\":1005.49,\"windSpeed\":13.93,\"windGust\":20.4,\"windBearing\":260,\"cloudCover\":0.69,\"uvIndex\":4.84,\"visibility\":10.0,\"ozone\":321.6,\"nearestStormDistance\":176.23,\"nearestStormBearing\":241},{\"time\":1774209600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.64,\"apparentTemperature\":59.57,\"dewPoint\":41.47,\"humidity\":0.51,\"pressure\":1006.43,\"windSpeed\":14.45,\"windGust\":20.7,\"windBearing\":270,\"cloudCover\":0.72,\"uvIndex\":3.74,\"visibility\":10.0,\"ozone\":321.19,\"nearestStormDistance\":122.3,\"nearestStormBearing\":219},{\"time\":1774213200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0154,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.88,\"apparentTemperature\":59.77,\"dewPoint\":41.49,\"humidity\":0.5,\"pressure\":1007.38,\"windSpeed\":14.97,\"windGust\":21.0,\"windBearing\":280,\"cloudCover\":0.74,\"uvIndex\":2.67,\"visibility\":10.0,\"ozone\":318.76,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774216800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.05,\"apparentTemperature\":59.0,\"dewPoint\":41.39,\"humidity\":0.51,\"pressure\":1009.18,\"windSpeed\":15.12,\"windGust\":20.55,\"windBearing\":290,\"cloudCover\":0.75,\"uvIndex\":1.36,\"visibility\":10.0,\"ozone\":317.64,\"nearestStormDistance\":103.76,\"nearestStormBearing\":180},{\"time\":1774220400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0209,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":58.21,\"apparentTemperature\":58.23,\"dewPoint\":41.29,\"humidity\":0.53,\"pressure\":1010.99,\"windSpeed\":15.27,\"windGust\":20.11,\"windBearing\":300,\"cloudCover\":0.75,\"uvIndex\":0.35,\"visibility\":10.0,\"ozone\":315.61,\"nearestStormDistance\":86.46,\"nearestStormBearing\":180},{\"time\":1774224000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0236,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.38,\"apparentTemperature\":57.45,\"dewPoint\":41.2,\"humidity\":0.54,\"pressure\":1012.8,\"windSpeed\":15.41,\"windGust\":19.66,\"windBearing\":310,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":314.16,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1774227600,\"summary\":\"Possible + Drizzle and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0033,\"precipProbability\":0.23,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0033,\"precipType\":\"rain\",\"temperature\":55.75,\"apparentTemperature\":55.71,\"dewPoint\":40.65,\"humidity\":0.56,\"pressure\":1014.28,\"windSpeed\":15.34,\"windGust\":19.51,\"windBearing\":320,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":312.5,\"nearestStormDistance\":64.95,\"nearestStormBearing\":225},{\"time\":1774231200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0067,\"precipProbability\":0.25,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0067,\"precipType\":\"rain\",\"temperature\":54.13,\"apparentTemperature\":53.96,\"dewPoint\":40.11,\"humidity\":0.59,\"pressure\":1015.75,\"windSpeed\":15.27,\"windGust\":19.36,\"windBearing\":330,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":310.26,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774234800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":52.5,\"apparentTemperature\":52.21,\"dewPoint\":39.56,\"humidity\":0.61,\"pressure\":1017.23,\"windSpeed\":15.19,\"windGust\":19.21,\"windBearing\":340,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":308.09,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774238400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.015,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.25,\"apparentTemperature\":49.24,\"dewPoint\":38.65,\"humidity\":0.62,\"pressure\":1018.56,\"windSpeed\":14.89,\"windGust\":18.99,\"windBearing\":230,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":306.08,\"nearestStormDistance\":53.49,\"nearestStormBearing\":198},{\"time\":1774242000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":49.99,\"apparentTemperature\":46.26,\"dewPoint\":37.75,\"humidity\":0.62,\"pressure\":1019.9,\"windSpeed\":14.6,\"windGust\":18.77,\"windBearing\":120,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.54,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774245600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0388,\"precipType\":\"snow\",\"temperature\":48.74,\"apparentTemperature\":43.29,\"dewPoint\":36.84,\"humidity\":0.63,\"pressure\":1021.24,\"windSpeed\":14.3,\"windGust\":18.54,\"windBearing\":10,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.66,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774249200,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0106,\"precipProbability\":0.29,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0407,\"precipType\":\"snow\",\"temperature\":47.52,\"apparentTemperature\":41.64,\"dewPoint\":35.52,\"humidity\":0.63,\"pressure\":1022.07,\"windSpeed\":14.6,\"windGust\":18.7,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.84,\"nearestStormDistance\":62.62,\"nearestStormBearing\":116},{\"time\":1774252800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0111,\"precipProbability\":0.3,\"precipIntensityError\":0.0213,\"precipAccumulation\":0.0425,\"precipType\":\"snow\",\"temperature\":46.29,\"apparentTemperature\":40.0,\"dewPoint\":34.2,\"humidity\":0.62,\"pressure\":1022.9,\"windSpeed\":14.89,\"windGust\":18.85,\"windBearing\":10,\"cloudCover\":0.57,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.6,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774256400,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0232,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":45.07,\"apparentTemperature\":38.35,\"dewPoint\":32.88,\"humidity\":0.62,\"pressure\":1023.73,\"windSpeed\":15.19,\"windGust\":19.01,\"windBearing\":10,\"cloudCover\":0.47,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":302.96,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774260000,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":44.04,\"apparentTemperature\":37.11,\"dewPoint\":31.69,\"humidity\":0.61,\"pressure\":1024.84,\"windSpeed\":15.19,\"windGust\":19.53,\"windBearing\":10,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.26,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774263600,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":43.0,\"apparentTemperature\":35.86,\"dewPoint\":30.51,\"humidity\":0.61,\"pressure\":1025.96,\"windSpeed\":15.19,\"windGust\":20.04,\"windBearing\":10,\"cloudCover\":0.56,\"uvIndex\":0.0,\"visibility\":7.22,\"ozone\":304.9,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774267200,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":41.97,\"apparentTemperature\":34.61,\"dewPoint\":29.32,\"humidity\":0.6,\"pressure\":1027.07,\"windSpeed\":15.19,\"windGust\":20.55,\"windBearing\":10,\"cloudCover\":0.6,\"uvIndex\":0.04,\"visibility\":9.35,\"ozone\":305.52,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774270800,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0078,\"precipProbability\":0.26,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0296,\"precipType\":\"snow\",\"temperature\":41.11,\"apparentTemperature\":33.63,\"dewPoint\":27.9,\"humidity\":0.58,\"pressure\":1027.55,\"windSpeed\":15.19,\"windGust\":20.63,\"windBearing\":10,\"cloudCover\":0.62,\"uvIndex\":0.1,\"visibility\":8.57,\"ozone\":306.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774274400,\"summary\":\"Possible + Flurries and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0039,\"precipProbability\":0.21,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0148,\"precipType\":\"snow\",\"temperature\":40.24,\"apparentTemperature\":32.64,\"dewPoint\":26.47,\"humidity\":0.57,\"pressure\":1028.03,\"windSpeed\":15.19,\"windGust\":20.72,\"windBearing\":10,\"cloudCover\":0.65,\"uvIndex\":0.16,\"visibility\":7.79,\"ozone\":307.39,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774278000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":31.66,\"dewPoint\":25.05,\"humidity\":0.55,\"pressure\":1028.51,\"windSpeed\":15.19,\"windGust\":20.8,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.22,\"visibility\":7.01,\"ozone\":308.32,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774281600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.83,\"apparentTemperature\":32.26,\"dewPoint\":24.23,\"humidity\":0.52,\"pressure\":1028.42,\"windSpeed\":14.6,\"windGust\":20.64,\"windBearing\":127,\"cloudCover\":0.61,\"uvIndex\":0.41,\"visibility\":9.67,\"ozone\":309.92,\"nearestStormDistance\":4.37,\"nearestStormBearing\":30},{\"time\":1774285200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.28,\"apparentTemperature\":32.86,\"dewPoint\":23.41,\"humidity\":0.5,\"pressure\":1028.34,\"windSpeed\":14.0,\"windGust\":20.49,\"windBearing\":243,\"cloudCover\":0.54,\"uvIndex\":0.6,\"visibility\":10.0,\"ozone\":311.51,\"nearestStormDistance\":8.73,\"nearestStormBearing\":60},{\"time\":1774288800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.73,\"apparentTemperature\":33.46,\"dewPoint\":22.59,\"humidity\":0.47,\"pressure\":1028.26,\"windSpeed\":13.4,\"windGust\":20.33,\"windBearing\":0,\"cloudCover\":0.48,\"uvIndex\":0.78,\"visibility\":10.0,\"ozone\":313.1,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774292400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.19,\"apparentTemperature\":34.12,\"dewPoint\":22.07,\"humidity\":0.45,\"pressure\":1028.2,\"windSpeed\":13.55,\"windGust\":20.25,\"windBearing\":357,\"cloudCover\":0.44,\"uvIndex\":1.15,\"visibility\":10.0,\"ozone\":315.84,\"nearestStormDistance\":28.08,\"nearestStormBearing\":131},{\"time\":1774296000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.65,\"apparentTemperature\":34.78,\"dewPoint\":21.55,\"humidity\":0.44,\"pressure\":1028.14,\"windSpeed\":13.7,\"windGust\":20.18,\"windBearing\":353,\"cloudCover\":0.39,\"uvIndex\":1.51,\"visibility\":10.0,\"ozone\":318.57,\"nearestStormDistance\":43.07,\"nearestStormBearing\":172},{\"time\":1774299600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.12,\"apparentTemperature\":35.44,\"dewPoint\":21.04,\"humidity\":0.42,\"pressure\":1028.08,\"windSpeed\":13.85,\"windGust\":20.11,\"windBearing\":350,\"cloudCover\":0.35,\"uvIndex\":1.88,\"visibility\":10.0,\"ozone\":321.3,\"nearestStormDistance\":58.05,\"nearestStormBearing\":213},{\"time\":1774303200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.09,\"apparentTemperature\":35.34,\"dewPoint\":20.79,\"humidity\":0.42,\"pressure\":1028.61,\"windSpeed\":13.78,\"windGust\":18.99,\"windBearing\":350,\"cloudCover\":0.34,\"uvIndex\":1.4,\"visibility\":10.0,\"ozone\":323.19,\"nearestStormDistance\":53.14,\"nearestStormBearing\":217},{\"time\":1774306800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.06,\"apparentTemperature\":35.25,\"dewPoint\":20.53,\"humidity\":0.42,\"pressure\":1029.15,\"windSpeed\":13.7,\"windGust\":17.87,\"windBearing\":350,\"cloudCover\":0.32,\"uvIndex\":0.92,\"visibility\":10.0,\"ozone\":325.07,\"nearestStormDistance\":48.24,\"nearestStormBearing\":221},{\"time\":1774310400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.03,\"apparentTemperature\":35.15,\"dewPoint\":20.28,\"humidity\":0.42,\"pressure\":1029.68,\"windSpeed\":13.63,\"windGust\":16.76,\"windBearing\":350,\"cloudCover\":0.31,\"uvIndex\":0.44,\"visibility\":10.0,\"ozone\":326.96,\"nearestStormDistance\":43.33,\"nearestStormBearing\":225},{\"time\":1774314000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.2,\"apparentTemperature\":34.12,\"dewPoint\":20.12,\"humidity\":0.43,\"pressure\":1029.87,\"windSpeed\":13.26,\"windGust\":16.31,\"windBearing\":347,\"cloudCover\":0.26,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":329.73,\"nearestStormDistance\":48.28,\"nearestStormBearing\":258},{\"time\":1774317600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.37,\"apparentTemperature\":33.09,\"dewPoint\":19.96,\"humidity\":0.43,\"pressure\":1030.06,\"windSpeed\":12.88,\"windGust\":15.86,\"windBearing\":343,\"cloudCover\":0.22,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":332.5,\"nearestStormDistance\":53.23,\"nearestStormBearing\":292},{\"time\":1774321200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.54,\"apparentTemperature\":32.05,\"dewPoint\":19.8,\"humidity\":0.44,\"pressure\":1030.25,\"windSpeed\":12.51,\"windGust\":15.41,\"windBearing\":340,\"cloudCover\":0.17,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":335.27,\"nearestStormDistance\":58.19,\"nearestStormBearing\":326},{\"time\":1774324800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":38.71,\"apparentTemperature\":31.07,\"dewPoint\":19.03,\"humidity\":0.44,\"pressure\":1030.44,\"windSpeed\":11.91,\"windGust\":14.97,\"windBearing\":343,\"cloudCover\":0.15,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":340.96,\"nearestStormDistance\":130.35,\"nearestStormBearing\":236},{\"time\":1774328400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.87,\"apparentTemperature\":30.09,\"dewPoint\":18.26,\"humidity\":0.45,\"pressure\":1030.63,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":347,\"cloudCover\":0.12,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.65,\"nearestStormDistance\":202.52,\"nearestStormBearing\":147},{\"time\":1774332000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.04,\"apparentTemperature\":29.1,\"dewPoint\":17.49,\"humidity\":0.45,\"pressure\":1030.81,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.34,\"nearestStormDistance\":274.69,\"nearestStormBearing\":57},{\"time\":1774335600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":36.39,\"apparentTemperature\":28.34,\"dewPoint\":17.37,\"humidity\":0.46,\"pressure\":1030.58,\"windSpeed\":10.72,\"windGust\":13.93,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":360.54,\"nearestStormDistance\":221.96,\"nearestStormBearing\":49},{\"time\":1774339200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.74,\"apparentTemperature\":27.58,\"dewPoint\":17.24,\"humidity\":0.47,\"pressure\":1030.34,\"windSpeed\":10.72,\"windGust\":13.79,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":368.74,\"nearestStormDistance\":169.23,\"nearestStormBearing\":41},{\"time\":1774342800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.1,\"apparentTemperature\":26.82,\"dewPoint\":17.11,\"humidity\":0.48,\"pressure\":1030.11,\"windSpeed\":10.72,\"windGust\":13.65,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":376.94,\"nearestStormDistance\":116.5,\"nearestStormBearing\":33},{\"time\":1774346400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.81,\"apparentTemperature\":26.64,\"dewPoint\":17.42,\"humidity\":0.49,\"pressure\":1029.87,\"windSpeed\":10.72,\"windGust\":13.64,\"windBearing\":233,\"cloudCover\":0.14,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":381.4,\"nearestStormDistance\":165.42,\"nearestStormBearing\":54},{\"time\":1774350000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.52,\"apparentTemperature\":26.47,\"dewPoint\":17.73,\"humidity\":0.49,\"pressure\":1029.64,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":117,\"cloudCover\":0.17,\"uvIndex\":0.07,\"visibility\":10.0,\"ozone\":385.86,\"nearestStormDistance\":214.34,\"nearestStormBearing\":75},{\"time\":1774353600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.23,\"apparentTemperature\":26.29,\"dewPoint\":18.03,\"humidity\":0.5,\"pressure\":1029.4,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":0,\"cloudCover\":0.2,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":390.32,\"nearestStormDistance\":263.26,\"nearestStormBearing\":95},{\"time\":1774357200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.01,\"apparentTemperature\":27.04,\"dewPoint\":17.47,\"humidity\":0.48,\"pressure\":1028.55,\"windSpeed\":10.72,\"windGust\":14.22,\"windBearing\":7,\"cloudCover\":0.26,\"uvIndex\":0.93,\"visibility\":10.0,\"ozone\":393.27,\"nearestStormDistance\":254.65,\"nearestStormBearing\":95},{\"time\":1774360800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.78,\"apparentTemperature\":27.79,\"dewPoint\":16.92,\"humidity\":0.45,\"pressure\":1027.69,\"windSpeed\":10.72,\"windGust\":14.82,\"windBearing\":13,\"cloudCover\":0.33,\"uvIndex\":1.77,\"visibility\":10.0,\"ozone\":396.21,\"nearestStormDistance\":246.03,\"nearestStormBearing\":96},{\"time\":1774364400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":36.55,\"apparentTemperature\":28.54,\"dewPoint\":16.36,\"humidity\":0.43,\"pressure\":1026.83,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":20,\"cloudCover\":0.39,\"uvIndex\":2.6,\"visibility\":10.0,\"ozone\":399.16,\"nearestStormDistance\":237.42,\"nearestStormBearing\":96},{\"time\":1774368000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":37.68,\"apparentTemperature\":29.94,\"dewPoint\":16.6,\"humidity\":0.42,\"pressure\":1025.98,\"windSpeed\":11.24,\"windGust\":16.23,\"windBearing\":60,\"cloudCover\":0.42,\"uvIndex\":3.57,\"visibility\":10.0,\"ozone\":393.36,\"nearestStormDistance\":232.51,\"nearestStormBearing\":94},{\"time\":1774371600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":38.81,\"apparentTemperature\":31.34,\"dewPoint\":16.85,\"humidity\":0.4,\"pressure\":1025.12,\"windSpeed\":11.77,\"windGust\":17.05,\"windBearing\":100,\"cloudCover\":0.46,\"uvIndex\":4.54,\"visibility\":10.0,\"ozone\":387.55,\"nearestStormDistance\":227.6,\"nearestStormBearing\":92},{\"time\":1774375200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.94,\"apparentTemperature\":32.74,\"dewPoint\":17.1,\"humidity\":0.39,\"pressure\":1024.26,\"windSpeed\":12.29,\"windGust\":17.87,\"windBearing\":140,\"cloudCover\":0.49,\"uvIndex\":5.51,\"visibility\":10.0,\"ozone\":381.74,\"nearestStormDistance\":222.68,\"nearestStormBearing\":90},{\"time\":1774378800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.65,\"apparentTemperature\":33.65,\"dewPoint\":17.72,\"humidity\":0.39,\"pressure\":1023.53,\"windSpeed\":12.44,\"windGust\":17.8,\"windBearing\":160,\"cloudCover\":0.52,\"uvIndex\":5.02,\"visibility\":10.0,\"ozone\":380.91,\"nearestStormDistance\":225.08,\"nearestStormBearing\":86},{\"time\":1774382400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.37,\"apparentTemperature\":34.56,\"dewPoint\":18.34,\"humidity\":0.39,\"pressure\":1022.8,\"windSpeed\":12.58,\"windGust\":17.72,\"windBearing\":180,\"cloudCover\":0.56,\"uvIndex\":4.53,\"visibility\":10.0,\"ozone\":380.07,\"nearestStormDistance\":227.47,\"nearestStormBearing\":83},{\"time\":1774386000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.08,\"apparentTemperature\":35.47,\"dewPoint\":18.97,\"humidity\":0.39,\"pressure\":1022.07,\"windSpeed\":12.73,\"windGust\":17.65,\"windBearing\":200,\"cloudCover\":0.59,\"uvIndex\":4.04,\"visibility\":10.0,\"ozone\":379.24,\"nearestStormDistance\":229.86,\"nearestStormBearing\":79},{\"time\":1774389600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.03,\"apparentTemperature\":35.61,\"dewPoint\":19.71,\"humidity\":0.4,\"pressure\":1021.34,\"windSpeed\":12.51,\"windGust\":17.05,\"windBearing\":200,\"cloudCover\":0.58,\"uvIndex\":2.89,\"visibility\":10.0,\"ozone\":380.33,\"nearestStormDistance\":301.76,\"nearestStormBearing\":122},{\"time\":1774393200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.98,\"apparentTemperature\":35.75,\"dewPoint\":20.46,\"humidity\":0.42,\"pressure\":1020.61,\"windSpeed\":12.29,\"windGust\":16.46,\"windBearing\":200,\"cloudCover\":0.56,\"uvIndex\":1.74,\"visibility\":10.0,\"ozone\":381.42,\"nearestStormDistance\":373.66,\"nearestStormBearing\":165},{\"time\":1774396800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.94,\"apparentTemperature\":35.89,\"dewPoint\":21.2,\"humidity\":0.43,\"pressure\":1019.88,\"windSpeed\":12.06,\"windGust\":15.86,\"windBearing\":200,\"cloudCover\":0.55,\"uvIndex\":0.59,\"visibility\":10.0,\"ozone\":382.51,\"nearestStormDistance\":445.56,\"nearestStormBearing\":208},{\"time\":1774400400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.82,\"apparentTemperature\":35.65,\"dewPoint\":22.16,\"humidity\":0.45,\"pressure\":1019.97,\"windSpeed\":11.69,\"windGust\":15.19,\"windBearing\":203,\"cloudCover\":0.56,\"uvIndex\":0.39,\"visibility\":10.0,\"ozone\":385.23,\"nearestStormDistance\":426.54,\"nearestStormBearing\":208},{\"time\":1774404000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.7,\"apparentTemperature\":35.41,\"dewPoint\":23.12,\"humidity\":0.48,\"pressure\":1020.07,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":207,\"cloudCover\":0.58,\"uvIndex\":0.2,\"visibility\":10.0,\"ozone\":387.94,\"nearestStormDistance\":407.53,\"nearestStormBearing\":207},{\"time\":1774407600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.58,\"apparentTemperature\":35.17,\"dewPoint\":24.08,\"humidity\":0.5,\"pressure\":1020.16,\"windSpeed\":10.95,\"windGust\":13.85,\"windBearing\":210,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.66,\"nearestStormDistance\":388.51,\"nearestStormBearing\":207},{\"time\":1774411200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.29,\"apparentTemperature\":34.82,\"dewPoint\":24.87,\"humidity\":0.52,\"pressure\":1020.25,\"windSpeed\":10.79,\"windGust\":13.84,\"windBearing\":217,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.22,\"nearestStormDistance\":380.31,\"nearestStormBearing\":206},{\"time\":1774414800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.01,\"apparentTemperature\":34.47,\"dewPoint\":25.66,\"humidity\":0.53,\"pressure\":1020.35,\"windSpeed\":10.63,\"windGust\":13.83,\"windBearing\":223,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.78,\"nearestStormDistance\":372.11,\"nearestStormBearing\":205},{\"time\":1774418400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.72,\"apparentTemperature\":34.12,\"dewPoint\":26.46,\"humidity\":0.55,\"pressure\":1020.44,\"windSpeed\":10.47,\"windGust\":13.82,\"windBearing\":230,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":398.33,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774422000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.43,\"apparentTemperature\":33.75,\"dewPoint\":26.76,\"humidity\":0.57,\"pressure\":1020.61,\"windSpeed\":10.31,\"windGust\":13.81,\"windBearing\":237,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.56,\"nearestStormDistance\":342.85,\"nearestStormBearing\":190},{\"time\":1774425600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.15,\"apparentTemperature\":33.38,\"dewPoint\":27.07,\"humidity\":0.58,\"pressure\":1020.77,\"windSpeed\":10.15,\"windGust\":13.8,\"windBearing\":243,\"cloudCover\":0.69,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.78,\"nearestStormDistance\":321.78,\"nearestStormBearing\":177},{\"time\":1774429200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.86,\"apparentTemperature\":33.01,\"dewPoint\":27.37,\"humidity\":0.6,\"pressure\":1020.93,\"windSpeed\":9.99,\"windGust\":13.79,\"windBearing\":250,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.01,\"nearestStormDistance\":300.72,\"nearestStormBearing\":163},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.58,\"apparentTemperature\":33.27,\"dewPoint\":27.81,\"humidity\":0.62,\"pressure\":1021.1,\"windSpeed\":9.83,\"windGust\":13.78,\"windBearing\":257,\"cloudCover\":0.69,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":407.34,\"nearestStormDistance\":272.51,\"nearestStormBearing\":181},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.65,\"apparentTemperature\":33.54,\"dewPoint\":28.24,\"humidity\":0.62,\"pressure\":1021.26,\"windSpeed\":9.83,\"windGust\":13.7,\"windBearing\":263,\"cloudCover\":0.69,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":412.67,\"nearestStormDistance\":244.31,\"nearestStormBearing\":198},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.72,\"apparentTemperature\":33.8,\"dewPoint\":28.67,\"humidity\":0.63,\"pressure\":1021.42,\"windSpeed\":9.83,\"windGust\":13.63,\"windBearing\":270,\"cloudCover\":0.68,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":418.0,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.74,\"apparentTemperature\":34.92,\"dewPoint\":28.15,\"humidity\":0.6,\"pressure\":1021.35,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":273,\"cloudCover\":0.67,\"uvIndex\":0.89,\"visibility\":10.0,\"ozone\":417.94,\"nearestStormDistance\":214.18,\"nearestStormBearing\":214},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.76,\"apparentTemperature\":36.03,\"dewPoint\":27.64,\"humidity\":0.57,\"pressure\":1021.27,\"windSpeed\":10.43,\"windGust\":14.82,\"windBearing\":277,\"cloudCover\":0.66,\"uvIndex\":1.68,\"visibility\":10.0,\"ozone\":417.87,\"nearestStormDistance\":212.26,\"nearestStormBearing\":213},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.78,\"apparentTemperature\":37.15,\"dewPoint\":27.12,\"humidity\":0.54,\"pressure\":1021.2,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":280,\"cloudCover\":0.65,\"uvIndex\":2.48,\"visibility\":10.0,\"ozone\":417.81,\"nearestStormDistance\":210.33,\"nearestStormBearing\":212},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":44.07,\"apparentTemperature\":38.64,\"dewPoint\":27.09,\"humidity\":0.51,\"pressure\":1021.12,\"windSpeed\":11.1,\"windGust\":16.08,\"windBearing\":277,\"cloudCover\":0.63,\"uvIndex\":3.46,\"visibility\":10.0,\"ozone\":414.05,\"nearestStormDistance\":193.67,\"nearestStormBearing\":195},{\"time\":1774458000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.35,\"apparentTemperature\":40.12,\"dewPoint\":27.05,\"humidity\":0.49,\"pressure\":1021.04,\"windSpeed\":11.47,\"windGust\":16.76,\"windBearing\":273,\"cloudCover\":0.61,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":410.3,\"nearestStormDistance\":177.01,\"nearestStormBearing\":178},{\"time\":1774461600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.63,\"apparentTemperature\":41.61,\"dewPoint\":27.01,\"humidity\":0.46,\"pressure\":1020.97,\"windSpeed\":11.84,\"windGust\":17.43,\"windBearing\":270,\"cloudCover\":0.59,\"uvIndex\":5.44,\"visibility\":10.0,\"ozone\":406.55,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774465200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":47.34,\"apparentTemperature\":42.34,\"dewPoint\":27.39,\"humidity\":0.45,\"pressure\":1020.84,\"windSpeed\":12.29,\"windGust\":17.57,\"windBearing\":277,\"cloudCover\":0.58,\"uvIndex\":4.94,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774468800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.05,\"apparentTemperature\":43.06,\"dewPoint\":27.76,\"humidity\":0.45,\"pressure\":1020.72,\"windSpeed\":12.73,\"windGust\":17.72,\"windBearing\":283,\"cloudCover\":0.58,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":395.52,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774472400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.76,\"apparentTemperature\":43.79,\"dewPoint\":28.13,\"humidity\":0.44,\"pressure\":1020.6,\"windSpeed\":13.18,\"windGust\":17.87,\"windBearing\":290,\"cloudCover\":0.57,\"uvIndex\":3.95,\"visibility\":10.0,\"ozone\":390.0,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774476000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.36,\"apparentTemperature\":43.41,\"dewPoint\":28.35,\"humidity\":0.45,\"pressure\":1020.48,\"windSpeed\":12.81,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.56,\"uvIndex\":2.84,\"visibility\":10.0,\"ozone\":386.11,\"nearestStormDistance\":237.03,\"nearestStormBearing\":146}]},\"daily\":{\"summary\":\"Mixed + precipitation on Saturday and Monday, with highs reaching 60\xB0F on Sunday.\",\"icon\":\"sleet\",\"data\":[{\"time\":1773806400,\"summary\":\"Mostly + clear until afternoon, returning overnight.\",\"icon\":\"clear-day\",\"sunriseTime\":1773831768,\"sunsetTime\":1773875149,\"moonPhase\":0.98,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773806400,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":35.8,\"temperatureHighTime\":1773871200,\"temperatureLow\":34.03,\"temperatureLowTime\":1773910800,\"apparentTemperatureHigh\":31.89,\"apparentTemperatureHighTime\":1773860400,\"apparentTemperatureLow\":24.89,\"apparentTemperatureLowTime\":1773882000,\"dewPoint\":12.86,\"humidity\":0.43,\"pressure\":1027.89,\"windSpeed\":9.38,\"windGust\":12.08,\"windGustTime\":1773806400,\"windBearing\":210,\"cloudCover\":0.26,\"uvIndex\":5.29,\"uvIndexTime\":1773856800,\"visibility\":10.0,\"temperatureMin\":29.73,\"temperatureMinTime\":1773838800,\"temperatureMax\":35.8,\"temperatureMaxTime\":1773871200,\"apparentTemperatureMin\":18.06,\"apparentTemperatureMinTime\":1773828000,\"apparentTemperatureMax\":31.89,\"apparentTemperatureMaxTime\":1773860400},{\"time\":1773892800,\"summary\":\"Partly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1773918069,\"sunsetTime\":1773961613,\"moonPhase\":0.02,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773892800,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":43.23,\"temperatureHighTime\":1773957600,\"temperatureLow\":41.51,\"temperatureLowTime\":1774000800,\"apparentTemperatureHigh\":35.19,\"apparentTemperatureHighTime\":1773946800,\"apparentTemperatureLow\":33.87,\"apparentTemperatureLowTime\":1773961200,\"dewPoint\":24.05,\"humidity\":0.55,\"pressure\":1024.83,\"windSpeed\":7.33,\"windGust\":9.91,\"windGustTime\":1773954000,\"windBearing\":154,\"cloudCover\":0.44,\"uvIndex\":5.42,\"uvIndexTime\":1773943200,\"visibility\":10.0,\"temperatureMin\":34.03,\"temperatureMinTime\":1773910800,\"temperatureMax\":43.23,\"temperatureMaxTime\":1773957600,\"apparentTemperatureMin\":26.4,\"apparentTemperatureMinTime\":1773910800,\"apparentTemperatureMax\":35.19,\"apparentTemperatureMaxTime\":1773946800},{\"time\":1773979200,\"summary\":\"Light + rain overnight.\",\"icon\":\"rain\",\"sunriseTime\":1774004370,\"sunsetTime\":1774048077,\"moonPhase\":0.05,\"precipIntensity\":0.0013,\"precipIntensityMax\":0.015,\"precipIntensityMaxTime\":1774062000,\"precipProbability\":0.49,\"precipAccumulation\":0.03,\"precipType\":\"rain\",\"temperatureHigh\":52.02,\"temperatureHighTime\":1774040400,\"temperatureLow\":49.02,\"temperatureLowTime\":1774087200,\"apparentTemperatureHigh\":45.07,\"apparentTemperatureHighTime\":1774033200,\"apparentTemperatureLow\":40.62,\"apparentTemperatureLowTime\":1774062000,\"dewPoint\":34.13,\"humidity\":0.62,\"pressure\":1018.82,\"windSpeed\":9.53,\"windGust\":12.8,\"windGustTime\":1774040400,\"windBearing\":210,\"cloudCover\":0.61,\"uvIndex\":5.15,\"uvIndexTime\":1774029600,\"visibility\":10.0,\"temperatureMin\":41.18,\"temperatureMinTime\":1774008000,\"temperatureMax\":52.02,\"temperatureMaxTime\":1774040400,\"apparentTemperatureMin\":34.65,\"apparentTemperatureMinTime\":1773986400,\"apparentTemperatureMax\":45.07,\"apparentTemperatureMaxTime\":1774033200},{\"time\":1774065600,\"summary\":\"Light + rain in the morning.\",\"icon\":\"rain\",\"sunriseTime\":1774090671,\"sunsetTime\":1774134541,\"moonPhase\":0.09,\"precipIntensity\":0.0088,\"precipIntensityMax\":0.0234,\"precipIntensityMaxTime\":1774083600,\"precipProbability\":0.49,\"precipAccumulation\":0.2102,\"precipType\":\"rain\",\"temperatureHigh\":56.62,\"temperatureHighTime\":1774126800,\"temperatureLow\":48.94,\"temperatureLowTime\":1774159200,\"apparentTemperatureHigh\":50.4,\"apparentTemperatureHighTime\":1774126800,\"apparentTemperatureLow\":41.34,\"apparentTemperatureLowTime\":1774159200,\"dewPoint\":40.98,\"humidity\":0.66,\"pressure\":1010.47,\"windSpeed\":11.36,\"windGust\":15.9,\"windGustTime\":1774126800,\"windBearing\":256,\"cloudCover\":0.64,\"uvIndex\":3.98,\"uvIndexTime\":1774119600,\"visibility\":7.17,\"temperatureMin\":48.83,\"temperatureMinTime\":1774094400,\"temperatureMax\":56.62,\"temperatureMaxTime\":1774126800,\"apparentTemperatureMin\":40.67,\"apparentTemperatureMinTime\":1774065600,\"apparentTemperatureMax\":50.4,\"apparentTemperatureMaxTime\":1774126800},{\"time\":1774152000,\"summary\":\"Breezy + in the evening and flurries and rain overnight.\",\"icon\":\"wind\",\"sunriseTime\":1774176971,\"sunsetTime\":1774221005,\"moonPhase\":0.13,\"precipIntensity\":0.0008,\"precipIntensityMax\":0.01,\"precipIntensityMaxTime\":1774234800,\"precipProbability\":0.28,\"precipAccumulation\":0.02,\"precipType\":\"rain\",\"temperatureHigh\":59.88,\"temperatureHighTime\":1774213200,\"temperatureLow\":44.04,\"temperatureLowTime\":1774260000,\"apparentTemperatureHigh\":53.29,\"apparentTemperatureHighTime\":1774202400,\"apparentTemperatureLow\":31.58,\"apparentTemperatureLowTime\":1774260000,\"dewPoint\":41.04,\"humidity\":0.63,\"pressure\":1008.08,\"windSpeed\":12.06,\"windGust\":16.39,\"windGustTime\":1774213200,\"windBearing\":258,\"cloudCover\":0.74,\"uvIndex\":5.55,\"uvIndexTime\":1774202400,\"visibility\":10.0,\"temperatureMin\":48.94,\"temperatureMinTime\":1774159200,\"temperatureMax\":59.88,\"temperatureMaxTime\":1774213200,\"apparentTemperatureMin\":41.34,\"apparentTemperatureMinTime\":1774159200,\"apparentTemperatureMax\":53.29,\"apparentTemperatureMaxTime\":1774202400},{\"time\":1774238400,\"summary\":\"Flurries + and breezy in the morning.\",\"icon\":\"snow\",\"sunriseTime\":1774263272,\"sunsetTime\":1774307468,\"moonPhase\":0.16,\"precipIntensity\":0.0046,\"precipIntensityMax\":0.0117,\"precipIntensityMaxTime\":1774256400,\"precipProbability\":0.31,\"precipAccumulation\":0.364,\"precipType\":\"snow\",\"temperatureHigh\":43.0,\"temperatureHighTime\":1774263600,\"temperatureLow\":34.81,\"temperatureLowTime\":1774346400,\"apparentTemperatureHigh\":30.57,\"apparentTemperatureHighTime\":1774299600,\"apparentTemperatureLow\":23.23,\"apparentTemperatureLowTime\":1774346400,\"dewPoint\":26.8,\"humidity\":0.53,\"pressure\":1026.56,\"windSpeed\":14.27,\"windGust\":19.1,\"windGustTime\":1774278000,\"windBearing\":164,\"cloudCover\":0.5,\"uvIndex\":1.88,\"uvIndexTime\":1774299600,\"visibility\":9.57,\"temperatureMin\":39.38,\"temperatureMinTime\":1774278000,\"temperatureMax\":51.25,\"temperatureMaxTime\":1774238400,\"apparentTemperatureMin\":26.12,\"apparentTemperatureMinTime\":1774278000,\"apparentTemperatureMax\":40.16,\"apparentTemperatureMaxTime\":1774238400},{\"time\":1774324800,\"summary\":\"Partly + cloudy from afternoon until night.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774349573,\"sunsetTime\":1774393932,\"moonPhase\":0.2,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774324800,\"precipProbability\":0.07,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":42.08,\"temperatureHighTime\":1774386000,\"temperatureLow\":39.58,\"temperatureLowTime\":1774432800,\"apparentTemperatureHigh\":34.71,\"apparentTemperatureHighTime\":1774386000,\"apparentTemperatureLow\":29.6,\"apparentTemperatureLowTime\":1774432800,\"dewPoint\":18.61,\"humidity\":0.44,\"pressure\":1025.86,\"windSpeed\":11.43,\"windGust\":15.32,\"windGustTime\":1774375200,\"windBearing\":189,\"cloudCover\":0.36,\"uvIndex\":5.51,\"uvIndexTime\":1774375200,\"visibility\":10.0,\"temperatureMin\":34.23,\"temperatureMinTime\":1774353600,\"temperatureMax\":42.08,\"temperatureMaxTime\":1774386000,\"apparentTemperatureMin\":22.73,\"apparentTemperatureMinTime\":1774353600,\"apparentTemperatureMax\":34.71,\"apparentTemperatureMaxTime\":1774386000},{\"time\":1774411200,\"summary\":\"Mostly + cloudy until afternoon, returning overnight.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774435873,\"sunsetTime\":1774480395,\"moonPhase\":0.24,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774411200,\"precipProbability\":0.12,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":48.76,\"temperatureHighTime\":1774472400,\"temperatureLow\":42.0,\"temperatureLowTime\":1774512000,\"apparentTemperatureHigh\":41.83,\"apparentTemperatureHighTime\":1774472400,\"apparentTemperatureLow\":31.72,\"apparentTemperatureLowTime\":1774512000,\"dewPoint\":27.59,\"humidity\":0.53,\"pressure\":1020.86,\"windSpeed\":11.18,\"windGust\":15.35,\"windGustTime\":1774472400,\"windBearing\":263,\"cloudCover\":0.62,\"uvIndex\":5.44,\"uvIndexTime\":1774461600,\"visibility\":10.0,\"temperatureMin\":39.58,\"temperatureMinTime\":1774432800,\"temperatureMax\":48.76,\"temperatureMaxTime\":1774472400,\"apparentTemperatureMin\":29.6,\"apparentTemperatureMinTime\":1774432800,\"apparentTemperatureMax\":41.83,\"apparentTemperatureMaxTime\":1774472400}]},\"alerts\":[],\"flags\":{\"sources\":[\"ETOPO1\",\"hrrrsubh\",\"rtma_ru\",\"hrrr_0-18\",\"nbm\",\"nbm_fire\",\"dwd_mosmix\",\"ecmwf_ifs\",\"hrrr_18-48\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"hrrr_subh\":\"2026-03-18 + 21Z\",\"rtma_ru\":\"2026-03-18 23:15Z\",\"hrrr_0-18\":\"2026-03-18 21Z\",\"nbm\":\"2026-03-18 + 19Z\",\"nbm_fire\":\"2026-03-18 18Z\",\"dwd_mosmix\":\"2026-03-18 22Z\",\"ecmwf_ifs\":\"2026-03-18 + 00Z\",\"hrrr_18-48\":\"2026-03-18 18Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":6.81,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:53 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9859' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 b542963649ffc3f71c6540a2347be55a.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - TDh48bimwTAdVVaCa87HP2rQfdWsBdAl3OTmfvWa0S7q5Q0knv7X1Q== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '141' + X-Handler-Time: + - '45.2' + X-Kong-Proxy-Latency: + - '1' + X-Kong-Request-Id: + - 0d8a44614fc70008228d946ac3210270 + X-Kong-Upstream-Latency: + - '47' + X-Node-Id: + - ip-10-0-17-43.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9859' + X-Response-Time: + - '45.204' + X-Server-Time: + - '46.4' + content-length: + - '94228' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/cassettes/pirate_weather/hourly_nyc.yaml b/tests/integration/cassettes/pirate_weather/hourly_nyc.yaml new file mode 100644 index 00000000..1dafb3c2 --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/hourly_nyc.yaml @@ -0,0 +1,238 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/40.7128,-74.006?extend=hourly&units=us + response: + body: + string: "{\"latitude\":40.7128,\"longitude\":-74.006,\"timezone\":\"America/New_York\",\"offset\":-4.0,\"elevation\":62,\"currently\":{\"time\":1773877680,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"nearestStormDistance\":356.19,\"nearestStormBearing\":35,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\",\"temperature\":32.88,\"apparentTemperature\":21.34,\"dewPoint\":16.48,\"humidity\":0.5,\"pressure\":1028.29,\"windSpeed\":10.46,\"windGust\":13.69,\"windBearing\":141,\"cloudCover\":0.0,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":401.24},\"minutely\":{\"summary\":\"Clear + for the hour.\",\"icon\":\"clear-night\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878340,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878400,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878460,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878520,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878580,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878640,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878700,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878760,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878820,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878880,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878940,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879000,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879060,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879120,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879240,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879300,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879360,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879420,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879480,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879540,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879600,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879660,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879720,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879780,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879840,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879900,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879960,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880020,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880080,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880140,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880200,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880260,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880320,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880380,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880440,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880500,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880560,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880620,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"}]},\"hourly\":{\"summary\":\"Partly + cloudy starting tomorrow morning.\",\"icon\":\"partly-cloudy-day\",\"data\":[{\"time\":1773874800,\"summary\":\"Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.62,\"apparentTemperature\":28.36,\"dewPoint\":13.44,\"humidity\":0.4,\"pressure\":1028.7,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":160,\"cloudCover\":0.04,\"uvIndex\":0.28,\"visibility\":10.0,\"ozone\":404.2,\"nearestStormDistance\":351.03,\"nearestStormBearing\":33},{\"time\":1773878400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.49,\"apparentTemperature\":28.15,\"dewPoint\":15.98,\"humidity\":0.44,\"pressure\":1028.19,\"windSpeed\":8.94,\"windGust\":10.95,\"windBearing\":150,\"cloudCover\":0.05,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.5,\"nearestStormDistance\":357.48,\"nearestStormBearing\":35},{\"time\":1773882000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.97,\"apparentTemperature\":28.81,\"dewPoint\":18.12,\"humidity\":0.49,\"pressure\":1029.01,\"windSpeed\":8.04,\"windGust\":10.05,\"windBearing\":150,\"cloudCover\":0.03,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":397.01,\"nearestStormDistance\":227.41,\"nearestStormBearing\":259},{\"time\":1773885600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.15,\"apparentTemperature\":28.8,\"dewPoint\":18.86,\"humidity\":0.51,\"pressure\":1029.03,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.06,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.34,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773889200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.83,\"apparentTemperature\":29.39,\"dewPoint\":19.08,\"humidity\":0.52,\"pressure\":1028.92,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.0,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773892800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.4,\"apparentTemperature\":29.71,\"dewPoint\":19.92,\"humidity\":0.54,\"pressure\":1028.24,\"windSpeed\":6.26,\"windGust\":8.04,\"windBearing\":150,\"cloudCover\":0.21,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.58,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773896400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.93,\"apparentTemperature\":30.0,\"dewPoint\":20.34,\"humidity\":0.55,\"pressure\":1027.83,\"windSpeed\":5.36,\"windGust\":8.04,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":392.93,\"nearestStormDistance\":240.11,\"nearestStormBearing\":260},{\"time\":1773900000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.01,\"apparentTemperature\":30.54,\"dewPoint\":21.34,\"humidity\":0.56,\"pressure\":1027.3,\"windSpeed\":5.36,\"windGust\":7.15,\"windBearing\":150,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.63,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773903600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.49,\"dewPoint\":22.14,\"humidity\":0.59,\"pressure\":1026.66,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.34,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.17,\"nearestStormDistance\":250.34,\"nearestStormBearing\":263},{\"time\":1773907200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.7,\"dewPoint\":22.5,\"humidity\":0.61,\"pressure\":1026.74,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.75,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773910800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.03,\"apparentTemperature\":31.01,\"dewPoint\":22.78,\"humidity\":0.61,\"pressure\":1026.25,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":140,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.66,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773914400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.18,\"apparentTemperature\":30.96,\"dewPoint\":22.62,\"humidity\":0.62,\"pressure\":1025.95,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":120,\"cloudCover\":0.53,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.2,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773918000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.92,\"apparentTemperature\":30.83,\"dewPoint\":23.05,\"humidity\":0.63,\"pressure\":1026.14,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":110,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.27,\"nearestStormDistance\":224.52,\"nearestStormBearing\":263},{\"time\":1773921600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.44,\"apparentTemperature\":31.32,\"dewPoint\":23.81,\"humidity\":0.62,\"pressure\":1026.84,\"windSpeed\":4.47,\"windGust\":6.48,\"windBearing\":110,\"cloudCover\":0.58,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":394.1,\"nearestStormDistance\":249.01,\"nearestStormBearing\":266},{\"time\":1773925200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":36.37,\"apparentTemperature\":32.29,\"dewPoint\":23.81,\"humidity\":0.6,\"pressure\":1026.81,\"windSpeed\":5.36,\"windGust\":6.7,\"windBearing\":130,\"cloudCover\":0.52,\"uvIndex\":1.08,\"visibility\":10.0,\"ozone\":396.41,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1773928800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.47,\"apparentTemperature\":32.23,\"dewPoint\":23.0,\"humidity\":0.56,\"pressure\":1026.22,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":160,\"cloudCover\":0.48,\"uvIndex\":2.14,\"visibility\":10.0,\"ozone\":396.14,\"nearestStormDistance\":180.4,\"nearestStormBearing\":201},{\"time\":1773932400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":38.7,\"apparentTemperature\":33.15,\"dewPoint\":22.05,\"humidity\":0.51,\"pressure\":1025.6,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.49,\"uvIndex\":3.44,\"visibility\":10.0,\"ozone\":398.5,\"nearestStormDistance\":165.94,\"nearestStormBearing\":239},{\"time\":1773936000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.2,\"apparentTemperature\":33.82,\"dewPoint\":21.4,\"humidity\":0.49,\"pressure\":1024.88,\"windSpeed\":8.04,\"windGust\":11.39,\"windBearing\":170,\"cloudCover\":0.52,\"uvIndex\":4.78,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":151.12,\"nearestStormBearing\":225},{\"time\":1773939600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.26,\"apparentTemperature\":34.25,\"dewPoint\":22.05,\"humidity\":0.48,\"pressure\":1024.24,\"windSpeed\":8.94,\"windGust\":13.18,\"windBearing\":170,\"cloudCover\":0.51,\"uvIndex\":5.06,\"visibility\":10.0,\"ozone\":405.51,\"nearestStormDistance\":146.62,\"nearestStormBearing\":233},{\"time\":1773943200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.45,\"apparentTemperature\":34.84,\"dewPoint\":22.82,\"humidity\":0.47,\"pressure\":1023.43,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":5.42,\"visibility\":10.0,\"ozone\":404.17,\"nearestStormDistance\":145.3,\"nearestStormBearing\":240},{\"time\":1773946800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.19,\"apparentTemperature\":35.74,\"dewPoint\":23.4,\"humidity\":0.47,\"pressure\":1023.23,\"windSpeed\":10.72,\"windGust\":14.74,\"windBearing\":170,\"cloudCover\":0.39,\"uvIndex\":4.9,\"visibility\":10.0,\"ozone\":399.76,\"nearestStormDistance\":124.91,\"nearestStormBearing\":243},{\"time\":1773950400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.46,\"apparentTemperature\":36.07,\"dewPoint\":24.39,\"humidity\":0.48,\"pressure\":1023.08,\"windSpeed\":11.62,\"windGust\":14.97,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":3.89,\"visibility\":10.0,\"ozone\":398.15,\"nearestStormDistance\":129.62,\"nearestStormBearing\":225},{\"time\":1773954000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.73,\"apparentTemperature\":36.01,\"dewPoint\":24.93,\"humidity\":0.49,\"pressure\":1022.57,\"windSpeed\":11.62,\"windGust\":15.86,\"windBearing\":160,\"cloudCover\":0.4,\"uvIndex\":2.57,\"visibility\":10.0,\"ozone\":397.86,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1773957600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.23,\"apparentTemperature\":36.99,\"dewPoint\":25.27,\"humidity\":0.5,\"pressure\":1022.38,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":160,\"cloudCover\":0.45,\"uvIndex\":1.25,\"visibility\":10.0,\"ozone\":398.76,\"nearestStormDistance\":93.81,\"nearestStormBearing\":243},{\"time\":1773961200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.05,\"apparentTemperature\":37.56,\"dewPoint\":26.82,\"humidity\":0.52,\"pressure\":1022.34,\"windSpeed\":9.83,\"windGust\":12.73,\"windBearing\":160,\"cloudCover\":0.39,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":401.36,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1773964800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.14,\"apparentTemperature\":37.63,\"dewPoint\":28.24,\"humidity\":0.55,\"pressure\":1022.62,\"windSpeed\":8.94,\"windGust\":11.62,\"windBearing\":160,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.26,\"nearestStormDistance\":90.27,\"nearestStormBearing\":201},{\"time\":1773968400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":37.85,\"dewPoint\":29.77,\"humidity\":0.59,\"pressure\":1022.45,\"windSpeed\":8.04,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":143.65,\"nearestStormBearing\":159},{\"time\":1773972000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.93,\"apparentTemperature\":38.41,\"dewPoint\":29.93,\"humidity\":0.6,\"pressure\":1021.95,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":180,\"cloudCover\":0.36,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.62,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773975600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.84,\"apparentTemperature\":38.93,\"dewPoint\":30.92,\"humidity\":0.61,\"pressure\":1022.17,\"windSpeed\":7.15,\"windGust\":9.38,\"windBearing\":190,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.73,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773979200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.11,\"apparentTemperature\":39.09,\"dewPoint\":31.23,\"humidity\":0.63,\"pressure\":1022.29,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":200,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":405.77,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1773982800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":39.15,\"dewPoint\":31.35,\"humidity\":0.64,\"pressure\":1021.96,\"windSpeed\":6.26,\"windGust\":8.27,\"windBearing\":220,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.51,\"nearestStormDistance\":252.47,\"nearestStormBearing\":145},{\"time\":1773986400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.17,\"apparentTemperature\":39.18,\"dewPoint\":31.48,\"humidity\":0.64,\"pressure\":1021.54,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":230,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":403.63,\"nearestStormDistance\":283.51,\"nearestStormBearing\":149},{\"time\":1773990000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.0,\"apparentTemperature\":38.94,\"dewPoint\":31.72,\"humidity\":0.65,\"pressure\":1021.22,\"windSpeed\":5.96,\"windGust\":8.19,\"windBearing\":235,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.56,\"nearestStormDistance\":335.93,\"nearestStormBearing\":150},{\"time\":1773993600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.84,\"apparentTemperature\":38.69,\"dewPoint\":31.96,\"humidity\":0.66,\"pressure\":1021.39,\"windSpeed\":5.66,\"windGust\":7.89,\"windBearing\":240,\"cloudCover\":0.48,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.77,\"nearestStormDistance\":267.07,\"nearestStormBearing\":161},{\"time\":1773997200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.68,\"apparentTemperature\":38.44,\"dewPoint\":32.2,\"humidity\":0.68,\"pressure\":1021.25,\"windSpeed\":5.36,\"windGust\":7.6,\"windBearing\":245,\"cloudCover\":0.44,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":388.23,\"nearestStormBearing\":33},{\"time\":1774000800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.51,\"apparentTemperature\":38.2,\"dewPoint\":32.44,\"humidity\":0.69,\"pressure\":1021.74,\"windSpeed\":5.06,\"windGust\":7.3,\"windBearing\":250,\"cloudCover\":0.41,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.47,\"nearestStormDistance\":368.02,\"nearestStormBearing\":206},{\"time\":1774004400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.35,\"apparentTemperature\":37.95,\"dewPoint\":32.68,\"humidity\":0.7,\"pressure\":1021.6,\"windSpeed\":4.77,\"windGust\":7.0,\"windBearing\":255,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.13,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774008000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.18,\"apparentTemperature\":37.71,\"dewPoint\":32.92,\"humidity\":0.71,\"pressure\":1021.73,\"windSpeed\":4.47,\"windGust\":6.7,\"windBearing\":260,\"cloudCover\":0.35,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":397.97,\"nearestStormDistance\":421.2,\"nearestStormBearing\":218},{\"time\":1774011600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.57,\"apparentTemperature\":39.55,\"dewPoint\":32.76,\"humidity\":0.69,\"pressure\":1021.52,\"windSpeed\":5.55,\"windGust\":7.6,\"windBearing\":248,\"cloudCover\":0.39,\"uvIndex\":1.13,\"visibility\":10.0,\"ozone\":395.53,\"nearestStormDistance\":367.17,\"nearestStormBearing\":214},{\"time\":1774015200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":43.95,\"apparentTemperature\":41.39,\"dewPoint\":32.59,\"humidity\":0.66,\"pressure\":1020.51,\"windSpeed\":6.64,\"windGust\":8.49,\"windBearing\":236,\"cloudCover\":0.44,\"uvIndex\":2.44,\"visibility\":10.0,\"ozone\":395.04,\"nearestStormDistance\":299.32,\"nearestStormBearing\":209},{\"time\":1774018800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.34,\"apparentTemperature\":43.23,\"dewPoint\":32.43,\"humidity\":0.64,\"pressure\":1020.97,\"windSpeed\":7.72,\"windGust\":9.38,\"windBearing\":224,\"cloudCover\":0.48,\"uvIndex\":3.72,\"visibility\":10.0,\"ozone\":394.63,\"nearestStormDistance\":270.38,\"nearestStormBearing\":201},{\"time\":1774022400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.73,\"apparentTemperature\":45.08,\"dewPoint\":33.12,\"humidity\":0.61,\"pressure\":1020.41,\"windSpeed\":8.81,\"windGust\":11.47,\"windBearing\":212,\"cloudCover\":0.53,\"uvIndex\":4.44,\"visibility\":10.0,\"ozone\":395.99,\"nearestStormDistance\":243.43,\"nearestStormBearing\":188},{\"time\":1774026000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.11,\"apparentTemperature\":46.92,\"dewPoint\":33.8,\"humidity\":0.59,\"pressure\":1019.22,\"windSpeed\":9.89,\"windGust\":13.55,\"windBearing\":200,\"cloudCover\":0.57,\"uvIndex\":4.4,\"visibility\":10.0,\"ozone\":396.23,\"nearestStormDistance\":242.1,\"nearestStormBearing\":180},{\"time\":1774029600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.5,\"apparentTemperature\":48.76,\"dewPoint\":34.48,\"humidity\":0.56,\"pressure\":1017.07,\"windSpeed\":10.98,\"windGust\":15.64,\"windBearing\":189,\"cloudCover\":0.62,\"uvIndex\":5.15,\"visibility\":10.0,\"ozone\":395.58,\"nearestStormDistance\":222.48,\"nearestStormBearing\":219},{\"time\":1774033200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.89,\"apparentTemperature\":50.61,\"dewPoint\":34.78,\"humidity\":0.54,\"pressure\":1017.31,\"windSpeed\":12.06,\"windGust\":17.13,\"windBearing\":177,\"cloudCover\":0.66,\"uvIndex\":4.74,\"visibility\":10.0,\"ozone\":396.7,\"nearestStormDistance\":152.64,\"nearestStormBearing\":212},{\"time\":1774036800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.45,\"apparentTemperature\":51.14,\"dewPoint\":35.07,\"humidity\":0.54,\"pressure\":1016.48,\"windSpeed\":13.4,\"windGust\":18.62,\"windBearing\":173,\"cloudCover\":0.71,\"uvIndex\":3.84,\"visibility\":10.0,\"ozone\":399.67,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774040400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.02,\"apparentTemperature\":51.67,\"dewPoint\":35.37,\"humidity\":0.54,\"pressure\":1015.65,\"windSpeed\":14.74,\"windGust\":20.11,\"windBearing\":170,\"cloudCover\":0.75,\"uvIndex\":2.41,\"visibility\":10.0,\"ozone\":398.36,\"nearestStormDistance\":155.63,\"nearestStormBearing\":180},{\"time\":1774044000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.89,\"apparentTemperature\":51.63,\"dewPoint\":36.12,\"humidity\":0.55,\"pressure\":1015.28,\"windSpeed\":14.89,\"windGust\":19.96,\"windBearing\":173,\"cloudCover\":0.79,\"uvIndex\":1.18,\"visibility\":10.0,\"ozone\":397.25,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774047600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.76,\"apparentTemperature\":51.58,\"dewPoint\":36.87,\"humidity\":0.57,\"pressure\":1014.9,\"windSpeed\":15.04,\"windGust\":19.81,\"windBearing\":177,\"cloudCover\":0.84,\"uvIndex\":0.26,\"visibility\":10.0,\"ozone\":396.55,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774051200,\"summary\":\"Breezy + and Overcast\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.64,\"apparentTemperature\":51.53,\"dewPoint\":37.62,\"humidity\":0.58,\"pressure\":1014.53,\"windSpeed\":15.19,\"windGust\":19.66,\"windBearing\":180,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.51,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774054800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.005,\"precipProbability\":0.23,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.005,\"precipType\":\"rain\",\"temperature\":51.51,\"apparentTemperature\":51.42,\"dewPoint\":38.17,\"humidity\":0.6,\"pressure\":1014.45,\"windSpeed\":14.89,\"windGust\":19.14,\"windBearing\":183,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.14,\"nearestStormDistance\":70.38,\"nearestStormBearing\":194},{\"time\":1774058400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.36,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.39,\"apparentTemperature\":51.31,\"dewPoint\":38.72,\"humidity\":0.61,\"pressure\":1014.37,\"windSpeed\":14.6,\"windGust\":18.62,\"windBearing\":187,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.49,\"nearestStormDistance\":52.24,\"nearestStormBearing\":236},{\"time\":1774062000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":51.26,\"apparentTemperature\":51.21,\"dewPoint\":39.27,\"humidity\":0.63,\"pressure\":1014.29,\"windSpeed\":14.3,\"windGust\":18.1,\"windBearing\":190,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.47,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774065600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.85,\"apparentTemperature\":50.86,\"dewPoint\":40.07,\"humidity\":0.66,\"pressure\":1013.54,\"windSpeed\":13.7,\"windGust\":17.72,\"windBearing\":193,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":8.37,\"ozone\":387.75,\"nearestStormDistance\":21.68,\"nearestStormBearing\":135},{\"time\":1774069200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.43,\"apparentTemperature\":50.51,\"dewPoint\":40.87,\"humidity\":0.68,\"pressure\":1012.8,\"windSpeed\":13.11,\"windGust\":17.35,\"windBearing\":197,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":6.66,\"ozone\":386.72,\"nearestStormDistance\":13.1,\"nearestStormBearing\":270},{\"time\":1774072800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.02,\"apparentTemperature\":50.16,\"dewPoint\":41.67,\"humidity\":0.71,\"pressure\":1012.06,\"windSpeed\":12.51,\"windGust\":16.98,\"windBearing\":200,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":4.95,\"ozone\":385.37,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774076400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0178,\"precipProbability\":0.49,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0178,\"precipType\":\"rain\",\"temperature\":49.72,\"apparentTemperature\":48.34,\"dewPoint\":41.97,\"humidity\":0.73,\"pressure\":1011.54,\"windSpeed\":11.91,\"windGust\":16.31,\"windBearing\":200,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":3.78,\"ozone\":383.4,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774080000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0206,\"precipProbability\":0.48,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0206,\"precipType\":\"rain\",\"temperature\":49.42,\"apparentTemperature\":46.51,\"dewPoint\":42.27,\"humidity\":0.76,\"pressure\":1011.01,\"windSpeed\":11.32,\"windGust\":15.64,\"windBearing\":200,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":2.6,\"ozone\":384.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774083600,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.12,\"apparentTemperature\":44.69,\"dewPoint\":42.57,\"humidity\":0.78,\"pressure\":1010.48,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":200,\"cloudCover\":0.75,\"uvIndex\":0.0,\"visibility\":1.43,\"ozone\":385.86,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774087200,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.02,\"apparentTemperature\":44.7,\"dewPoint\":42.77,\"humidity\":0.78,\"pressure\":1010.63,\"windSpeed\":10.43,\"windGust\":14.6,\"windBearing\":213,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":1.64,\"ozone\":388.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774090800,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.93,\"apparentTemperature\":44.7,\"dewPoint\":42.97,\"humidity\":0.79,\"pressure\":1010.77,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":227,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":1.86,\"ozone\":391.55,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774094400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.83,\"apparentTemperature\":44.71,\"dewPoint\":43.18,\"humidity\":0.79,\"pressure\":1010.92,\"windSpeed\":9.83,\"windGust\":13.85,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":0.02,\"visibility\":2.07,\"ozone\":393.68,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774098000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0161,\"precipProbability\":0.36,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0161,\"precipType\":\"rain\",\"temperature\":49.53,\"apparentTemperature\":46.62,\"dewPoint\":42.64,\"humidity\":0.76,\"pressure\":1010.95,\"windSpeed\":10.13,\"windGust\":14.45,\"windBearing\":263,\"cloudCover\":0.63,\"uvIndex\":0.24,\"visibility\":4.32,\"ozone\":397.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774101600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0089,\"precipProbability\":0.25,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0089,\"precipType\":\"rain\",\"temperature\":50.23,\"apparentTemperature\":48.54,\"dewPoint\":42.11,\"humidity\":0.74,\"pressure\":1010.98,\"windSpeed\":10.43,\"windGust\":15.04,\"windBearing\":287,\"cloudCover\":0.56,\"uvIndex\":0.42,\"visibility\":6.57,\"ozone\":397.24,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774105200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":50.94,\"apparentTemperature\":50.45,\"dewPoint\":41.58,\"humidity\":0.71,\"pressure\":1011.01,\"windSpeed\":10.72,\"windGust\":15.64,\"windBearing\":310,\"cloudCover\":0.5,\"uvIndex\":0.63,\"visibility\":8.83,\"ozone\":395.11,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774108800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":52.2,\"apparentTemperature\":52.06,\"dewPoint\":41.38,\"humidity\":0.67,\"pressure\":1010.65,\"windSpeed\":11.02,\"windGust\":16.31,\"windBearing\":313,\"cloudCover\":0.52,\"uvIndex\":1.47,\"visibility\":9.25,\"ozone\":393.52,\"nearestStormDistance\":21.71,\"nearestStormBearing\":45},{\"time\":1774112400,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":53.46,\"apparentTemperature\":53.67,\"dewPoint\":41.18,\"humidity\":0.63,\"pressure\":1010.29,\"windSpeed\":11.32,\"windGust\":16.98,\"windBearing\":317,\"cloudCover\":0.53,\"uvIndex\":2.39,\"visibility\":9.68,\"ozone\":392.9,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774116000,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":54.72,\"apparentTemperature\":55.27,\"dewPoint\":40.98,\"humidity\":0.59,\"pressure\":1009.93,\"windSpeed\":11.62,\"windGust\":17.65,\"windBearing\":320,\"cloudCover\":0.55,\"uvIndex\":2.96,\"visibility\":10.0,\"ozone\":389.31,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774119600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0011,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0011,\"precipType\":\"rain\",\"temperature\":55.35,\"apparentTemperature\":55.87,\"dewPoint\":40.52,\"humidity\":0.57,\"pressure\":1009.52,\"windSpeed\":11.91,\"windGust\":17.8,\"windBearing\":317,\"cloudCover\":0.54,\"uvIndex\":3.98,\"visibility\":10.0,\"ozone\":381.62,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774123200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0006,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0006,\"precipType\":\"rain\",\"temperature\":55.99,\"apparentTemperature\":56.47,\"dewPoint\":40.06,\"humidity\":0.55,\"pressure\":1009.1,\"windSpeed\":12.21,\"windGust\":17.95,\"windBearing\":313,\"cloudCover\":0.54,\"uvIndex\":3.39,\"visibility\":10.0,\"ozone\":376.35,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774126800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":56.62,\"apparentTemperature\":57.07,\"dewPoint\":39.6,\"humidity\":0.53,\"pressure\":1008.68,\"windSpeed\":12.51,\"windGust\":18.1,\"windBearing\":310,\"cloudCover\":0.53,\"uvIndex\":1.41,\"visibility\":10.0,\"ozone\":370.1,\"nearestStormDistance\":62.95,\"nearestStormBearing\":63},{\"time\":1774130400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.78,\"apparentTemperature\":56.1,\"dewPoint\":39.3,\"humidity\":0.54,\"pressure\":1009.0,\"windSpeed\":12.21,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.52,\"uvIndex\":0.54,\"visibility\":10.0,\"ozone\":364.83,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774134000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.93,\"apparentTemperature\":55.12,\"dewPoint\":39.01,\"humidity\":0.55,\"pressure\":1009.32,\"windSpeed\":11.91,\"windGust\":16.46,\"windBearing\":297,\"cloudCover\":0.51,\"uvIndex\":0.22,\"visibility\":10.0,\"ozone\":363.13,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774137600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.09,\"apparentTemperature\":54.14,\"dewPoint\":38.71,\"humidity\":0.56,\"pressure\":1009.64,\"windSpeed\":11.62,\"windGust\":15.64,\"windBearing\":290,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":359.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774141200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.09,\"apparentTemperature\":53.19,\"dewPoint\":39.06,\"humidity\":0.59,\"pressure\":1009.55,\"windSpeed\":11.02,\"windGust\":14.6,\"windBearing\":253,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":356.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774144800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.09,\"apparentTemperature\":52.23,\"dewPoint\":39.41,\"humidity\":0.62,\"pressure\":1009.46,\"windSpeed\":10.43,\"windGust\":13.55,\"windBearing\":217,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":354.23,\"nearestStormDistance\":168.25,\"nearestStormBearing\":59},{\"time\":1774148400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.1,\"apparentTemperature\":51.28,\"dewPoint\":39.76,\"humidity\":0.65,\"pressure\":1009.36,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":180,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.08,\"nearestStormDistance\":226.79,\"nearestStormBearing\":47},{\"time\":1774152000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.38,\"apparentTemperature\":49.3,\"dewPoint\":39.79,\"humidity\":0.66,\"pressure\":1008.94,\"windSpeed\":9.53,\"windGust\":12.29,\"windBearing\":193,\"cloudCover\":0.68,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":349.54,\"nearestStormDistance\":253.21,\"nearestStormBearing\":59},{\"time\":1774155600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.66,\"apparentTemperature\":47.33,\"dewPoint\":39.83,\"humidity\":0.68,\"pressure\":1008.52,\"windSpeed\":9.23,\"windGust\":12.06,\"windBearing\":207,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.8,\"nearestStormDistance\":264.46,\"nearestStormBearing\":56},{\"time\":1774159200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.94,\"apparentTemperature\":45.36,\"dewPoint\":39.87,\"humidity\":0.69,\"pressure\":1008.1,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":220,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":345.5,\"nearestStormDistance\":245.1,\"nearestStormBearing\":192},{\"time\":1774162800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.07,\"apparentTemperature\":45.39,\"dewPoint\":40.41,\"humidity\":0.71,\"pressure\":1007.39,\"windSpeed\":8.94,\"windGust\":12.14,\"windBearing\":227,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":342.51,\"nearestStormDistance\":278.62,\"nearestStormBearing\":208},{\"time\":1774166400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.2,\"apparentTemperature\":45.42,\"dewPoint\":40.96,\"humidity\":0.73,\"pressure\":1006.69,\"windSpeed\":8.94,\"windGust\":12.44,\"windBearing\":233,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":338.56,\"nearestStormDistance\":258.01,\"nearestStormBearing\":206},{\"time\":1774170000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.33,\"apparentTemperature\":45.45,\"dewPoint\":41.5,\"humidity\":0.75,\"pressure\":1005.98,\"windSpeed\":8.94,\"windGust\":12.73,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":334.91,\"nearestStormDistance\":215.43,\"nearestStormBearing\":225},{\"time\":1774173600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.3,\"apparentTemperature\":45.42,\"dewPoint\":41.71,\"humidity\":0.75,\"pressure\":1005.95,\"windSpeed\":9.23,\"windGust\":12.66,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.76,\"nearestStormDistance\":189.33,\"nearestStormBearing\":210},{\"time\":1774177200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.27,\"apparentTemperature\":45.4,\"dewPoint\":41.92,\"humidity\":0.75,\"pressure\":1005.91,\"windSpeed\":9.53,\"windGust\":12.58,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.24,\"nearestStormDistance\":177.17,\"nearestStormBearing\":196},{\"time\":1774180800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.24,\"apparentTemperature\":45.37,\"dewPoint\":42.13,\"humidity\":0.75,\"pressure\":1005.87,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":330.76,\"nearestStormDistance\":160.35,\"nearestStormBearing\":198},{\"time\":1774184400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.6,\"apparentTemperature\":47.97,\"dewPoint\":41.78,\"humidity\":0.71,\"pressure\":1005.69,\"windSpeed\":10.43,\"windGust\":13.78,\"windBearing\":240,\"cloudCover\":0.73,\"uvIndex\":1.05,\"visibility\":10.0,\"ozone\":328.48,\"nearestStormDistance\":194.91,\"nearestStormBearing\":214},{\"time\":1774188000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.96,\"apparentTemperature\":50.57,\"dewPoint\":41.43,\"humidity\":0.68,\"pressure\":1005.51,\"windSpeed\":11.02,\"windGust\":15.04,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":2.17,\"visibility\":10.0,\"ozone\":328.87,\"nearestStormDistance\":209.08,\"nearestStormBearing\":189},{\"time\":1774191600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.31,\"apparentTemperature\":53.17,\"dewPoint\":41.07,\"humidity\":0.64,\"pressure\":1005.33,\"windSpeed\":11.62,\"windGust\":16.31,\"windBearing\":240,\"cloudCover\":0.64,\"uvIndex\":3.41,\"visibility\":10.0,\"ozone\":328.31,\"nearestStormDistance\":246.92,\"nearestStormBearing\":148},{\"time\":1774195200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.26,\"apparentTemperature\":55.17,\"dewPoint\":41.19,\"humidity\":0.6,\"pressure\":1005.07,\"windSpeed\":12.21,\"windGust\":17.57,\"windBearing\":243,\"cloudCover\":0.65,\"uvIndex\":4.25,\"visibility\":10.0,\"ozone\":325.51,\"nearestStormDistance\":179.84,\"nearestStormBearing\":217},{\"time\":1774198800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.2,\"apparentTemperature\":57.16,\"dewPoint\":41.31,\"humidity\":0.57,\"pressure\":1004.81,\"windSpeed\":12.81,\"windGust\":18.84,\"windBearing\":247,\"cloudCover\":0.66,\"uvIndex\":4.83,\"visibility\":10.0,\"ozone\":324.7,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774202400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.14,\"apparentTemperature\":59.16,\"dewPoint\":41.43,\"humidity\":0.53,\"pressure\":1004.55,\"windSpeed\":13.4,\"windGust\":20.11,\"windBearing\":250,\"cloudCover\":0.67,\"uvIndex\":5.55,\"visibility\":10.0,\"ozone\":324.95,\"nearestStormDistance\":227.48,\"nearestStormBearing\":119},{\"time\":1774206000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.39,\"apparentTemperature\":59.37,\"dewPoint\":41.45,\"humidity\":0.52,\"pressure\":1005.49,\"windSpeed\":13.93,\"windGust\":20.4,\"windBearing\":260,\"cloudCover\":0.69,\"uvIndex\":4.84,\"visibility\":10.0,\"ozone\":321.6,\"nearestStormDistance\":176.23,\"nearestStormBearing\":241},{\"time\":1774209600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.64,\"apparentTemperature\":59.57,\"dewPoint\":41.47,\"humidity\":0.51,\"pressure\":1006.43,\"windSpeed\":14.45,\"windGust\":20.7,\"windBearing\":270,\"cloudCover\":0.72,\"uvIndex\":3.74,\"visibility\":10.0,\"ozone\":321.19,\"nearestStormDistance\":122.3,\"nearestStormBearing\":219},{\"time\":1774213200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0154,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.88,\"apparentTemperature\":59.77,\"dewPoint\":41.49,\"humidity\":0.5,\"pressure\":1007.38,\"windSpeed\":14.97,\"windGust\":21.0,\"windBearing\":280,\"cloudCover\":0.74,\"uvIndex\":2.67,\"visibility\":10.0,\"ozone\":318.76,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774216800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.05,\"apparentTemperature\":59.0,\"dewPoint\":41.39,\"humidity\":0.51,\"pressure\":1009.18,\"windSpeed\":15.12,\"windGust\":20.55,\"windBearing\":290,\"cloudCover\":0.75,\"uvIndex\":1.36,\"visibility\":10.0,\"ozone\":317.64,\"nearestStormDistance\":103.76,\"nearestStormBearing\":180},{\"time\":1774220400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0209,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":58.21,\"apparentTemperature\":58.23,\"dewPoint\":41.29,\"humidity\":0.53,\"pressure\":1010.99,\"windSpeed\":15.27,\"windGust\":20.11,\"windBearing\":300,\"cloudCover\":0.75,\"uvIndex\":0.35,\"visibility\":10.0,\"ozone\":315.61,\"nearestStormDistance\":86.46,\"nearestStormBearing\":180},{\"time\":1774224000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0236,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.38,\"apparentTemperature\":57.45,\"dewPoint\":41.2,\"humidity\":0.54,\"pressure\":1012.8,\"windSpeed\":15.41,\"windGust\":19.66,\"windBearing\":310,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":314.16,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1774227600,\"summary\":\"Possible + Drizzle and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0033,\"precipProbability\":0.23,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0033,\"precipType\":\"rain\",\"temperature\":55.75,\"apparentTemperature\":55.71,\"dewPoint\":40.65,\"humidity\":0.56,\"pressure\":1014.28,\"windSpeed\":15.34,\"windGust\":19.51,\"windBearing\":320,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":312.5,\"nearestStormDistance\":64.95,\"nearestStormBearing\":225},{\"time\":1774231200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0067,\"precipProbability\":0.25,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0067,\"precipType\":\"rain\",\"temperature\":54.13,\"apparentTemperature\":53.96,\"dewPoint\":40.11,\"humidity\":0.59,\"pressure\":1015.75,\"windSpeed\":15.27,\"windGust\":19.36,\"windBearing\":330,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":310.26,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774234800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":52.5,\"apparentTemperature\":52.21,\"dewPoint\":39.56,\"humidity\":0.61,\"pressure\":1017.23,\"windSpeed\":15.19,\"windGust\":19.21,\"windBearing\":340,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":308.09,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774238400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.015,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.25,\"apparentTemperature\":49.24,\"dewPoint\":38.65,\"humidity\":0.62,\"pressure\":1018.56,\"windSpeed\":14.89,\"windGust\":18.99,\"windBearing\":230,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":306.08,\"nearestStormDistance\":53.49,\"nearestStormBearing\":198},{\"time\":1774242000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":49.99,\"apparentTemperature\":46.26,\"dewPoint\":37.75,\"humidity\":0.62,\"pressure\":1019.9,\"windSpeed\":14.6,\"windGust\":18.77,\"windBearing\":120,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.54,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774245600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0388,\"precipType\":\"snow\",\"temperature\":48.74,\"apparentTemperature\":43.29,\"dewPoint\":36.84,\"humidity\":0.63,\"pressure\":1021.24,\"windSpeed\":14.3,\"windGust\":18.54,\"windBearing\":10,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.66,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774249200,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0106,\"precipProbability\":0.29,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0407,\"precipType\":\"snow\",\"temperature\":47.52,\"apparentTemperature\":41.64,\"dewPoint\":35.52,\"humidity\":0.63,\"pressure\":1022.07,\"windSpeed\":14.6,\"windGust\":18.7,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.84,\"nearestStormDistance\":62.62,\"nearestStormBearing\":116},{\"time\":1774252800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0111,\"precipProbability\":0.3,\"precipIntensityError\":0.0213,\"precipAccumulation\":0.0425,\"precipType\":\"snow\",\"temperature\":46.29,\"apparentTemperature\":40.0,\"dewPoint\":34.2,\"humidity\":0.62,\"pressure\":1022.9,\"windSpeed\":14.89,\"windGust\":18.85,\"windBearing\":10,\"cloudCover\":0.57,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.6,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774256400,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0232,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":45.07,\"apparentTemperature\":38.35,\"dewPoint\":32.88,\"humidity\":0.62,\"pressure\":1023.73,\"windSpeed\":15.19,\"windGust\":19.01,\"windBearing\":10,\"cloudCover\":0.47,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":302.96,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774260000,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":44.04,\"apparentTemperature\":37.11,\"dewPoint\":31.69,\"humidity\":0.61,\"pressure\":1024.84,\"windSpeed\":15.19,\"windGust\":19.53,\"windBearing\":10,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.26,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774263600,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":43.0,\"apparentTemperature\":35.86,\"dewPoint\":30.51,\"humidity\":0.61,\"pressure\":1025.96,\"windSpeed\":15.19,\"windGust\":20.04,\"windBearing\":10,\"cloudCover\":0.56,\"uvIndex\":0.0,\"visibility\":7.22,\"ozone\":304.9,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774267200,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":41.97,\"apparentTemperature\":34.61,\"dewPoint\":29.32,\"humidity\":0.6,\"pressure\":1027.07,\"windSpeed\":15.19,\"windGust\":20.55,\"windBearing\":10,\"cloudCover\":0.6,\"uvIndex\":0.04,\"visibility\":9.35,\"ozone\":305.52,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774270800,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0078,\"precipProbability\":0.26,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0296,\"precipType\":\"snow\",\"temperature\":41.11,\"apparentTemperature\":33.63,\"dewPoint\":27.9,\"humidity\":0.58,\"pressure\":1027.55,\"windSpeed\":15.19,\"windGust\":20.63,\"windBearing\":10,\"cloudCover\":0.62,\"uvIndex\":0.1,\"visibility\":8.57,\"ozone\":306.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774274400,\"summary\":\"Possible + Flurries and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0039,\"precipProbability\":0.21,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0148,\"precipType\":\"snow\",\"temperature\":40.24,\"apparentTemperature\":32.64,\"dewPoint\":26.47,\"humidity\":0.57,\"pressure\":1028.03,\"windSpeed\":15.19,\"windGust\":20.72,\"windBearing\":10,\"cloudCover\":0.65,\"uvIndex\":0.16,\"visibility\":7.79,\"ozone\":307.39,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774278000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":31.66,\"dewPoint\":25.05,\"humidity\":0.55,\"pressure\":1028.51,\"windSpeed\":15.19,\"windGust\":20.8,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.22,\"visibility\":7.01,\"ozone\":308.32,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774281600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.83,\"apparentTemperature\":32.26,\"dewPoint\":24.23,\"humidity\":0.52,\"pressure\":1028.42,\"windSpeed\":14.6,\"windGust\":20.64,\"windBearing\":127,\"cloudCover\":0.61,\"uvIndex\":0.41,\"visibility\":9.67,\"ozone\":309.92,\"nearestStormDistance\":4.37,\"nearestStormBearing\":30},{\"time\":1774285200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.28,\"apparentTemperature\":32.86,\"dewPoint\":23.41,\"humidity\":0.5,\"pressure\":1028.34,\"windSpeed\":14.0,\"windGust\":20.49,\"windBearing\":243,\"cloudCover\":0.54,\"uvIndex\":0.6,\"visibility\":10.0,\"ozone\":311.51,\"nearestStormDistance\":8.73,\"nearestStormBearing\":60},{\"time\":1774288800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.73,\"apparentTemperature\":33.46,\"dewPoint\":22.59,\"humidity\":0.47,\"pressure\":1028.26,\"windSpeed\":13.4,\"windGust\":20.33,\"windBearing\":0,\"cloudCover\":0.48,\"uvIndex\":0.78,\"visibility\":10.0,\"ozone\":313.1,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774292400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.19,\"apparentTemperature\":34.12,\"dewPoint\":22.07,\"humidity\":0.45,\"pressure\":1028.2,\"windSpeed\":13.55,\"windGust\":20.25,\"windBearing\":357,\"cloudCover\":0.44,\"uvIndex\":1.15,\"visibility\":10.0,\"ozone\":315.84,\"nearestStormDistance\":28.08,\"nearestStormBearing\":131},{\"time\":1774296000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.65,\"apparentTemperature\":34.78,\"dewPoint\":21.55,\"humidity\":0.44,\"pressure\":1028.14,\"windSpeed\":13.7,\"windGust\":20.18,\"windBearing\":353,\"cloudCover\":0.39,\"uvIndex\":1.51,\"visibility\":10.0,\"ozone\":318.57,\"nearestStormDistance\":43.07,\"nearestStormBearing\":172},{\"time\":1774299600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.12,\"apparentTemperature\":35.44,\"dewPoint\":21.04,\"humidity\":0.42,\"pressure\":1028.08,\"windSpeed\":13.85,\"windGust\":20.11,\"windBearing\":350,\"cloudCover\":0.35,\"uvIndex\":1.88,\"visibility\":10.0,\"ozone\":321.3,\"nearestStormDistance\":58.05,\"nearestStormBearing\":213},{\"time\":1774303200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.09,\"apparentTemperature\":35.34,\"dewPoint\":20.79,\"humidity\":0.42,\"pressure\":1028.61,\"windSpeed\":13.78,\"windGust\":18.99,\"windBearing\":350,\"cloudCover\":0.34,\"uvIndex\":1.4,\"visibility\":10.0,\"ozone\":323.19,\"nearestStormDistance\":53.14,\"nearestStormBearing\":217},{\"time\":1774306800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.06,\"apparentTemperature\":35.25,\"dewPoint\":20.53,\"humidity\":0.42,\"pressure\":1029.15,\"windSpeed\":13.7,\"windGust\":17.87,\"windBearing\":350,\"cloudCover\":0.32,\"uvIndex\":0.92,\"visibility\":10.0,\"ozone\":325.07,\"nearestStormDistance\":48.24,\"nearestStormBearing\":221},{\"time\":1774310400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.03,\"apparentTemperature\":35.15,\"dewPoint\":20.28,\"humidity\":0.42,\"pressure\":1029.68,\"windSpeed\":13.63,\"windGust\":16.76,\"windBearing\":350,\"cloudCover\":0.31,\"uvIndex\":0.44,\"visibility\":10.0,\"ozone\":326.96,\"nearestStormDistance\":43.33,\"nearestStormBearing\":225},{\"time\":1774314000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.2,\"apparentTemperature\":34.12,\"dewPoint\":20.12,\"humidity\":0.43,\"pressure\":1029.87,\"windSpeed\":13.26,\"windGust\":16.31,\"windBearing\":347,\"cloudCover\":0.26,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":329.73,\"nearestStormDistance\":48.28,\"nearestStormBearing\":258},{\"time\":1774317600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.37,\"apparentTemperature\":33.09,\"dewPoint\":19.96,\"humidity\":0.43,\"pressure\":1030.06,\"windSpeed\":12.88,\"windGust\":15.86,\"windBearing\":343,\"cloudCover\":0.22,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":332.5,\"nearestStormDistance\":53.23,\"nearestStormBearing\":292},{\"time\":1774321200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.54,\"apparentTemperature\":32.05,\"dewPoint\":19.8,\"humidity\":0.44,\"pressure\":1030.25,\"windSpeed\":12.51,\"windGust\":15.41,\"windBearing\":340,\"cloudCover\":0.17,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":335.27,\"nearestStormDistance\":58.19,\"nearestStormBearing\":326},{\"time\":1774324800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":38.71,\"apparentTemperature\":31.07,\"dewPoint\":19.03,\"humidity\":0.44,\"pressure\":1030.44,\"windSpeed\":11.91,\"windGust\":14.97,\"windBearing\":343,\"cloudCover\":0.15,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":340.96,\"nearestStormDistance\":130.35,\"nearestStormBearing\":236},{\"time\":1774328400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.87,\"apparentTemperature\":30.09,\"dewPoint\":18.26,\"humidity\":0.45,\"pressure\":1030.63,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":347,\"cloudCover\":0.12,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.65,\"nearestStormDistance\":202.52,\"nearestStormBearing\":147},{\"time\":1774332000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.04,\"apparentTemperature\":29.1,\"dewPoint\":17.49,\"humidity\":0.45,\"pressure\":1030.81,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.34,\"nearestStormDistance\":274.69,\"nearestStormBearing\":57},{\"time\":1774335600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":36.39,\"apparentTemperature\":28.34,\"dewPoint\":17.37,\"humidity\":0.46,\"pressure\":1030.58,\"windSpeed\":10.72,\"windGust\":13.93,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":360.54,\"nearestStormDistance\":221.96,\"nearestStormBearing\":49},{\"time\":1774339200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.74,\"apparentTemperature\":27.58,\"dewPoint\":17.24,\"humidity\":0.47,\"pressure\":1030.34,\"windSpeed\":10.72,\"windGust\":13.79,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":368.74,\"nearestStormDistance\":169.23,\"nearestStormBearing\":41},{\"time\":1774342800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.1,\"apparentTemperature\":26.82,\"dewPoint\":17.11,\"humidity\":0.48,\"pressure\":1030.11,\"windSpeed\":10.72,\"windGust\":13.65,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":376.94,\"nearestStormDistance\":116.5,\"nearestStormBearing\":33},{\"time\":1774346400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.81,\"apparentTemperature\":26.64,\"dewPoint\":17.42,\"humidity\":0.49,\"pressure\":1029.87,\"windSpeed\":10.72,\"windGust\":13.64,\"windBearing\":233,\"cloudCover\":0.14,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":381.4,\"nearestStormDistance\":165.42,\"nearestStormBearing\":54},{\"time\":1774350000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.52,\"apparentTemperature\":26.47,\"dewPoint\":17.73,\"humidity\":0.49,\"pressure\":1029.64,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":117,\"cloudCover\":0.17,\"uvIndex\":0.07,\"visibility\":10.0,\"ozone\":385.86,\"nearestStormDistance\":214.34,\"nearestStormBearing\":75},{\"time\":1774353600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.23,\"apparentTemperature\":26.29,\"dewPoint\":18.03,\"humidity\":0.5,\"pressure\":1029.4,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":0,\"cloudCover\":0.2,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":390.32,\"nearestStormDistance\":263.26,\"nearestStormBearing\":95},{\"time\":1774357200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.01,\"apparentTemperature\":27.04,\"dewPoint\":17.47,\"humidity\":0.48,\"pressure\":1028.55,\"windSpeed\":10.72,\"windGust\":14.22,\"windBearing\":7,\"cloudCover\":0.26,\"uvIndex\":0.93,\"visibility\":10.0,\"ozone\":393.27,\"nearestStormDistance\":254.65,\"nearestStormBearing\":95},{\"time\":1774360800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.78,\"apparentTemperature\":27.79,\"dewPoint\":16.92,\"humidity\":0.45,\"pressure\":1027.69,\"windSpeed\":10.72,\"windGust\":14.82,\"windBearing\":13,\"cloudCover\":0.33,\"uvIndex\":1.77,\"visibility\":10.0,\"ozone\":396.21,\"nearestStormDistance\":246.03,\"nearestStormBearing\":96},{\"time\":1774364400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":36.55,\"apparentTemperature\":28.54,\"dewPoint\":16.36,\"humidity\":0.43,\"pressure\":1026.83,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":20,\"cloudCover\":0.39,\"uvIndex\":2.6,\"visibility\":10.0,\"ozone\":399.16,\"nearestStormDistance\":237.42,\"nearestStormBearing\":96},{\"time\":1774368000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":37.68,\"apparentTemperature\":29.94,\"dewPoint\":16.6,\"humidity\":0.42,\"pressure\":1025.98,\"windSpeed\":11.24,\"windGust\":16.23,\"windBearing\":60,\"cloudCover\":0.42,\"uvIndex\":3.57,\"visibility\":10.0,\"ozone\":393.36,\"nearestStormDistance\":232.51,\"nearestStormBearing\":94},{\"time\":1774371600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":38.81,\"apparentTemperature\":31.34,\"dewPoint\":16.85,\"humidity\":0.4,\"pressure\":1025.12,\"windSpeed\":11.77,\"windGust\":17.05,\"windBearing\":100,\"cloudCover\":0.46,\"uvIndex\":4.54,\"visibility\":10.0,\"ozone\":387.55,\"nearestStormDistance\":227.6,\"nearestStormBearing\":92},{\"time\":1774375200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.94,\"apparentTemperature\":32.74,\"dewPoint\":17.1,\"humidity\":0.39,\"pressure\":1024.26,\"windSpeed\":12.29,\"windGust\":17.87,\"windBearing\":140,\"cloudCover\":0.49,\"uvIndex\":5.51,\"visibility\":10.0,\"ozone\":381.74,\"nearestStormDistance\":222.68,\"nearestStormBearing\":90},{\"time\":1774378800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.65,\"apparentTemperature\":33.65,\"dewPoint\":17.72,\"humidity\":0.39,\"pressure\":1023.53,\"windSpeed\":12.44,\"windGust\":17.8,\"windBearing\":160,\"cloudCover\":0.52,\"uvIndex\":5.02,\"visibility\":10.0,\"ozone\":380.91,\"nearestStormDistance\":225.08,\"nearestStormBearing\":86},{\"time\":1774382400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.37,\"apparentTemperature\":34.56,\"dewPoint\":18.34,\"humidity\":0.39,\"pressure\":1022.8,\"windSpeed\":12.58,\"windGust\":17.72,\"windBearing\":180,\"cloudCover\":0.56,\"uvIndex\":4.53,\"visibility\":10.0,\"ozone\":380.07,\"nearestStormDistance\":227.47,\"nearestStormBearing\":83},{\"time\":1774386000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.08,\"apparentTemperature\":35.47,\"dewPoint\":18.97,\"humidity\":0.39,\"pressure\":1022.07,\"windSpeed\":12.73,\"windGust\":17.65,\"windBearing\":200,\"cloudCover\":0.59,\"uvIndex\":4.04,\"visibility\":10.0,\"ozone\":379.24,\"nearestStormDistance\":229.86,\"nearestStormBearing\":79},{\"time\":1774389600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.03,\"apparentTemperature\":35.61,\"dewPoint\":19.71,\"humidity\":0.4,\"pressure\":1021.34,\"windSpeed\":12.51,\"windGust\":17.05,\"windBearing\":200,\"cloudCover\":0.58,\"uvIndex\":2.89,\"visibility\":10.0,\"ozone\":380.33,\"nearestStormDistance\":301.76,\"nearestStormBearing\":122},{\"time\":1774393200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.98,\"apparentTemperature\":35.75,\"dewPoint\":20.46,\"humidity\":0.42,\"pressure\":1020.61,\"windSpeed\":12.29,\"windGust\":16.46,\"windBearing\":200,\"cloudCover\":0.56,\"uvIndex\":1.74,\"visibility\":10.0,\"ozone\":381.42,\"nearestStormDistance\":373.66,\"nearestStormBearing\":165},{\"time\":1774396800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.94,\"apparentTemperature\":35.89,\"dewPoint\":21.2,\"humidity\":0.43,\"pressure\":1019.88,\"windSpeed\":12.06,\"windGust\":15.86,\"windBearing\":200,\"cloudCover\":0.55,\"uvIndex\":0.59,\"visibility\":10.0,\"ozone\":382.51,\"nearestStormDistance\":445.56,\"nearestStormBearing\":208},{\"time\":1774400400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.82,\"apparentTemperature\":35.65,\"dewPoint\":22.16,\"humidity\":0.45,\"pressure\":1019.97,\"windSpeed\":11.69,\"windGust\":15.19,\"windBearing\":203,\"cloudCover\":0.56,\"uvIndex\":0.39,\"visibility\":10.0,\"ozone\":385.23,\"nearestStormDistance\":426.54,\"nearestStormBearing\":208},{\"time\":1774404000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.7,\"apparentTemperature\":35.41,\"dewPoint\":23.12,\"humidity\":0.48,\"pressure\":1020.07,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":207,\"cloudCover\":0.58,\"uvIndex\":0.2,\"visibility\":10.0,\"ozone\":387.94,\"nearestStormDistance\":407.53,\"nearestStormBearing\":207},{\"time\":1774407600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.58,\"apparentTemperature\":35.17,\"dewPoint\":24.08,\"humidity\":0.5,\"pressure\":1020.16,\"windSpeed\":10.95,\"windGust\":13.85,\"windBearing\":210,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.66,\"nearestStormDistance\":388.51,\"nearestStormBearing\":207},{\"time\":1774411200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.29,\"apparentTemperature\":34.82,\"dewPoint\":24.87,\"humidity\":0.52,\"pressure\":1020.25,\"windSpeed\":10.79,\"windGust\":13.84,\"windBearing\":217,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.22,\"nearestStormDistance\":380.31,\"nearestStormBearing\":206},{\"time\":1774414800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.01,\"apparentTemperature\":34.47,\"dewPoint\":25.66,\"humidity\":0.53,\"pressure\":1020.35,\"windSpeed\":10.63,\"windGust\":13.83,\"windBearing\":223,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.78,\"nearestStormDistance\":372.11,\"nearestStormBearing\":205},{\"time\":1774418400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.72,\"apparentTemperature\":34.12,\"dewPoint\":26.46,\"humidity\":0.55,\"pressure\":1020.44,\"windSpeed\":10.47,\"windGust\":13.82,\"windBearing\":230,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":398.33,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774422000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.43,\"apparentTemperature\":33.75,\"dewPoint\":26.76,\"humidity\":0.57,\"pressure\":1020.61,\"windSpeed\":10.31,\"windGust\":13.81,\"windBearing\":237,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.56,\"nearestStormDistance\":342.85,\"nearestStormBearing\":190},{\"time\":1774425600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.15,\"apparentTemperature\":33.38,\"dewPoint\":27.07,\"humidity\":0.58,\"pressure\":1020.77,\"windSpeed\":10.15,\"windGust\":13.8,\"windBearing\":243,\"cloudCover\":0.69,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.78,\"nearestStormDistance\":321.78,\"nearestStormBearing\":177},{\"time\":1774429200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.86,\"apparentTemperature\":33.01,\"dewPoint\":27.37,\"humidity\":0.6,\"pressure\":1020.93,\"windSpeed\":9.99,\"windGust\":13.79,\"windBearing\":250,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.01,\"nearestStormDistance\":300.72,\"nearestStormBearing\":163},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.58,\"apparentTemperature\":33.27,\"dewPoint\":27.81,\"humidity\":0.62,\"pressure\":1021.1,\"windSpeed\":9.83,\"windGust\":13.78,\"windBearing\":257,\"cloudCover\":0.69,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":407.34,\"nearestStormDistance\":272.51,\"nearestStormBearing\":181},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.65,\"apparentTemperature\":33.54,\"dewPoint\":28.24,\"humidity\":0.62,\"pressure\":1021.26,\"windSpeed\":9.83,\"windGust\":13.7,\"windBearing\":263,\"cloudCover\":0.69,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":412.67,\"nearestStormDistance\":244.31,\"nearestStormBearing\":198},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.72,\"apparentTemperature\":33.8,\"dewPoint\":28.67,\"humidity\":0.63,\"pressure\":1021.42,\"windSpeed\":9.83,\"windGust\":13.63,\"windBearing\":270,\"cloudCover\":0.68,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":418.0,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.74,\"apparentTemperature\":34.92,\"dewPoint\":28.15,\"humidity\":0.6,\"pressure\":1021.35,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":273,\"cloudCover\":0.67,\"uvIndex\":0.89,\"visibility\":10.0,\"ozone\":417.94,\"nearestStormDistance\":214.18,\"nearestStormBearing\":214},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.76,\"apparentTemperature\":36.03,\"dewPoint\":27.64,\"humidity\":0.57,\"pressure\":1021.27,\"windSpeed\":10.43,\"windGust\":14.82,\"windBearing\":277,\"cloudCover\":0.66,\"uvIndex\":1.68,\"visibility\":10.0,\"ozone\":417.87,\"nearestStormDistance\":212.26,\"nearestStormBearing\":213},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.78,\"apparentTemperature\":37.15,\"dewPoint\":27.12,\"humidity\":0.54,\"pressure\":1021.2,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":280,\"cloudCover\":0.65,\"uvIndex\":2.48,\"visibility\":10.0,\"ozone\":417.81,\"nearestStormDistance\":210.33,\"nearestStormBearing\":212},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":44.07,\"apparentTemperature\":38.64,\"dewPoint\":27.09,\"humidity\":0.51,\"pressure\":1021.12,\"windSpeed\":11.1,\"windGust\":16.08,\"windBearing\":277,\"cloudCover\":0.63,\"uvIndex\":3.46,\"visibility\":10.0,\"ozone\":414.05,\"nearestStormDistance\":193.67,\"nearestStormBearing\":195},{\"time\":1774458000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.35,\"apparentTemperature\":40.12,\"dewPoint\":27.05,\"humidity\":0.49,\"pressure\":1021.04,\"windSpeed\":11.47,\"windGust\":16.76,\"windBearing\":273,\"cloudCover\":0.61,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":410.3,\"nearestStormDistance\":177.01,\"nearestStormBearing\":178},{\"time\":1774461600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.63,\"apparentTemperature\":41.61,\"dewPoint\":27.01,\"humidity\":0.46,\"pressure\":1020.97,\"windSpeed\":11.84,\"windGust\":17.43,\"windBearing\":270,\"cloudCover\":0.59,\"uvIndex\":5.44,\"visibility\":10.0,\"ozone\":406.55,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774465200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":47.34,\"apparentTemperature\":42.34,\"dewPoint\":27.39,\"humidity\":0.45,\"pressure\":1020.84,\"windSpeed\":12.29,\"windGust\":17.57,\"windBearing\":277,\"cloudCover\":0.58,\"uvIndex\":4.94,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774468800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.05,\"apparentTemperature\":43.06,\"dewPoint\":27.76,\"humidity\":0.45,\"pressure\":1020.72,\"windSpeed\":12.73,\"windGust\":17.72,\"windBearing\":283,\"cloudCover\":0.58,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":395.52,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774472400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.76,\"apparentTemperature\":43.79,\"dewPoint\":28.13,\"humidity\":0.44,\"pressure\":1020.6,\"windSpeed\":13.18,\"windGust\":17.87,\"windBearing\":290,\"cloudCover\":0.57,\"uvIndex\":3.95,\"visibility\":10.0,\"ozone\":390.0,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774476000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.36,\"apparentTemperature\":43.41,\"dewPoint\":28.35,\"humidity\":0.45,\"pressure\":1020.48,\"windSpeed\":12.81,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.56,\"uvIndex\":2.84,\"visibility\":10.0,\"ozone\":386.11,\"nearestStormDistance\":237.03,\"nearestStormBearing\":146}]},\"daily\":{\"summary\":\"Mixed + precipitation on Saturday and Monday, with highs reaching 60\xB0F on Sunday.\",\"icon\":\"sleet\",\"data\":[{\"time\":1773806400,\"summary\":\"Mostly + clear until afternoon, returning overnight.\",\"icon\":\"clear-day\",\"sunriseTime\":1773831768,\"sunsetTime\":1773875149,\"moonPhase\":0.98,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773806400,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":35.8,\"temperatureHighTime\":1773871200,\"temperatureLow\":34.03,\"temperatureLowTime\":1773910800,\"apparentTemperatureHigh\":31.89,\"apparentTemperatureHighTime\":1773860400,\"apparentTemperatureLow\":24.89,\"apparentTemperatureLowTime\":1773882000,\"dewPoint\":12.86,\"humidity\":0.43,\"pressure\":1027.89,\"windSpeed\":9.38,\"windGust\":12.08,\"windGustTime\":1773806400,\"windBearing\":210,\"cloudCover\":0.26,\"uvIndex\":5.29,\"uvIndexTime\":1773856800,\"visibility\":10.0,\"temperatureMin\":29.73,\"temperatureMinTime\":1773838800,\"temperatureMax\":35.8,\"temperatureMaxTime\":1773871200,\"apparentTemperatureMin\":18.06,\"apparentTemperatureMinTime\":1773828000,\"apparentTemperatureMax\":31.89,\"apparentTemperatureMaxTime\":1773860400},{\"time\":1773892800,\"summary\":\"Partly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1773918069,\"sunsetTime\":1773961613,\"moonPhase\":0.02,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773892800,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":43.23,\"temperatureHighTime\":1773957600,\"temperatureLow\":41.51,\"temperatureLowTime\":1774000800,\"apparentTemperatureHigh\":35.19,\"apparentTemperatureHighTime\":1773946800,\"apparentTemperatureLow\":33.87,\"apparentTemperatureLowTime\":1773961200,\"dewPoint\":24.05,\"humidity\":0.55,\"pressure\":1024.83,\"windSpeed\":7.33,\"windGust\":9.91,\"windGustTime\":1773954000,\"windBearing\":154,\"cloudCover\":0.44,\"uvIndex\":5.42,\"uvIndexTime\":1773943200,\"visibility\":10.0,\"temperatureMin\":34.03,\"temperatureMinTime\":1773910800,\"temperatureMax\":43.23,\"temperatureMaxTime\":1773957600,\"apparentTemperatureMin\":26.4,\"apparentTemperatureMinTime\":1773910800,\"apparentTemperatureMax\":35.19,\"apparentTemperatureMaxTime\":1773946800},{\"time\":1773979200,\"summary\":\"Light + rain overnight.\",\"icon\":\"rain\",\"sunriseTime\":1774004370,\"sunsetTime\":1774048077,\"moonPhase\":0.05,\"precipIntensity\":0.0013,\"precipIntensityMax\":0.015,\"precipIntensityMaxTime\":1774062000,\"precipProbability\":0.49,\"precipAccumulation\":0.03,\"precipType\":\"rain\",\"temperatureHigh\":52.02,\"temperatureHighTime\":1774040400,\"temperatureLow\":49.02,\"temperatureLowTime\":1774087200,\"apparentTemperatureHigh\":45.07,\"apparentTemperatureHighTime\":1774033200,\"apparentTemperatureLow\":40.62,\"apparentTemperatureLowTime\":1774062000,\"dewPoint\":34.13,\"humidity\":0.62,\"pressure\":1018.82,\"windSpeed\":9.53,\"windGust\":12.8,\"windGustTime\":1774040400,\"windBearing\":210,\"cloudCover\":0.61,\"uvIndex\":5.15,\"uvIndexTime\":1774029600,\"visibility\":10.0,\"temperatureMin\":41.18,\"temperatureMinTime\":1774008000,\"temperatureMax\":52.02,\"temperatureMaxTime\":1774040400,\"apparentTemperatureMin\":34.65,\"apparentTemperatureMinTime\":1773986400,\"apparentTemperatureMax\":45.07,\"apparentTemperatureMaxTime\":1774033200},{\"time\":1774065600,\"summary\":\"Light + rain in the morning.\",\"icon\":\"rain\",\"sunriseTime\":1774090671,\"sunsetTime\":1774134541,\"moonPhase\":0.09,\"precipIntensity\":0.0088,\"precipIntensityMax\":0.0234,\"precipIntensityMaxTime\":1774083600,\"precipProbability\":0.49,\"precipAccumulation\":0.2102,\"precipType\":\"rain\",\"temperatureHigh\":56.62,\"temperatureHighTime\":1774126800,\"temperatureLow\":48.94,\"temperatureLowTime\":1774159200,\"apparentTemperatureHigh\":50.4,\"apparentTemperatureHighTime\":1774126800,\"apparentTemperatureLow\":41.34,\"apparentTemperatureLowTime\":1774159200,\"dewPoint\":40.98,\"humidity\":0.66,\"pressure\":1010.47,\"windSpeed\":11.36,\"windGust\":15.9,\"windGustTime\":1774126800,\"windBearing\":256,\"cloudCover\":0.64,\"uvIndex\":3.98,\"uvIndexTime\":1774119600,\"visibility\":7.17,\"temperatureMin\":48.83,\"temperatureMinTime\":1774094400,\"temperatureMax\":56.62,\"temperatureMaxTime\":1774126800,\"apparentTemperatureMin\":40.67,\"apparentTemperatureMinTime\":1774065600,\"apparentTemperatureMax\":50.4,\"apparentTemperatureMaxTime\":1774126800},{\"time\":1774152000,\"summary\":\"Breezy + in the evening and flurries and rain overnight.\",\"icon\":\"wind\",\"sunriseTime\":1774176971,\"sunsetTime\":1774221005,\"moonPhase\":0.13,\"precipIntensity\":0.0008,\"precipIntensityMax\":0.01,\"precipIntensityMaxTime\":1774234800,\"precipProbability\":0.28,\"precipAccumulation\":0.02,\"precipType\":\"rain\",\"temperatureHigh\":59.88,\"temperatureHighTime\":1774213200,\"temperatureLow\":44.04,\"temperatureLowTime\":1774260000,\"apparentTemperatureHigh\":53.29,\"apparentTemperatureHighTime\":1774202400,\"apparentTemperatureLow\":31.58,\"apparentTemperatureLowTime\":1774260000,\"dewPoint\":41.04,\"humidity\":0.63,\"pressure\":1008.08,\"windSpeed\":12.06,\"windGust\":16.39,\"windGustTime\":1774213200,\"windBearing\":258,\"cloudCover\":0.74,\"uvIndex\":5.55,\"uvIndexTime\":1774202400,\"visibility\":10.0,\"temperatureMin\":48.94,\"temperatureMinTime\":1774159200,\"temperatureMax\":59.88,\"temperatureMaxTime\":1774213200,\"apparentTemperatureMin\":41.34,\"apparentTemperatureMinTime\":1774159200,\"apparentTemperatureMax\":53.29,\"apparentTemperatureMaxTime\":1774202400},{\"time\":1774238400,\"summary\":\"Flurries + and breezy in the morning.\",\"icon\":\"snow\",\"sunriseTime\":1774263272,\"sunsetTime\":1774307468,\"moonPhase\":0.16,\"precipIntensity\":0.0046,\"precipIntensityMax\":0.0117,\"precipIntensityMaxTime\":1774256400,\"precipProbability\":0.31,\"precipAccumulation\":0.364,\"precipType\":\"snow\",\"temperatureHigh\":43.0,\"temperatureHighTime\":1774263600,\"temperatureLow\":34.81,\"temperatureLowTime\":1774346400,\"apparentTemperatureHigh\":30.57,\"apparentTemperatureHighTime\":1774299600,\"apparentTemperatureLow\":23.23,\"apparentTemperatureLowTime\":1774346400,\"dewPoint\":26.8,\"humidity\":0.53,\"pressure\":1026.56,\"windSpeed\":14.27,\"windGust\":19.1,\"windGustTime\":1774278000,\"windBearing\":164,\"cloudCover\":0.5,\"uvIndex\":1.88,\"uvIndexTime\":1774299600,\"visibility\":9.57,\"temperatureMin\":39.38,\"temperatureMinTime\":1774278000,\"temperatureMax\":51.25,\"temperatureMaxTime\":1774238400,\"apparentTemperatureMin\":26.12,\"apparentTemperatureMinTime\":1774278000,\"apparentTemperatureMax\":40.16,\"apparentTemperatureMaxTime\":1774238400},{\"time\":1774324800,\"summary\":\"Partly + cloudy from afternoon until night.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774349573,\"sunsetTime\":1774393932,\"moonPhase\":0.2,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774324800,\"precipProbability\":0.07,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":42.08,\"temperatureHighTime\":1774386000,\"temperatureLow\":39.58,\"temperatureLowTime\":1774432800,\"apparentTemperatureHigh\":34.71,\"apparentTemperatureHighTime\":1774386000,\"apparentTemperatureLow\":29.6,\"apparentTemperatureLowTime\":1774432800,\"dewPoint\":18.61,\"humidity\":0.44,\"pressure\":1025.86,\"windSpeed\":11.43,\"windGust\":15.32,\"windGustTime\":1774375200,\"windBearing\":189,\"cloudCover\":0.36,\"uvIndex\":5.51,\"uvIndexTime\":1774375200,\"visibility\":10.0,\"temperatureMin\":34.23,\"temperatureMinTime\":1774353600,\"temperatureMax\":42.08,\"temperatureMaxTime\":1774386000,\"apparentTemperatureMin\":22.73,\"apparentTemperatureMinTime\":1774353600,\"apparentTemperatureMax\":34.71,\"apparentTemperatureMaxTime\":1774386000},{\"time\":1774411200,\"summary\":\"Mostly + cloudy until afternoon, returning overnight.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774435873,\"sunsetTime\":1774480395,\"moonPhase\":0.24,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774411200,\"precipProbability\":0.12,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":48.76,\"temperatureHighTime\":1774472400,\"temperatureLow\":42.0,\"temperatureLowTime\":1774512000,\"apparentTemperatureHigh\":41.83,\"apparentTemperatureHighTime\":1774472400,\"apparentTemperatureLow\":31.72,\"apparentTemperatureLowTime\":1774512000,\"dewPoint\":27.59,\"humidity\":0.53,\"pressure\":1020.86,\"windSpeed\":11.18,\"windGust\":15.35,\"windGustTime\":1774472400,\"windBearing\":263,\"cloudCover\":0.62,\"uvIndex\":5.44,\"uvIndexTime\":1774461600,\"visibility\":10.0,\"temperatureMin\":39.58,\"temperatureMinTime\":1774432800,\"temperatureMax\":48.76,\"temperatureMaxTime\":1774472400,\"apparentTemperatureMin\":29.6,\"apparentTemperatureMinTime\":1774432800,\"apparentTemperatureMax\":41.83,\"apparentTemperatureMaxTime\":1774472400}]},\"alerts\":[],\"flags\":{\"sources\":[\"ETOPO1\",\"hrrrsubh\",\"rtma_ru\",\"hrrr_0-18\",\"nbm\",\"nbm_fire\",\"dwd_mosmix\",\"ecmwf_ifs\",\"hrrr_18-48\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"hrrr_subh\":\"2026-03-18 + 21Z\",\"rtma_ru\":\"2026-03-18 23:15Z\",\"hrrr_0-18\":\"2026-03-18 21Z\",\"nbm\":\"2026-03-18 + 19Z\",\"nbm_fire\":\"2026-03-18 18Z\",\"dwd_mosmix\":\"2026-03-18 22Z\",\"ecmwf_ifs\":\"2026-03-18 + 00Z\",\"hrrr_18-48\":\"2026-03-18 18Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":6.81,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:53 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9852' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 741fa80e957b47e88235a1fa44ab4ea4.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - 0svGhxKYeLL7dgPh6j2S5fqUgw6cATjsdCQyMYieLijUPJiScjfm_w== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '148' + X-Handler-Time: + - '43.5' + X-Kong-Proxy-Latency: + - '1' + X-Kong-Request-Id: + - 0054b852cadca10e2357935c52182f4f + X-Kong-Upstream-Latency: + - '46' + X-Node-Id: + - ip-10-0-14-222.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9852' + X-Response-Time: + - '43.467' + X-Server-Time: + - '44.7' + content-length: + - '94228' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/cassettes/pirate_weather/minutely_nyc.yaml b/tests/integration/cassettes/pirate_weather/minutely_nyc.yaml new file mode 100644 index 00000000..3b055855 --- /dev/null +++ b/tests/integration/cassettes/pirate_weather/minutely_nyc.yaml @@ -0,0 +1,238 @@ +interactions: +- request: + body: '' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Host: + - api.pirateweather.net + method: GET + uri: https://api.pirateweather.net/forecast/FILTERED_API_KEY/40.7128,-74.006?extend=hourly&units=us + response: + body: + string: "{\"latitude\":40.7128,\"longitude\":-74.006,\"timezone\":\"America/New_York\",\"offset\":-4.0,\"elevation\":62,\"currently\":{\"time\":1773877680,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"nearestStormDistance\":356.19,\"nearestStormBearing\":35,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\",\"temperature\":32.88,\"apparentTemperature\":21.34,\"dewPoint\":16.48,\"humidity\":0.5,\"pressure\":1028.29,\"windSpeed\":10.46,\"windGust\":13.69,\"windBearing\":141,\"cloudCover\":0.0,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":401.24},\"minutely\":{\"summary\":\"Clear + for the hour.\",\"icon\":\"clear-night\",\"data\":[{\"time\":1773877680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773877980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878340,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878400,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878460,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878520,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878580,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878640,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878700,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878760,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878820,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878880,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773878940,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879000,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879060,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879120,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879180,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879240,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879300,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879360,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879420,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879480,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879540,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879600,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879660,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879720,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879780,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879840,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879900,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773879960,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880020,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880080,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880140,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880200,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880260,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880320,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880380,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880440,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880500,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880560,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880620,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880680,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880740,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880800,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880860,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880920,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773880980,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881040,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881100,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881160,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881220,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"},{\"time\":1773881280,\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipType\":\"none\"}]},\"hourly\":{\"summary\":\"Partly + cloudy starting tomorrow morning.\",\"icon\":\"partly-cloudy-day\",\"data\":[{\"time\":1773874800,\"summary\":\"Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.62,\"apparentTemperature\":28.36,\"dewPoint\":13.44,\"humidity\":0.4,\"pressure\":1028.7,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":160,\"cloudCover\":0.04,\"uvIndex\":0.28,\"visibility\":10.0,\"ozone\":404.2,\"nearestStormDistance\":351.03,\"nearestStormBearing\":33},{\"time\":1773878400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.49,\"apparentTemperature\":28.15,\"dewPoint\":15.98,\"humidity\":0.44,\"pressure\":1028.19,\"windSpeed\":8.94,\"windGust\":10.95,\"windBearing\":150,\"cloudCover\":0.05,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.5,\"nearestStormDistance\":357.48,\"nearestStormBearing\":35},{\"time\":1773882000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.97,\"apparentTemperature\":28.81,\"dewPoint\":18.12,\"humidity\":0.49,\"pressure\":1029.01,\"windSpeed\":8.04,\"windGust\":10.05,\"windBearing\":150,\"cloudCover\":0.03,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":397.01,\"nearestStormDistance\":227.41,\"nearestStormBearing\":259},{\"time\":1773885600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.15,\"apparentTemperature\":28.8,\"dewPoint\":18.86,\"humidity\":0.51,\"pressure\":1029.03,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.06,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.34,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773889200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.83,\"apparentTemperature\":29.39,\"dewPoint\":19.08,\"humidity\":0.52,\"pressure\":1028.92,\"windSpeed\":7.15,\"windGust\":9.83,\"windBearing\":150,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.0,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773892800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.4,\"apparentTemperature\":29.71,\"dewPoint\":19.92,\"humidity\":0.54,\"pressure\":1028.24,\"windSpeed\":6.26,\"windGust\":8.04,\"windBearing\":150,\"cloudCover\":0.21,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.58,\"nearestStormDistance\":219.19,\"nearestStormBearing\":255},{\"time\":1773896400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.93,\"apparentTemperature\":30.0,\"dewPoint\":20.34,\"humidity\":0.55,\"pressure\":1027.83,\"windSpeed\":5.36,\"windGust\":8.04,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":392.93,\"nearestStormDistance\":240.11,\"nearestStormBearing\":260},{\"time\":1773900000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.01,\"apparentTemperature\":30.54,\"dewPoint\":21.34,\"humidity\":0.56,\"pressure\":1027.3,\"windSpeed\":5.36,\"windGust\":7.15,\"windBearing\":150,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.63,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773903600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.49,\"dewPoint\":22.14,\"humidity\":0.59,\"pressure\":1026.66,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.34,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.17,\"nearestStormDistance\":250.34,\"nearestStormBearing\":263},{\"time\":1773907200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.66,\"apparentTemperature\":30.7,\"dewPoint\":22.5,\"humidity\":0.61,\"pressure\":1026.74,\"windSpeed\":4.47,\"windGust\":6.26,\"windBearing\":140,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.75,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773910800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.03,\"apparentTemperature\":31.01,\"dewPoint\":22.78,\"humidity\":0.61,\"pressure\":1026.25,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":140,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":386.66,\"nearestStormDistance\":281.43,\"nearestStormBearing\":278},{\"time\":1773914400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.18,\"apparentTemperature\":30.96,\"dewPoint\":22.62,\"humidity\":0.62,\"pressure\":1025.95,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":120,\"cloudCover\":0.53,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":388.2,\"nearestStormDistance\":244.0,\"nearestStormBearing\":257},{\"time\":1773918000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":34.92,\"apparentTemperature\":30.83,\"dewPoint\":23.05,\"humidity\":0.63,\"pressure\":1026.14,\"windSpeed\":4.47,\"windGust\":5.58,\"windBearing\":110,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.27,\"nearestStormDistance\":224.52,\"nearestStormBearing\":263},{\"time\":1773921600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":35.44,\"apparentTemperature\":31.32,\"dewPoint\":23.81,\"humidity\":0.62,\"pressure\":1026.84,\"windSpeed\":4.47,\"windGust\":6.48,\"windBearing\":110,\"cloudCover\":0.58,\"uvIndex\":0.21,\"visibility\":10.0,\"ozone\":394.1,\"nearestStormDistance\":249.01,\"nearestStormBearing\":266},{\"time\":1773925200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":36.37,\"apparentTemperature\":32.29,\"dewPoint\":23.81,\"humidity\":0.6,\"pressure\":1026.81,\"windSpeed\":5.36,\"windGust\":6.7,\"windBearing\":130,\"cloudCover\":0.52,\"uvIndex\":1.08,\"visibility\":10.0,\"ozone\":396.41,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1773928800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":37.47,\"apparentTemperature\":32.23,\"dewPoint\":23.0,\"humidity\":0.56,\"pressure\":1026.22,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":160,\"cloudCover\":0.48,\"uvIndex\":2.14,\"visibility\":10.0,\"ozone\":396.14,\"nearestStormDistance\":180.4,\"nearestStormBearing\":201},{\"time\":1773932400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":38.7,\"apparentTemperature\":33.15,\"dewPoint\":22.05,\"humidity\":0.51,\"pressure\":1025.6,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.49,\"uvIndex\":3.44,\"visibility\":10.0,\"ozone\":398.5,\"nearestStormDistance\":165.94,\"nearestStormBearing\":239},{\"time\":1773936000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":39.2,\"apparentTemperature\":33.82,\"dewPoint\":21.4,\"humidity\":0.49,\"pressure\":1024.88,\"windSpeed\":8.04,\"windGust\":11.39,\"windBearing\":170,\"cloudCover\":0.52,\"uvIndex\":4.78,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":151.12,\"nearestStormBearing\":225},{\"time\":1773939600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":40.26,\"apparentTemperature\":34.25,\"dewPoint\":22.05,\"humidity\":0.48,\"pressure\":1024.24,\"windSpeed\":8.94,\"windGust\":13.18,\"windBearing\":170,\"cloudCover\":0.51,\"uvIndex\":5.06,\"visibility\":10.0,\"ozone\":405.51,\"nearestStormDistance\":146.62,\"nearestStormBearing\":233},{\"time\":1773943200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":41.45,\"apparentTemperature\":34.84,\"dewPoint\":22.82,\"humidity\":0.47,\"pressure\":1023.43,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":5.42,\"visibility\":10.0,\"ozone\":404.17,\"nearestStormDistance\":145.3,\"nearestStormBearing\":240},{\"time\":1773946800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.19,\"apparentTemperature\":35.74,\"dewPoint\":23.4,\"humidity\":0.47,\"pressure\":1023.23,\"windSpeed\":10.72,\"windGust\":14.74,\"windBearing\":170,\"cloudCover\":0.39,\"uvIndex\":4.9,\"visibility\":10.0,\"ozone\":399.76,\"nearestStormDistance\":124.91,\"nearestStormBearing\":243},{\"time\":1773950400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.46,\"apparentTemperature\":36.07,\"dewPoint\":24.39,\"humidity\":0.48,\"pressure\":1023.08,\"windSpeed\":11.62,\"windGust\":14.97,\"windBearing\":160,\"cloudCover\":0.37,\"uvIndex\":3.89,\"visibility\":10.0,\"ozone\":398.15,\"nearestStormDistance\":129.62,\"nearestStormBearing\":225},{\"time\":1773954000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":42.73,\"apparentTemperature\":36.01,\"dewPoint\":24.93,\"humidity\":0.49,\"pressure\":1022.57,\"windSpeed\":11.62,\"windGust\":15.86,\"windBearing\":160,\"cloudCover\":0.4,\"uvIndex\":2.57,\"visibility\":10.0,\"ozone\":397.86,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1773957600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.23,\"apparentTemperature\":36.99,\"dewPoint\":25.27,\"humidity\":0.5,\"pressure\":1022.38,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":160,\"cloudCover\":0.45,\"uvIndex\":1.25,\"visibility\":10.0,\"ozone\":398.76,\"nearestStormDistance\":93.81,\"nearestStormBearing\":243},{\"time\":1773961200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.05,\"apparentTemperature\":37.56,\"dewPoint\":26.82,\"humidity\":0.52,\"pressure\":1022.34,\"windSpeed\":9.83,\"windGust\":12.73,\"windBearing\":160,\"cloudCover\":0.39,\"uvIndex\":0.27,\"visibility\":10.0,\"ozone\":401.36,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1773964800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.14,\"apparentTemperature\":37.63,\"dewPoint\":28.24,\"humidity\":0.55,\"pressure\":1022.62,\"windSpeed\":8.94,\"windGust\":11.62,\"windBearing\":160,\"cloudCover\":0.43,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.26,\"nearestStormDistance\":90.27,\"nearestStormBearing\":201},{\"time\":1773968400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":37.85,\"dewPoint\":29.77,\"humidity\":0.59,\"pressure\":1022.45,\"windSpeed\":8.04,\"windGust\":10.28,\"windBearing\":170,\"cloudCover\":0.32,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.87,\"nearestStormDistance\":143.65,\"nearestStormBearing\":159},{\"time\":1773972000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.93,\"apparentTemperature\":38.41,\"dewPoint\":29.93,\"humidity\":0.6,\"pressure\":1021.95,\"windSpeed\":7.15,\"windGust\":10.28,\"windBearing\":180,\"cloudCover\":0.36,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.62,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773975600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.84,\"apparentTemperature\":38.93,\"dewPoint\":30.92,\"humidity\":0.61,\"pressure\":1022.17,\"windSpeed\":7.15,\"windGust\":9.38,\"windBearing\":190,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.73,\"nearestStormDistance\":127.11,\"nearestStormBearing\":156},{\"time\":1773979200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperature\":43.11,\"apparentTemperature\":39.09,\"dewPoint\":31.23,\"humidity\":0.63,\"pressure\":1022.29,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":200,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":405.77,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1773982800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.64,\"apparentTemperature\":39.15,\"dewPoint\":31.35,\"humidity\":0.64,\"pressure\":1021.96,\"windSpeed\":6.26,\"windGust\":8.27,\"windBearing\":220,\"cloudCover\":0.65,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.51,\"nearestStormDistance\":252.47,\"nearestStormBearing\":145},{\"time\":1773986400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.17,\"apparentTemperature\":39.18,\"dewPoint\":31.48,\"humidity\":0.64,\"pressure\":1021.54,\"windSpeed\":6.26,\"windGust\":8.49,\"windBearing\":230,\"cloudCover\":0.54,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":403.63,\"nearestStormDistance\":283.51,\"nearestStormBearing\":149},{\"time\":1773990000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.0,\"apparentTemperature\":38.94,\"dewPoint\":31.72,\"humidity\":0.65,\"pressure\":1021.22,\"windSpeed\":5.96,\"windGust\":8.19,\"windBearing\":235,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":404.56,\"nearestStormDistance\":335.93,\"nearestStormBearing\":150},{\"time\":1773993600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.84,\"apparentTemperature\":38.69,\"dewPoint\":31.96,\"humidity\":0.66,\"pressure\":1021.39,\"windSpeed\":5.66,\"windGust\":7.89,\"windBearing\":240,\"cloudCover\":0.48,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.77,\"nearestStormDistance\":267.07,\"nearestStormBearing\":161},{\"time\":1773997200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.68,\"apparentTemperature\":38.44,\"dewPoint\":32.2,\"humidity\":0.68,\"pressure\":1021.25,\"windSpeed\":5.36,\"windGust\":7.6,\"windBearing\":245,\"cloudCover\":0.44,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":388.23,\"nearestStormBearing\":33},{\"time\":1774000800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.51,\"apparentTemperature\":38.2,\"dewPoint\":32.44,\"humidity\":0.69,\"pressure\":1021.74,\"windSpeed\":5.06,\"windGust\":7.3,\"windBearing\":250,\"cloudCover\":0.41,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.47,\"nearestStormDistance\":368.02,\"nearestStormBearing\":206},{\"time\":1774004400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.35,\"apparentTemperature\":37.95,\"dewPoint\":32.68,\"humidity\":0.7,\"pressure\":1021.6,\"windSpeed\":4.77,\"windGust\":7.0,\"windBearing\":255,\"cloudCover\":0.38,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.13,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774008000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.18,\"apparentTemperature\":37.71,\"dewPoint\":32.92,\"humidity\":0.71,\"pressure\":1021.73,\"windSpeed\":4.47,\"windGust\":6.7,\"windBearing\":260,\"cloudCover\":0.35,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":397.97,\"nearestStormDistance\":421.2,\"nearestStormBearing\":218},{\"time\":1774011600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.57,\"apparentTemperature\":39.55,\"dewPoint\":32.76,\"humidity\":0.69,\"pressure\":1021.52,\"windSpeed\":5.55,\"windGust\":7.6,\"windBearing\":248,\"cloudCover\":0.39,\"uvIndex\":1.13,\"visibility\":10.0,\"ozone\":395.53,\"nearestStormDistance\":367.17,\"nearestStormBearing\":214},{\"time\":1774015200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":43.95,\"apparentTemperature\":41.39,\"dewPoint\":32.59,\"humidity\":0.66,\"pressure\":1020.51,\"windSpeed\":6.64,\"windGust\":8.49,\"windBearing\":236,\"cloudCover\":0.44,\"uvIndex\":2.44,\"visibility\":10.0,\"ozone\":395.04,\"nearestStormDistance\":299.32,\"nearestStormBearing\":209},{\"time\":1774018800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.34,\"apparentTemperature\":43.23,\"dewPoint\":32.43,\"humidity\":0.64,\"pressure\":1020.97,\"windSpeed\":7.72,\"windGust\":9.38,\"windBearing\":224,\"cloudCover\":0.48,\"uvIndex\":3.72,\"visibility\":10.0,\"ozone\":394.63,\"nearestStormDistance\":270.38,\"nearestStormBearing\":201},{\"time\":1774022400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.73,\"apparentTemperature\":45.08,\"dewPoint\":33.12,\"humidity\":0.61,\"pressure\":1020.41,\"windSpeed\":8.81,\"windGust\":11.47,\"windBearing\":212,\"cloudCover\":0.53,\"uvIndex\":4.44,\"visibility\":10.0,\"ozone\":395.99,\"nearestStormDistance\":243.43,\"nearestStormBearing\":188},{\"time\":1774026000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.11,\"apparentTemperature\":46.92,\"dewPoint\":33.8,\"humidity\":0.59,\"pressure\":1019.22,\"windSpeed\":9.89,\"windGust\":13.55,\"windBearing\":200,\"cloudCover\":0.57,\"uvIndex\":4.4,\"visibility\":10.0,\"ozone\":396.23,\"nearestStormDistance\":242.1,\"nearestStormBearing\":180},{\"time\":1774029600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.5,\"apparentTemperature\":48.76,\"dewPoint\":34.48,\"humidity\":0.56,\"pressure\":1017.07,\"windSpeed\":10.98,\"windGust\":15.64,\"windBearing\":189,\"cloudCover\":0.62,\"uvIndex\":5.15,\"visibility\":10.0,\"ozone\":395.58,\"nearestStormDistance\":222.48,\"nearestStormBearing\":219},{\"time\":1774033200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.89,\"apparentTemperature\":50.61,\"dewPoint\":34.78,\"humidity\":0.54,\"pressure\":1017.31,\"windSpeed\":12.06,\"windGust\":17.13,\"windBearing\":177,\"cloudCover\":0.66,\"uvIndex\":4.74,\"visibility\":10.0,\"ozone\":396.7,\"nearestStormDistance\":152.64,\"nearestStormBearing\":212},{\"time\":1774036800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.45,\"apparentTemperature\":51.14,\"dewPoint\":35.07,\"humidity\":0.54,\"pressure\":1016.48,\"windSpeed\":13.4,\"windGust\":18.62,\"windBearing\":173,\"cloudCover\":0.71,\"uvIndex\":3.84,\"visibility\":10.0,\"ozone\":399.67,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774040400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.02,\"apparentTemperature\":51.67,\"dewPoint\":35.37,\"humidity\":0.54,\"pressure\":1015.65,\"windSpeed\":14.74,\"windGust\":20.11,\"windBearing\":170,\"cloudCover\":0.75,\"uvIndex\":2.41,\"visibility\":10.0,\"ozone\":398.36,\"nearestStormDistance\":155.63,\"nearestStormBearing\":180},{\"time\":1774044000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.89,\"apparentTemperature\":51.63,\"dewPoint\":36.12,\"humidity\":0.55,\"pressure\":1015.28,\"windSpeed\":14.89,\"windGust\":19.96,\"windBearing\":173,\"cloudCover\":0.79,\"uvIndex\":1.18,\"visibility\":10.0,\"ozone\":397.25,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774047600,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.76,\"apparentTemperature\":51.58,\"dewPoint\":36.87,\"humidity\":0.57,\"pressure\":1014.9,\"windSpeed\":15.04,\"windGust\":19.81,\"windBearing\":177,\"cloudCover\":0.84,\"uvIndex\":0.26,\"visibility\":10.0,\"ozone\":396.55,\"nearestStormDistance\":104.26,\"nearestStormBearing\":236},{\"time\":1774051200,\"summary\":\"Breezy + and Overcast\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.1,\"precipIntensityError\":0.0055,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.64,\"apparentTemperature\":51.53,\"dewPoint\":37.62,\"humidity\":0.58,\"pressure\":1014.53,\"windSpeed\":15.19,\"windGust\":19.66,\"windBearing\":180,\"cloudCover\":0.88,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":394.51,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774054800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.005,\"precipProbability\":0.23,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.005,\"precipType\":\"rain\",\"temperature\":51.51,\"apparentTemperature\":51.42,\"dewPoint\":38.17,\"humidity\":0.6,\"pressure\":1014.45,\"windSpeed\":14.89,\"windGust\":19.14,\"windBearing\":183,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.14,\"nearestStormDistance\":70.38,\"nearestStormBearing\":194},{\"time\":1774058400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.36,\"precipIntensityError\":0.0095,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.39,\"apparentTemperature\":51.31,\"dewPoint\":38.72,\"humidity\":0.61,\"pressure\":1014.37,\"windSpeed\":14.6,\"windGust\":18.62,\"windBearing\":187,\"cloudCover\":0.87,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":391.49,\"nearestStormDistance\":52.24,\"nearestStormBearing\":236},{\"time\":1774062000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":51.26,\"apparentTemperature\":51.21,\"dewPoint\":39.27,\"humidity\":0.63,\"pressure\":1014.29,\"windSpeed\":14.3,\"windGust\":18.1,\"windBearing\":190,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":389.47,\"nearestStormDistance\":34.59,\"nearestStormBearing\":180},{\"time\":1774065600,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.85,\"apparentTemperature\":50.86,\"dewPoint\":40.07,\"humidity\":0.66,\"pressure\":1013.54,\"windSpeed\":13.7,\"windGust\":17.72,\"windBearing\":193,\"cloudCover\":0.86,\"uvIndex\":0.0,\"visibility\":8.37,\"ozone\":387.75,\"nearestStormDistance\":21.68,\"nearestStormBearing\":135},{\"time\":1774069200,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.43,\"apparentTemperature\":50.51,\"dewPoint\":40.87,\"humidity\":0.68,\"pressure\":1012.8,\"windSpeed\":13.11,\"windGust\":17.35,\"windBearing\":197,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":6.66,\"ozone\":386.72,\"nearestStormDistance\":13.1,\"nearestStormBearing\":270},{\"time\":1774072800,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.015,\"precipProbability\":0.49,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.015,\"precipType\":\"rain\",\"temperature\":50.02,\"apparentTemperature\":50.16,\"dewPoint\":41.67,\"humidity\":0.71,\"pressure\":1012.06,\"windSpeed\":12.51,\"windGust\":16.98,\"windBearing\":200,\"cloudCover\":0.85,\"uvIndex\":0.0,\"visibility\":4.95,\"ozone\":385.37,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774076400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0178,\"precipProbability\":0.49,\"precipIntensityError\":0.0185,\"precipAccumulation\":0.0178,\"precipType\":\"rain\",\"temperature\":49.72,\"apparentTemperature\":48.34,\"dewPoint\":41.97,\"humidity\":0.73,\"pressure\":1011.54,\"windSpeed\":11.91,\"windGust\":16.31,\"windBearing\":200,\"cloudCover\":0.82,\"uvIndex\":0.0,\"visibility\":3.78,\"ozone\":383.4,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774080000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0206,\"precipProbability\":0.48,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0206,\"precipType\":\"rain\",\"temperature\":49.42,\"apparentTemperature\":46.51,\"dewPoint\":42.27,\"humidity\":0.76,\"pressure\":1011.01,\"windSpeed\":11.32,\"windGust\":15.64,\"windBearing\":200,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":2.6,\"ozone\":384.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774083600,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.12,\"apparentTemperature\":44.69,\"dewPoint\":42.57,\"humidity\":0.78,\"pressure\":1010.48,\"windSpeed\":10.72,\"windGust\":14.97,\"windBearing\":200,\"cloudCover\":0.75,\"uvIndex\":0.0,\"visibility\":1.43,\"ozone\":385.86,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774087200,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":49.02,\"apparentTemperature\":44.7,\"dewPoint\":42.77,\"humidity\":0.78,\"pressure\":1010.63,\"windSpeed\":10.43,\"windGust\":14.6,\"windBearing\":213,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":1.64,\"ozone\":388.21,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774090800,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.93,\"apparentTemperature\":44.7,\"dewPoint\":42.97,\"humidity\":0.79,\"pressure\":1010.77,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":227,\"cloudCover\":0.71,\"uvIndex\":0.0,\"visibility\":1.86,\"ozone\":391.55,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774094400,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0234,\"precipProbability\":0.48,\"precipIntensityError\":0.015,\"precipAccumulation\":0.0234,\"precipType\":\"rain\",\"temperature\":48.83,\"apparentTemperature\":44.71,\"dewPoint\":43.18,\"humidity\":0.79,\"pressure\":1010.92,\"windSpeed\":9.83,\"windGust\":13.85,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":0.02,\"visibility\":2.07,\"ozone\":393.68,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774098000,\"summary\":\"Light + Rain\",\"icon\":\"rain\",\"precipIntensity\":0.0161,\"precipProbability\":0.36,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0161,\"precipType\":\"rain\",\"temperature\":49.53,\"apparentTemperature\":46.62,\"dewPoint\":42.64,\"humidity\":0.76,\"pressure\":1010.95,\"windSpeed\":10.13,\"windGust\":14.45,\"windBearing\":263,\"cloudCover\":0.63,\"uvIndex\":0.24,\"visibility\":4.32,\"ozone\":397.01,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774101600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0089,\"precipProbability\":0.25,\"precipIntensityError\":0.0083,\"precipAccumulation\":0.0089,\"precipType\":\"rain\",\"temperature\":50.23,\"apparentTemperature\":48.54,\"dewPoint\":42.11,\"humidity\":0.74,\"pressure\":1010.98,\"windSpeed\":10.43,\"windGust\":15.04,\"windBearing\":287,\"cloudCover\":0.56,\"uvIndex\":0.42,\"visibility\":6.57,\"ozone\":397.24,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774105200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":50.94,\"apparentTemperature\":50.45,\"dewPoint\":41.58,\"humidity\":0.71,\"pressure\":1011.01,\"windSpeed\":10.72,\"windGust\":15.64,\"windBearing\":310,\"cloudCover\":0.5,\"uvIndex\":0.63,\"visibility\":8.83,\"ozone\":395.11,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774108800,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":52.2,\"apparentTemperature\":52.06,\"dewPoint\":41.38,\"humidity\":0.67,\"pressure\":1010.65,\"windSpeed\":11.02,\"windGust\":16.31,\"windBearing\":313,\"cloudCover\":0.52,\"uvIndex\":1.47,\"visibility\":9.25,\"ozone\":393.52,\"nearestStormDistance\":21.71,\"nearestStormBearing\":45},{\"time\":1774112400,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":53.46,\"apparentTemperature\":53.67,\"dewPoint\":41.18,\"humidity\":0.63,\"pressure\":1010.29,\"windSpeed\":11.32,\"windGust\":16.98,\"windBearing\":317,\"cloudCover\":0.53,\"uvIndex\":2.39,\"visibility\":9.68,\"ozone\":392.9,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774116000,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0017,\"precipProbability\":0.13,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0017,\"precipType\":\"rain\",\"temperature\":54.72,\"apparentTemperature\":55.27,\"dewPoint\":40.98,\"humidity\":0.59,\"pressure\":1009.93,\"windSpeed\":11.62,\"windGust\":17.65,\"windBearing\":320,\"cloudCover\":0.55,\"uvIndex\":2.96,\"visibility\":10.0,\"ozone\":389.31,\"nearestStormDistance\":31.43,\"nearestStormBearing\":63},{\"time\":1774119600,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0011,\"precipProbability\":0.1,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0011,\"precipType\":\"rain\",\"temperature\":55.35,\"apparentTemperature\":55.87,\"dewPoint\":40.52,\"humidity\":0.57,\"pressure\":1009.52,\"windSpeed\":11.91,\"windGust\":17.8,\"windBearing\":317,\"cloudCover\":0.54,\"uvIndex\":3.98,\"visibility\":10.0,\"ozone\":381.62,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774123200,\"summary\":\"Possible + Drizzle\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0006,\"precipProbability\":0.06,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0006,\"precipType\":\"rain\",\"temperature\":55.99,\"apparentTemperature\":56.47,\"dewPoint\":40.06,\"humidity\":0.55,\"pressure\":1009.1,\"windSpeed\":12.21,\"windGust\":17.95,\"windBearing\":313,\"cloudCover\":0.54,\"uvIndex\":3.39,\"visibility\":10.0,\"ozone\":376.35,\"nearestStormDistance\":43.0,\"nearestStormBearing\":71},{\"time\":1774126800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":56.62,\"apparentTemperature\":57.07,\"dewPoint\":39.6,\"humidity\":0.53,\"pressure\":1008.68,\"windSpeed\":12.51,\"windGust\":18.1,\"windBearing\":310,\"cloudCover\":0.53,\"uvIndex\":1.41,\"visibility\":10.0,\"ozone\":370.1,\"nearestStormDistance\":62.95,\"nearestStormBearing\":63},{\"time\":1774130400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.78,\"apparentTemperature\":56.1,\"dewPoint\":39.3,\"humidity\":0.54,\"pressure\":1009.0,\"windSpeed\":12.21,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.52,\"uvIndex\":0.54,\"visibility\":10.0,\"ozone\":364.83,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774134000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.93,\"apparentTemperature\":55.12,\"dewPoint\":39.01,\"humidity\":0.55,\"pressure\":1009.32,\"windSpeed\":11.91,\"windGust\":16.46,\"windBearing\":297,\"cloudCover\":0.51,\"uvIndex\":0.22,\"visibility\":10.0,\"ozone\":363.13,\"nearestStormDistance\":94.54,\"nearestStormBearing\":63},{\"time\":1774137600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":54.09,\"apparentTemperature\":54.14,\"dewPoint\":38.71,\"humidity\":0.56,\"pressure\":1009.64,\"windSpeed\":11.62,\"windGust\":15.64,\"windBearing\":290,\"cloudCover\":0.5,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":359.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774141200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.09,\"apparentTemperature\":53.19,\"dewPoint\":39.06,\"humidity\":0.59,\"pressure\":1009.55,\"windSpeed\":11.02,\"windGust\":14.6,\"windBearing\":253,\"cloudCover\":0.55,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":356.1,\"nearestStormDistance\":153.91,\"nearestStormBearing\":74},{\"time\":1774144800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":52.09,\"apparentTemperature\":52.23,\"dewPoint\":39.41,\"humidity\":0.62,\"pressure\":1009.46,\"windSpeed\":10.43,\"windGust\":13.55,\"windBearing\":217,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":354.23,\"nearestStormDistance\":168.25,\"nearestStormBearing\":59},{\"time\":1774148400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.1,\"apparentTemperature\":51.28,\"dewPoint\":39.76,\"humidity\":0.65,\"pressure\":1009.36,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":180,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.08,\"nearestStormDistance\":226.79,\"nearestStormBearing\":47},{\"time\":1774152000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.38,\"apparentTemperature\":49.3,\"dewPoint\":39.79,\"humidity\":0.66,\"pressure\":1008.94,\"windSpeed\":9.53,\"windGust\":12.29,\"windBearing\":193,\"cloudCover\":0.68,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":349.54,\"nearestStormDistance\":253.21,\"nearestStormBearing\":59},{\"time\":1774155600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.66,\"apparentTemperature\":47.33,\"dewPoint\":39.83,\"humidity\":0.68,\"pressure\":1008.52,\"windSpeed\":9.23,\"windGust\":12.06,\"windBearing\":207,\"cloudCover\":0.73,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.8,\"nearestStormDistance\":264.46,\"nearestStormBearing\":56},{\"time\":1774159200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.94,\"apparentTemperature\":45.36,\"dewPoint\":39.87,\"humidity\":0.69,\"pressure\":1008.1,\"windSpeed\":8.94,\"windGust\":11.84,\"windBearing\":220,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":345.5,\"nearestStormDistance\":245.1,\"nearestStormBearing\":192},{\"time\":1774162800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.07,\"apparentTemperature\":45.39,\"dewPoint\":40.41,\"humidity\":0.71,\"pressure\":1007.39,\"windSpeed\":8.94,\"windGust\":12.14,\"windBearing\":227,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":342.51,\"nearestStormDistance\":278.62,\"nearestStormBearing\":208},{\"time\":1774166400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.2,\"apparentTemperature\":45.42,\"dewPoint\":40.96,\"humidity\":0.73,\"pressure\":1006.69,\"windSpeed\":8.94,\"windGust\":12.44,\"windBearing\":233,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":338.56,\"nearestStormDistance\":258.01,\"nearestStormBearing\":206},{\"time\":1774170000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.33,\"apparentTemperature\":45.45,\"dewPoint\":41.5,\"humidity\":0.75,\"pressure\":1005.98,\"windSpeed\":8.94,\"windGust\":12.73,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":334.91,\"nearestStormDistance\":215.43,\"nearestStormBearing\":225},{\"time\":1774173600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.3,\"apparentTemperature\":45.42,\"dewPoint\":41.71,\"humidity\":0.75,\"pressure\":1005.95,\"windSpeed\":9.23,\"windGust\":12.66,\"windBearing\":240,\"cloudCover\":0.79,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.76,\"nearestStormDistance\":189.33,\"nearestStormBearing\":210},{\"time\":1774177200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.27,\"apparentTemperature\":45.4,\"dewPoint\":41.92,\"humidity\":0.75,\"pressure\":1005.91,\"windSpeed\":9.53,\"windGust\":12.58,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":332.24,\"nearestStormDistance\":177.17,\"nearestStormBearing\":196},{\"time\":1774180800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":49.24,\"apparentTemperature\":45.37,\"dewPoint\":42.13,\"humidity\":0.75,\"pressure\":1005.87,\"windSpeed\":9.83,\"windGust\":12.51,\"windBearing\":240,\"cloudCover\":0.78,\"uvIndex\":0.23,\"visibility\":10.0,\"ozone\":330.76,\"nearestStormDistance\":160.35,\"nearestStormBearing\":198},{\"time\":1774184400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":50.6,\"apparentTemperature\":47.97,\"dewPoint\":41.78,\"humidity\":0.71,\"pressure\":1005.69,\"windSpeed\":10.43,\"windGust\":13.78,\"windBearing\":240,\"cloudCover\":0.73,\"uvIndex\":1.05,\"visibility\":10.0,\"ozone\":328.48,\"nearestStormDistance\":194.91,\"nearestStormBearing\":214},{\"time\":1774188000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":51.96,\"apparentTemperature\":50.57,\"dewPoint\":41.43,\"humidity\":0.68,\"pressure\":1005.51,\"windSpeed\":11.02,\"windGust\":15.04,\"windBearing\":240,\"cloudCover\":0.69,\"uvIndex\":2.17,\"visibility\":10.0,\"ozone\":328.87,\"nearestStormDistance\":209.08,\"nearestStormBearing\":189},{\"time\":1774191600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":53.31,\"apparentTemperature\":53.17,\"dewPoint\":41.07,\"humidity\":0.64,\"pressure\":1005.33,\"windSpeed\":11.62,\"windGust\":16.31,\"windBearing\":240,\"cloudCover\":0.64,\"uvIndex\":3.41,\"visibility\":10.0,\"ozone\":328.31,\"nearestStormDistance\":246.92,\"nearestStormBearing\":148},{\"time\":1774195200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":55.26,\"apparentTemperature\":55.17,\"dewPoint\":41.19,\"humidity\":0.6,\"pressure\":1005.07,\"windSpeed\":12.21,\"windGust\":17.57,\"windBearing\":243,\"cloudCover\":0.65,\"uvIndex\":4.25,\"visibility\":10.0,\"ozone\":325.51,\"nearestStormDistance\":179.84,\"nearestStormBearing\":217},{\"time\":1774198800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.2,\"apparentTemperature\":57.16,\"dewPoint\":41.31,\"humidity\":0.57,\"pressure\":1004.81,\"windSpeed\":12.81,\"windGust\":18.84,\"windBearing\":247,\"cloudCover\":0.66,\"uvIndex\":4.83,\"visibility\":10.0,\"ozone\":324.7,\"nearestStormDistance\":140.73,\"nearestStormBearing\":194},{\"time\":1774202400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.08,\"precipIntensityError\":0.0051,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.14,\"apparentTemperature\":59.16,\"dewPoint\":41.43,\"humidity\":0.53,\"pressure\":1004.55,\"windSpeed\":13.4,\"windGust\":20.11,\"windBearing\":250,\"cloudCover\":0.67,\"uvIndex\":5.55,\"visibility\":10.0,\"ozone\":324.95,\"nearestStormDistance\":227.48,\"nearestStormBearing\":119},{\"time\":1774206000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.39,\"apparentTemperature\":59.37,\"dewPoint\":41.45,\"humidity\":0.52,\"pressure\":1005.49,\"windSpeed\":13.93,\"windGust\":20.4,\"windBearing\":260,\"cloudCover\":0.69,\"uvIndex\":4.84,\"visibility\":10.0,\"ozone\":321.6,\"nearestStormDistance\":176.23,\"nearestStormBearing\":241},{\"time\":1774209600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0122,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.64,\"apparentTemperature\":59.57,\"dewPoint\":41.47,\"humidity\":0.51,\"pressure\":1006.43,\"windSpeed\":14.45,\"windGust\":20.7,\"windBearing\":270,\"cloudCover\":0.72,\"uvIndex\":3.74,\"visibility\":10.0,\"ozone\":321.19,\"nearestStormDistance\":122.3,\"nearestStormBearing\":219},{\"time\":1774213200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0154,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.88,\"apparentTemperature\":59.77,\"dewPoint\":41.49,\"humidity\":0.5,\"pressure\":1007.38,\"windSpeed\":14.97,\"windGust\":21.0,\"windBearing\":280,\"cloudCover\":0.74,\"uvIndex\":2.67,\"visibility\":10.0,\"ozone\":318.76,\"nearestStormDistance\":100.84,\"nearestStormBearing\":218},{\"time\":1774216800,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0181,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":59.05,\"apparentTemperature\":59.0,\"dewPoint\":41.39,\"humidity\":0.51,\"pressure\":1009.18,\"windSpeed\":15.12,\"windGust\":20.55,\"windBearing\":290,\"cloudCover\":0.75,\"uvIndex\":1.36,\"visibility\":10.0,\"ozone\":317.64,\"nearestStormDistance\":103.76,\"nearestStormBearing\":180},{\"time\":1774220400,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0209,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":58.21,\"apparentTemperature\":58.23,\"dewPoint\":41.29,\"humidity\":0.53,\"pressure\":1010.99,\"windSpeed\":15.27,\"windGust\":20.11,\"windBearing\":300,\"cloudCover\":0.75,\"uvIndex\":0.35,\"visibility\":10.0,\"ozone\":315.61,\"nearestStormDistance\":86.46,\"nearestStormBearing\":180},{\"time\":1774224000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.2,\"precipIntensityError\":0.0236,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":57.38,\"apparentTemperature\":57.45,\"dewPoint\":41.2,\"humidity\":0.54,\"pressure\":1012.8,\"windSpeed\":15.41,\"windGust\":19.66,\"windBearing\":310,\"cloudCover\":0.76,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":314.16,\"nearestStormDistance\":79.41,\"nearestStormBearing\":216},{\"time\":1774227600,\"summary\":\"Possible + Drizzle and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0033,\"precipProbability\":0.23,\"precipIntensityError\":0.0205,\"precipAccumulation\":0.0033,\"precipType\":\"rain\",\"temperature\":55.75,\"apparentTemperature\":55.71,\"dewPoint\":40.65,\"humidity\":0.56,\"pressure\":1014.28,\"windSpeed\":15.34,\"windGust\":19.51,\"windBearing\":320,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":312.5,\"nearestStormDistance\":64.95,\"nearestStormBearing\":225},{\"time\":1774231200,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.0067,\"precipProbability\":0.25,\"precipIntensityError\":0.0173,\"precipAccumulation\":0.0067,\"precipType\":\"rain\",\"temperature\":54.13,\"apparentTemperature\":53.96,\"dewPoint\":40.11,\"humidity\":0.59,\"pressure\":1015.75,\"windSpeed\":15.27,\"windGust\":19.36,\"windBearing\":330,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":310.26,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774234800,\"summary\":\"Drizzle + and Breezy\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0138,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":52.5,\"apparentTemperature\":52.21,\"dewPoint\":39.56,\"humidity\":0.61,\"pressure\":1017.23,\"windSpeed\":15.19,\"windGust\":19.21,\"windBearing\":340,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":308.09,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774238400,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.015,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":51.25,\"apparentTemperature\":49.24,\"dewPoint\":38.65,\"humidity\":0.62,\"pressure\":1018.56,\"windSpeed\":14.89,\"windGust\":18.99,\"windBearing\":230,\"cloudCover\":0.78,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":306.08,\"nearestStormDistance\":53.49,\"nearestStormBearing\":198},{\"time\":1774242000,\"summary\":\"Drizzle\",\"icon\":\"rain\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0158,\"precipAccumulation\":0.01,\"precipType\":\"rain\",\"temperature\":49.99,\"apparentTemperature\":46.26,\"dewPoint\":37.75,\"humidity\":0.62,\"pressure\":1019.9,\"windSpeed\":14.6,\"windGust\":18.77,\"windBearing\":120,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.54,\"nearestStormDistance\":53.49,\"nearestStormBearing\":161},{\"time\":1774245600,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.01,\"precipProbability\":0.28,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0388,\"precipType\":\"snow\",\"temperature\":48.74,\"apparentTemperature\":43.29,\"dewPoint\":36.84,\"humidity\":0.63,\"pressure\":1021.24,\"windSpeed\":14.3,\"windGust\":18.54,\"windBearing\":10,\"cloudCover\":0.77,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.66,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774249200,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0106,\"precipProbability\":0.29,\"precipIntensityError\":0.0189,\"precipAccumulation\":0.0407,\"precipType\":\"snow\",\"temperature\":47.52,\"apparentTemperature\":41.64,\"dewPoint\":35.52,\"humidity\":0.63,\"pressure\":1022.07,\"windSpeed\":14.6,\"windGust\":18.7,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.84,\"nearestStormDistance\":62.62,\"nearestStormBearing\":116},{\"time\":1774252800,\"summary\":\"Flurries\",\"icon\":\"snow\",\"precipIntensity\":0.0111,\"precipProbability\":0.3,\"precipIntensityError\":0.0213,\"precipAccumulation\":0.0425,\"precipType\":\"snow\",\"temperature\":46.29,\"apparentTemperature\":40.0,\"dewPoint\":34.2,\"humidity\":0.62,\"pressure\":1022.9,\"windSpeed\":14.89,\"windGust\":18.85,\"windBearing\":10,\"cloudCover\":0.57,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":303.6,\"nearestStormDistance\":69.17,\"nearestStormBearing\":180},{\"time\":1774256400,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0232,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":45.07,\"apparentTemperature\":38.35,\"dewPoint\":32.88,\"humidity\":0.62,\"pressure\":1023.73,\"windSpeed\":15.19,\"windGust\":19.01,\"windBearing\":10,\"cloudCover\":0.47,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":302.96,\"nearestStormDistance\":51.88,\"nearestStormBearing\":180},{\"time\":1774260000,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0201,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":44.04,\"apparentTemperature\":37.11,\"dewPoint\":31.69,\"humidity\":0.61,\"pressure\":1024.84,\"windSpeed\":15.19,\"windGust\":19.53,\"windBearing\":10,\"cloudCover\":0.51,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":304.26,\"nearestStormDistance\":17.29,\"nearestStormBearing\":180},{\"time\":1774263600,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0165,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":43.0,\"apparentTemperature\":35.86,\"dewPoint\":30.51,\"humidity\":0.61,\"pressure\":1025.96,\"windSpeed\":15.19,\"windGust\":20.04,\"windBearing\":10,\"cloudCover\":0.56,\"uvIndex\":0.0,\"visibility\":7.22,\"ozone\":304.9,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774267200,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0117,\"precipProbability\":0.31,\"precipIntensityError\":0.0134,\"precipAccumulation\":0.0444,\"precipType\":\"snow\",\"temperature\":41.97,\"apparentTemperature\":34.61,\"dewPoint\":29.32,\"humidity\":0.6,\"pressure\":1027.07,\"windSpeed\":15.19,\"windGust\":20.55,\"windBearing\":10,\"cloudCover\":0.6,\"uvIndex\":0.04,\"visibility\":9.35,\"ozone\":305.52,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774270800,\"summary\":\"Flurries + and Breezy\",\"icon\":\"snow\",\"precipIntensity\":0.0078,\"precipProbability\":0.26,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0296,\"precipType\":\"snow\",\"temperature\":41.11,\"apparentTemperature\":33.63,\"dewPoint\":27.9,\"humidity\":0.58,\"pressure\":1027.55,\"windSpeed\":15.19,\"windGust\":20.63,\"windBearing\":10,\"cloudCover\":0.62,\"uvIndex\":0.1,\"visibility\":8.57,\"ozone\":306.45,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774274400,\"summary\":\"Possible + Flurries and Breezy\",\"icon\":\"wind\",\"precipIntensity\":0.0039,\"precipProbability\":0.21,\"precipIntensityError\":0.0118,\"precipAccumulation\":0.0148,\"precipType\":\"snow\",\"temperature\":40.24,\"apparentTemperature\":32.64,\"dewPoint\":26.47,\"humidity\":0.57,\"pressure\":1028.03,\"windSpeed\":15.19,\"windGust\":20.72,\"windBearing\":10,\"cloudCover\":0.65,\"uvIndex\":0.16,\"visibility\":7.79,\"ozone\":307.39,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774278000,\"summary\":\"Breezy + and Mostly Cloudy\",\"icon\":\"wind\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.011,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.38,\"apparentTemperature\":31.66,\"dewPoint\":25.05,\"humidity\":0.55,\"pressure\":1028.51,\"windSpeed\":15.19,\"windGust\":20.8,\"windBearing\":10,\"cloudCover\":0.67,\"uvIndex\":0.22,\"visibility\":7.01,\"ozone\":308.32,\"nearestStormDistance\":0.0,\"nearestStormBearing\":0},{\"time\":1774281600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0079,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.83,\"apparentTemperature\":32.26,\"dewPoint\":24.23,\"humidity\":0.52,\"pressure\":1028.42,\"windSpeed\":14.6,\"windGust\":20.64,\"windBearing\":127,\"cloudCover\":0.61,\"uvIndex\":0.41,\"visibility\":9.67,\"ozone\":309.92,\"nearestStormDistance\":4.37,\"nearestStormBearing\":30},{\"time\":1774285200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.28,\"apparentTemperature\":32.86,\"dewPoint\":23.41,\"humidity\":0.5,\"pressure\":1028.34,\"windSpeed\":14.0,\"windGust\":20.49,\"windBearing\":243,\"cloudCover\":0.54,\"uvIndex\":0.6,\"visibility\":10.0,\"ozone\":311.51,\"nearestStormDistance\":8.73,\"nearestStormBearing\":60},{\"time\":1774288800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.16,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.73,\"apparentTemperature\":33.46,\"dewPoint\":22.59,\"humidity\":0.47,\"pressure\":1028.26,\"windSpeed\":13.4,\"windGust\":20.33,\"windBearing\":0,\"cloudCover\":0.48,\"uvIndex\":0.78,\"visibility\":10.0,\"ozone\":313.1,\"nearestStormDistance\":13.1,\"nearestStormBearing\":90},{\"time\":1774292400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.19,\"apparentTemperature\":34.12,\"dewPoint\":22.07,\"humidity\":0.45,\"pressure\":1028.2,\"windSpeed\":13.55,\"windGust\":20.25,\"windBearing\":357,\"cloudCover\":0.44,\"uvIndex\":1.15,\"visibility\":10.0,\"ozone\":315.84,\"nearestStormDistance\":28.08,\"nearestStormBearing\":131},{\"time\":1774296000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.65,\"apparentTemperature\":34.78,\"dewPoint\":21.55,\"humidity\":0.44,\"pressure\":1028.14,\"windSpeed\":13.7,\"windGust\":20.18,\"windBearing\":353,\"cloudCover\":0.39,\"uvIndex\":1.51,\"visibility\":10.0,\"ozone\":318.57,\"nearestStormDistance\":43.07,\"nearestStormBearing\":172},{\"time\":1774299600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.12,\"apparentTemperature\":35.44,\"dewPoint\":21.04,\"humidity\":0.42,\"pressure\":1028.08,\"windSpeed\":13.85,\"windGust\":20.11,\"windBearing\":350,\"cloudCover\":0.35,\"uvIndex\":1.88,\"visibility\":10.0,\"ozone\":321.3,\"nearestStormDistance\":58.05,\"nearestStormBearing\":213},{\"time\":1774303200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.09,\"apparentTemperature\":35.34,\"dewPoint\":20.79,\"humidity\":0.42,\"pressure\":1028.61,\"windSpeed\":13.78,\"windGust\":18.99,\"windBearing\":350,\"cloudCover\":0.34,\"uvIndex\":1.4,\"visibility\":10.0,\"ozone\":323.19,\"nearestStormDistance\":53.14,\"nearestStormBearing\":217},{\"time\":1774306800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.06,\"apparentTemperature\":35.25,\"dewPoint\":20.53,\"humidity\":0.42,\"pressure\":1029.15,\"windSpeed\":13.7,\"windGust\":17.87,\"windBearing\":350,\"cloudCover\":0.32,\"uvIndex\":0.92,\"visibility\":10.0,\"ozone\":325.07,\"nearestStormDistance\":48.24,\"nearestStormBearing\":221},{\"time\":1774310400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":42.03,\"apparentTemperature\":35.15,\"dewPoint\":20.28,\"humidity\":0.42,\"pressure\":1029.68,\"windSpeed\":13.63,\"windGust\":16.76,\"windBearing\":350,\"cloudCover\":0.31,\"uvIndex\":0.44,\"visibility\":10.0,\"ozone\":326.96,\"nearestStormDistance\":43.33,\"nearestStormBearing\":225},{\"time\":1774314000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":41.2,\"apparentTemperature\":34.12,\"dewPoint\":20.12,\"humidity\":0.43,\"pressure\":1029.87,\"windSpeed\":13.26,\"windGust\":16.31,\"windBearing\":347,\"cloudCover\":0.26,\"uvIndex\":0.29,\"visibility\":10.0,\"ozone\":329.73,\"nearestStormDistance\":48.28,\"nearestStormBearing\":258},{\"time\":1774317600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":40.37,\"apparentTemperature\":33.09,\"dewPoint\":19.96,\"humidity\":0.43,\"pressure\":1030.06,\"windSpeed\":12.88,\"windGust\":15.86,\"windBearing\":343,\"cloudCover\":0.22,\"uvIndex\":0.15,\"visibility\":10.0,\"ozone\":332.5,\"nearestStormDistance\":53.23,\"nearestStormBearing\":292},{\"time\":1774321200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":39.54,\"apparentTemperature\":32.05,\"dewPoint\":19.8,\"humidity\":0.44,\"pressure\":1030.25,\"windSpeed\":12.51,\"windGust\":15.41,\"windBearing\":340,\"cloudCover\":0.17,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":335.27,\"nearestStormDistance\":58.19,\"nearestStormBearing\":326},{\"time\":1774324800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":38.71,\"apparentTemperature\":31.07,\"dewPoint\":19.03,\"humidity\":0.44,\"pressure\":1030.44,\"windSpeed\":11.91,\"windGust\":14.97,\"windBearing\":343,\"cloudCover\":0.15,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":340.96,\"nearestStormDistance\":130.35,\"nearestStormBearing\":236},{\"time\":1774328400,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.87,\"apparentTemperature\":30.09,\"dewPoint\":18.26,\"humidity\":0.45,\"pressure\":1030.63,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":347,\"cloudCover\":0.12,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":346.65,\"nearestStormDistance\":202.52,\"nearestStormBearing\":147},{\"time\":1774332000,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":37.04,\"apparentTemperature\":29.1,\"dewPoint\":17.49,\"humidity\":0.45,\"pressure\":1030.81,\"windSpeed\":10.72,\"windGust\":14.07,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":352.34,\"nearestStormDistance\":274.69,\"nearestStormBearing\":57},{\"time\":1774335600,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":36.39,\"apparentTemperature\":28.34,\"dewPoint\":17.37,\"humidity\":0.46,\"pressure\":1030.58,\"windSpeed\":10.72,\"windGust\":13.93,\"windBearing\":350,\"cloudCover\":0.1,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":360.54,\"nearestStormDistance\":221.96,\"nearestStormBearing\":49},{\"time\":1774339200,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.0,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.74,\"apparentTemperature\":27.58,\"dewPoint\":17.24,\"humidity\":0.47,\"pressure\":1030.34,\"windSpeed\":10.72,\"windGust\":13.79,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":368.74,\"nearestStormDistance\":169.23,\"nearestStormBearing\":41},{\"time\":1774342800,\"summary\":\"Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0012,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.1,\"apparentTemperature\":26.82,\"dewPoint\":17.11,\"humidity\":0.48,\"pressure\":1030.11,\"windSpeed\":10.72,\"windGust\":13.65,\"windBearing\":350,\"cloudCover\":0.11,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":376.94,\"nearestStormDistance\":116.5,\"nearestStormBearing\":33},{\"time\":1774346400,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.81,\"apparentTemperature\":26.64,\"dewPoint\":17.42,\"humidity\":0.49,\"pressure\":1029.87,\"windSpeed\":10.72,\"windGust\":13.64,\"windBearing\":233,\"cloudCover\":0.14,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":381.4,\"nearestStormDistance\":165.42,\"nearestStormBearing\":54},{\"time\":1774350000,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.52,\"apparentTemperature\":26.47,\"dewPoint\":17.73,\"humidity\":0.49,\"pressure\":1029.64,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":117,\"cloudCover\":0.17,\"uvIndex\":0.07,\"visibility\":10.0,\"ozone\":385.86,\"nearestStormDistance\":214.34,\"nearestStormBearing\":75},{\"time\":1774353600,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":34.23,\"apparentTemperature\":26.29,\"dewPoint\":18.03,\"humidity\":0.5,\"pressure\":1029.4,\"windSpeed\":10.72,\"windGust\":13.63,\"windBearing\":0,\"cloudCover\":0.2,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":390.32,\"nearestStormDistance\":263.26,\"nearestStormBearing\":95},{\"time\":1774357200,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.01,\"apparentTemperature\":27.04,\"dewPoint\":17.47,\"humidity\":0.48,\"pressure\":1028.55,\"windSpeed\":10.72,\"windGust\":14.22,\"windBearing\":7,\"cloudCover\":0.26,\"uvIndex\":0.93,\"visibility\":10.0,\"ozone\":393.27,\"nearestStormDistance\":254.65,\"nearestStormBearing\":95},{\"time\":1774360800,\"summary\":\"Mostly + Clear\",\"icon\":\"clear-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"snow\",\"temperature\":35.78,\"apparentTemperature\":27.79,\"dewPoint\":16.92,\"humidity\":0.45,\"pressure\":1027.69,\"windSpeed\":10.72,\"windGust\":14.82,\"windBearing\":13,\"cloudCover\":0.33,\"uvIndex\":1.77,\"visibility\":10.0,\"ozone\":396.21,\"nearestStormDistance\":246.03,\"nearestStormBearing\":96},{\"time\":1774364400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":36.55,\"apparentTemperature\":28.54,\"dewPoint\":16.36,\"humidity\":0.43,\"pressure\":1026.83,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":20,\"cloudCover\":0.39,\"uvIndex\":2.6,\"visibility\":10.0,\"ozone\":399.16,\"nearestStormDistance\":237.42,\"nearestStormBearing\":96},{\"time\":1774368000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":37.68,\"apparentTemperature\":29.94,\"dewPoint\":16.6,\"humidity\":0.42,\"pressure\":1025.98,\"windSpeed\":11.24,\"windGust\":16.23,\"windBearing\":60,\"cloudCover\":0.42,\"uvIndex\":3.57,\"visibility\":10.0,\"ozone\":393.36,\"nearestStormDistance\":232.51,\"nearestStormBearing\":94},{\"time\":1774371600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":38.81,\"apparentTemperature\":31.34,\"dewPoint\":16.85,\"humidity\":0.4,\"pressure\":1025.12,\"windSpeed\":11.77,\"windGust\":17.05,\"windBearing\":100,\"cloudCover\":0.46,\"uvIndex\":4.54,\"visibility\":10.0,\"ozone\":387.55,\"nearestStormDistance\":227.6,\"nearestStormBearing\":92},{\"time\":1774375200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.94,\"apparentTemperature\":32.74,\"dewPoint\":17.1,\"humidity\":0.39,\"pressure\":1024.26,\"windSpeed\":12.29,\"windGust\":17.87,\"windBearing\":140,\"cloudCover\":0.49,\"uvIndex\":5.51,\"visibility\":10.0,\"ozone\":381.74,\"nearestStormDistance\":222.68,\"nearestStormBearing\":90},{\"time\":1774378800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.65,\"apparentTemperature\":33.65,\"dewPoint\":17.72,\"humidity\":0.39,\"pressure\":1023.53,\"windSpeed\":12.44,\"windGust\":17.8,\"windBearing\":160,\"cloudCover\":0.52,\"uvIndex\":5.02,\"visibility\":10.0,\"ozone\":380.91,\"nearestStormDistance\":225.08,\"nearestStormBearing\":86},{\"time\":1774382400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0043,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.37,\"apparentTemperature\":34.56,\"dewPoint\":18.34,\"humidity\":0.39,\"pressure\":1022.8,\"windSpeed\":12.58,\"windGust\":17.72,\"windBearing\":180,\"cloudCover\":0.56,\"uvIndex\":4.53,\"visibility\":10.0,\"ozone\":380.07,\"nearestStormDistance\":227.47,\"nearestStormBearing\":83},{\"time\":1774386000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0039,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.08,\"apparentTemperature\":35.47,\"dewPoint\":18.97,\"humidity\":0.39,\"pressure\":1022.07,\"windSpeed\":12.73,\"windGust\":17.65,\"windBearing\":200,\"cloudCover\":0.59,\"uvIndex\":4.04,\"visibility\":10.0,\"ozone\":379.24,\"nearestStormDistance\":229.86,\"nearestStormBearing\":79},{\"time\":1774389600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.03,\"apparentTemperature\":35.61,\"dewPoint\":19.71,\"humidity\":0.4,\"pressure\":1021.34,\"windSpeed\":12.51,\"windGust\":17.05,\"windBearing\":200,\"cloudCover\":0.58,\"uvIndex\":2.89,\"visibility\":10.0,\"ozone\":380.33,\"nearestStormDistance\":301.76,\"nearestStormBearing\":122},{\"time\":1774393200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0035,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.98,\"apparentTemperature\":35.75,\"dewPoint\":20.46,\"humidity\":0.42,\"pressure\":1020.61,\"windSpeed\":12.29,\"windGust\":16.46,\"windBearing\":200,\"cloudCover\":0.56,\"uvIndex\":1.74,\"visibility\":10.0,\"ozone\":381.42,\"nearestStormDistance\":373.66,\"nearestStormBearing\":165},{\"time\":1774396800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.94,\"apparentTemperature\":35.89,\"dewPoint\":21.2,\"humidity\":0.43,\"pressure\":1019.88,\"windSpeed\":12.06,\"windGust\":15.86,\"windBearing\":200,\"cloudCover\":0.55,\"uvIndex\":0.59,\"visibility\":10.0,\"ozone\":382.51,\"nearestStormDistance\":445.56,\"nearestStormBearing\":208},{\"time\":1774400400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0028,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.82,\"apparentTemperature\":35.65,\"dewPoint\":22.16,\"humidity\":0.45,\"pressure\":1019.97,\"windSpeed\":11.69,\"windGust\":15.19,\"windBearing\":203,\"cloudCover\":0.56,\"uvIndex\":0.39,\"visibility\":10.0,\"ozone\":385.23,\"nearestStormDistance\":426.54,\"nearestStormBearing\":208},{\"time\":1774404000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.06,\"precipIntensityError\":0.0024,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.7,\"apparentTemperature\":35.41,\"dewPoint\":23.12,\"humidity\":0.48,\"pressure\":1020.07,\"windSpeed\":11.32,\"windGust\":14.52,\"windBearing\":207,\"cloudCover\":0.58,\"uvIndex\":0.2,\"visibility\":10.0,\"ozone\":387.94,\"nearestStormDistance\":407.53,\"nearestStormBearing\":207},{\"time\":1774407600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.58,\"apparentTemperature\":35.17,\"dewPoint\":24.08,\"humidity\":0.5,\"pressure\":1020.16,\"windSpeed\":10.95,\"windGust\":13.85,\"windBearing\":210,\"cloudCover\":0.59,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":390.66,\"nearestStormDistance\":388.51,\"nearestStormBearing\":207},{\"time\":1774411200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0016,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.29,\"apparentTemperature\":34.82,\"dewPoint\":24.87,\"humidity\":0.52,\"pressure\":1020.25,\"windSpeed\":10.79,\"windGust\":13.84,\"windBearing\":217,\"cloudCover\":0.61,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":393.22,\"nearestStormDistance\":380.31,\"nearestStormBearing\":206},{\"time\":1774414800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0008,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.01,\"apparentTemperature\":34.47,\"dewPoint\":25.66,\"humidity\":0.53,\"pressure\":1020.35,\"windSpeed\":10.63,\"windGust\":13.83,\"windBearing\":223,\"cloudCover\":0.64,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":395.78,\"nearestStormDistance\":372.11,\"nearestStormBearing\":205},{\"time\":1774418400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.05,\"precipIntensityError\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.72,\"apparentTemperature\":34.12,\"dewPoint\":26.46,\"humidity\":0.55,\"pressure\":1020.44,\"windSpeed\":10.47,\"windGust\":13.82,\"windBearing\":230,\"cloudCover\":0.66,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":398.33,\"nearestStormDistance\":363.91,\"nearestStormBearing\":204},{\"time\":1774422000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.07,\"precipIntensityError\":0.002,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.43,\"apparentTemperature\":33.75,\"dewPoint\":26.76,\"humidity\":0.57,\"pressure\":1020.61,\"windSpeed\":10.31,\"windGust\":13.81,\"windBearing\":237,\"cloudCover\":0.67,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":399.56,\"nearestStormDistance\":342.85,\"nearestStormBearing\":190},{\"time\":1774425600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.09,\"precipIntensityError\":0.0032,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.15,\"apparentTemperature\":33.38,\"dewPoint\":27.07,\"humidity\":0.58,\"pressure\":1020.77,\"windSpeed\":10.15,\"windGust\":13.8,\"windBearing\":243,\"cloudCover\":0.69,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":400.78,\"nearestStormDistance\":321.78,\"nearestStormBearing\":177},{\"time\":1774429200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0047,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.86,\"apparentTemperature\":33.01,\"dewPoint\":27.37,\"humidity\":0.6,\"pressure\":1020.93,\"windSpeed\":9.99,\"windGust\":13.79,\"windBearing\":250,\"cloudCover\":0.7,\"uvIndex\":0.0,\"visibility\":10.0,\"ozone\":402.01,\"nearestStormDistance\":300.72,\"nearestStormBearing\":163},{\"time\":1774432800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-night\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0063,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.58,\"apparentTemperature\":33.27,\"dewPoint\":27.81,\"humidity\":0.62,\"pressure\":1021.1,\"windSpeed\":9.83,\"windGust\":13.78,\"windBearing\":257,\"cloudCover\":0.69,\"uvIndex\":0.03,\"visibility\":10.0,\"ozone\":407.34,\"nearestStormDistance\":272.51,\"nearestStormBearing\":181},{\"time\":1774436400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0075,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.65,\"apparentTemperature\":33.54,\"dewPoint\":28.24,\"humidity\":0.62,\"pressure\":1021.26,\"windSpeed\":9.83,\"windGust\":13.7,\"windBearing\":263,\"cloudCover\":0.69,\"uvIndex\":0.06,\"visibility\":10.0,\"ozone\":412.67,\"nearestStormDistance\":244.31,\"nearestStormBearing\":198},{\"time\":1774440000,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0091,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":39.72,\"apparentTemperature\":33.8,\"dewPoint\":28.67,\"humidity\":0.63,\"pressure\":1021.42,\"windSpeed\":9.83,\"windGust\":13.63,\"windBearing\":270,\"cloudCover\":0.68,\"uvIndex\":0.1,\"visibility\":10.0,\"ozone\":418.0,\"nearestStormDistance\":216.11,\"nearestStormBearing\":216},{\"time\":1774443600,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0106,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":40.74,\"apparentTemperature\":34.92,\"dewPoint\":28.15,\"humidity\":0.6,\"pressure\":1021.35,\"windSpeed\":10.13,\"windGust\":14.22,\"windBearing\":273,\"cloudCover\":0.67,\"uvIndex\":0.89,\"visibility\":10.0,\"ozone\":417.94,\"nearestStormDistance\":214.18,\"nearestStormBearing\":214},{\"time\":1774447200,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0126,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":41.76,\"apparentTemperature\":36.03,\"dewPoint\":27.64,\"humidity\":0.57,\"pressure\":1021.27,\"windSpeed\":10.43,\"windGust\":14.82,\"windBearing\":277,\"cloudCover\":0.66,\"uvIndex\":1.68,\"visibility\":10.0,\"ozone\":417.87,\"nearestStormDistance\":212.26,\"nearestStormBearing\":213},{\"time\":1774450800,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":42.78,\"apparentTemperature\":37.15,\"dewPoint\":27.12,\"humidity\":0.54,\"pressure\":1021.2,\"windSpeed\":10.72,\"windGust\":15.41,\"windBearing\":280,\"cloudCover\":0.65,\"uvIndex\":2.48,\"visibility\":10.0,\"ozone\":417.81,\"nearestStormDistance\":210.33,\"nearestStormBearing\":212},{\"time\":1774454400,\"summary\":\"Mostly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0162,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":44.07,\"apparentTemperature\":38.64,\"dewPoint\":27.09,\"humidity\":0.51,\"pressure\":1021.12,\"windSpeed\":11.1,\"windGust\":16.08,\"windBearing\":277,\"cloudCover\":0.63,\"uvIndex\":3.46,\"visibility\":10.0,\"ozone\":414.05,\"nearestStormDistance\":193.67,\"nearestStormBearing\":195},{\"time\":1774458000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0177,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":45.35,\"apparentTemperature\":40.12,\"dewPoint\":27.05,\"humidity\":0.49,\"pressure\":1021.04,\"windSpeed\":11.47,\"windGust\":16.76,\"windBearing\":273,\"cloudCover\":0.61,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":410.3,\"nearestStormDistance\":177.01,\"nearestStormBearing\":178},{\"time\":1774461600,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0197,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":46.63,\"apparentTemperature\":41.61,\"dewPoint\":27.01,\"humidity\":0.46,\"pressure\":1020.97,\"windSpeed\":11.84,\"windGust\":17.43,\"windBearing\":270,\"cloudCover\":0.59,\"uvIndex\":5.44,\"visibility\":10.0,\"ozone\":406.55,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774465200,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.11,\"precipIntensityError\":0.0169,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":47.34,\"apparentTemperature\":42.34,\"dewPoint\":27.39,\"humidity\":0.45,\"pressure\":1020.84,\"windSpeed\":12.29,\"windGust\":17.57,\"windBearing\":277,\"cloudCover\":0.58,\"uvIndex\":4.94,\"visibility\":10.0,\"ozone\":401.03,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774468800,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0142,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.05,\"apparentTemperature\":43.06,\"dewPoint\":27.76,\"humidity\":0.45,\"pressure\":1020.72,\"windSpeed\":12.73,\"windGust\":17.72,\"windBearing\":283,\"cloudCover\":0.58,\"uvIndex\":4.45,\"visibility\":10.0,\"ozone\":395.52,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774472400,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0114,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.76,\"apparentTemperature\":43.79,\"dewPoint\":28.13,\"humidity\":0.44,\"pressure\":1020.6,\"windSpeed\":13.18,\"windGust\":17.87,\"windBearing\":290,\"cloudCover\":0.57,\"uvIndex\":3.95,\"visibility\":10.0,\"ozone\":390.0,\"nearestStormDistance\":160.35,\"nearestStormBearing\":161},{\"time\":1774476000,\"summary\":\"Partly + Cloudy\",\"icon\":\"partly-cloudy-day\",\"precipIntensity\":0.0,\"precipProbability\":0.12,\"precipIntensityError\":0.0087,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperature\":48.36,\"apparentTemperature\":43.41,\"dewPoint\":28.35,\"humidity\":0.45,\"pressure\":1020.48,\"windSpeed\":12.81,\"windGust\":17.28,\"windBearing\":303,\"cloudCover\":0.56,\"uvIndex\":2.84,\"visibility\":10.0,\"ozone\":386.11,\"nearestStormDistance\":237.03,\"nearestStormBearing\":146}]},\"daily\":{\"summary\":\"Mixed + precipitation on Saturday and Monday, with highs reaching 60\xB0F on Sunday.\",\"icon\":\"sleet\",\"data\":[{\"time\":1773806400,\"summary\":\"Mostly + clear until afternoon, returning overnight.\",\"icon\":\"clear-day\",\"sunriseTime\":1773831768,\"sunsetTime\":1773875149,\"moonPhase\":0.98,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773806400,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"none\",\"temperatureHigh\":35.8,\"temperatureHighTime\":1773871200,\"temperatureLow\":34.03,\"temperatureLowTime\":1773910800,\"apparentTemperatureHigh\":31.89,\"apparentTemperatureHighTime\":1773860400,\"apparentTemperatureLow\":24.89,\"apparentTemperatureLowTime\":1773882000,\"dewPoint\":12.86,\"humidity\":0.43,\"pressure\":1027.89,\"windSpeed\":9.38,\"windGust\":12.08,\"windGustTime\":1773806400,\"windBearing\":210,\"cloudCover\":0.26,\"uvIndex\":5.29,\"uvIndexTime\":1773856800,\"visibility\":10.0,\"temperatureMin\":29.73,\"temperatureMinTime\":1773838800,\"temperatureMax\":35.8,\"temperatureMaxTime\":1773871200,\"apparentTemperatureMin\":18.06,\"apparentTemperatureMinTime\":1773828000,\"apparentTemperatureMax\":31.89,\"apparentTemperatureMaxTime\":1773860400},{\"time\":1773892800,\"summary\":\"Partly + cloudy throughout the day.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1773918069,\"sunsetTime\":1773961613,\"moonPhase\":0.02,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1773892800,\"precipProbability\":0.0,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":43.23,\"temperatureHighTime\":1773957600,\"temperatureLow\":41.51,\"temperatureLowTime\":1774000800,\"apparentTemperatureHigh\":35.19,\"apparentTemperatureHighTime\":1773946800,\"apparentTemperatureLow\":33.87,\"apparentTemperatureLowTime\":1773961200,\"dewPoint\":24.05,\"humidity\":0.55,\"pressure\":1024.83,\"windSpeed\":7.33,\"windGust\":9.91,\"windGustTime\":1773954000,\"windBearing\":154,\"cloudCover\":0.44,\"uvIndex\":5.42,\"uvIndexTime\":1773943200,\"visibility\":10.0,\"temperatureMin\":34.03,\"temperatureMinTime\":1773910800,\"temperatureMax\":43.23,\"temperatureMaxTime\":1773957600,\"apparentTemperatureMin\":26.4,\"apparentTemperatureMinTime\":1773910800,\"apparentTemperatureMax\":35.19,\"apparentTemperatureMaxTime\":1773946800},{\"time\":1773979200,\"summary\":\"Light + rain overnight.\",\"icon\":\"rain\",\"sunriseTime\":1774004370,\"sunsetTime\":1774048077,\"moonPhase\":0.05,\"precipIntensity\":0.0013,\"precipIntensityMax\":0.015,\"precipIntensityMaxTime\":1774062000,\"precipProbability\":0.49,\"precipAccumulation\":0.03,\"precipType\":\"rain\",\"temperatureHigh\":52.02,\"temperatureHighTime\":1774040400,\"temperatureLow\":49.02,\"temperatureLowTime\":1774087200,\"apparentTemperatureHigh\":45.07,\"apparentTemperatureHighTime\":1774033200,\"apparentTemperatureLow\":40.62,\"apparentTemperatureLowTime\":1774062000,\"dewPoint\":34.13,\"humidity\":0.62,\"pressure\":1018.82,\"windSpeed\":9.53,\"windGust\":12.8,\"windGustTime\":1774040400,\"windBearing\":210,\"cloudCover\":0.61,\"uvIndex\":5.15,\"uvIndexTime\":1774029600,\"visibility\":10.0,\"temperatureMin\":41.18,\"temperatureMinTime\":1774008000,\"temperatureMax\":52.02,\"temperatureMaxTime\":1774040400,\"apparentTemperatureMin\":34.65,\"apparentTemperatureMinTime\":1773986400,\"apparentTemperatureMax\":45.07,\"apparentTemperatureMaxTime\":1774033200},{\"time\":1774065600,\"summary\":\"Light + rain in the morning.\",\"icon\":\"rain\",\"sunriseTime\":1774090671,\"sunsetTime\":1774134541,\"moonPhase\":0.09,\"precipIntensity\":0.0088,\"precipIntensityMax\":0.0234,\"precipIntensityMaxTime\":1774083600,\"precipProbability\":0.49,\"precipAccumulation\":0.2102,\"precipType\":\"rain\",\"temperatureHigh\":56.62,\"temperatureHighTime\":1774126800,\"temperatureLow\":48.94,\"temperatureLowTime\":1774159200,\"apparentTemperatureHigh\":50.4,\"apparentTemperatureHighTime\":1774126800,\"apparentTemperatureLow\":41.34,\"apparentTemperatureLowTime\":1774159200,\"dewPoint\":40.98,\"humidity\":0.66,\"pressure\":1010.47,\"windSpeed\":11.36,\"windGust\":15.9,\"windGustTime\":1774126800,\"windBearing\":256,\"cloudCover\":0.64,\"uvIndex\":3.98,\"uvIndexTime\":1774119600,\"visibility\":7.17,\"temperatureMin\":48.83,\"temperatureMinTime\":1774094400,\"temperatureMax\":56.62,\"temperatureMaxTime\":1774126800,\"apparentTemperatureMin\":40.67,\"apparentTemperatureMinTime\":1774065600,\"apparentTemperatureMax\":50.4,\"apparentTemperatureMaxTime\":1774126800},{\"time\":1774152000,\"summary\":\"Breezy + in the evening and flurries and rain overnight.\",\"icon\":\"wind\",\"sunriseTime\":1774176971,\"sunsetTime\":1774221005,\"moonPhase\":0.13,\"precipIntensity\":0.0008,\"precipIntensityMax\":0.01,\"precipIntensityMaxTime\":1774234800,\"precipProbability\":0.28,\"precipAccumulation\":0.02,\"precipType\":\"rain\",\"temperatureHigh\":59.88,\"temperatureHighTime\":1774213200,\"temperatureLow\":44.04,\"temperatureLowTime\":1774260000,\"apparentTemperatureHigh\":53.29,\"apparentTemperatureHighTime\":1774202400,\"apparentTemperatureLow\":31.58,\"apparentTemperatureLowTime\":1774260000,\"dewPoint\":41.04,\"humidity\":0.63,\"pressure\":1008.08,\"windSpeed\":12.06,\"windGust\":16.39,\"windGustTime\":1774213200,\"windBearing\":258,\"cloudCover\":0.74,\"uvIndex\":5.55,\"uvIndexTime\":1774202400,\"visibility\":10.0,\"temperatureMin\":48.94,\"temperatureMinTime\":1774159200,\"temperatureMax\":59.88,\"temperatureMaxTime\":1774213200,\"apparentTemperatureMin\":41.34,\"apparentTemperatureMinTime\":1774159200,\"apparentTemperatureMax\":53.29,\"apparentTemperatureMaxTime\":1774202400},{\"time\":1774238400,\"summary\":\"Flurries + and breezy in the morning.\",\"icon\":\"snow\",\"sunriseTime\":1774263272,\"sunsetTime\":1774307468,\"moonPhase\":0.16,\"precipIntensity\":0.0046,\"precipIntensityMax\":0.0117,\"precipIntensityMaxTime\":1774256400,\"precipProbability\":0.31,\"precipAccumulation\":0.364,\"precipType\":\"snow\",\"temperatureHigh\":43.0,\"temperatureHighTime\":1774263600,\"temperatureLow\":34.81,\"temperatureLowTime\":1774346400,\"apparentTemperatureHigh\":30.57,\"apparentTemperatureHighTime\":1774299600,\"apparentTemperatureLow\":23.23,\"apparentTemperatureLowTime\":1774346400,\"dewPoint\":26.8,\"humidity\":0.53,\"pressure\":1026.56,\"windSpeed\":14.27,\"windGust\":19.1,\"windGustTime\":1774278000,\"windBearing\":164,\"cloudCover\":0.5,\"uvIndex\":1.88,\"uvIndexTime\":1774299600,\"visibility\":9.57,\"temperatureMin\":39.38,\"temperatureMinTime\":1774278000,\"temperatureMax\":51.25,\"temperatureMaxTime\":1774238400,\"apparentTemperatureMin\":26.12,\"apparentTemperatureMinTime\":1774278000,\"apparentTemperatureMax\":40.16,\"apparentTemperatureMaxTime\":1774238400},{\"time\":1774324800,\"summary\":\"Partly + cloudy from afternoon until night.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774349573,\"sunsetTime\":1774393932,\"moonPhase\":0.2,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774324800,\"precipProbability\":0.07,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":42.08,\"temperatureHighTime\":1774386000,\"temperatureLow\":39.58,\"temperatureLowTime\":1774432800,\"apparentTemperatureHigh\":34.71,\"apparentTemperatureHighTime\":1774386000,\"apparentTemperatureLow\":29.6,\"apparentTemperatureLowTime\":1774432800,\"dewPoint\":18.61,\"humidity\":0.44,\"pressure\":1025.86,\"windSpeed\":11.43,\"windGust\":15.32,\"windGustTime\":1774375200,\"windBearing\":189,\"cloudCover\":0.36,\"uvIndex\":5.51,\"uvIndexTime\":1774375200,\"visibility\":10.0,\"temperatureMin\":34.23,\"temperatureMinTime\":1774353600,\"temperatureMax\":42.08,\"temperatureMaxTime\":1774386000,\"apparentTemperatureMin\":22.73,\"apparentTemperatureMinTime\":1774353600,\"apparentTemperatureMax\":34.71,\"apparentTemperatureMaxTime\":1774386000},{\"time\":1774411200,\"summary\":\"Mostly + cloudy until afternoon, returning overnight.\",\"icon\":\"partly-cloudy-day\",\"sunriseTime\":1774435873,\"sunsetTime\":1774480395,\"moonPhase\":0.24,\"precipIntensity\":0.0,\"precipIntensityMax\":0.0,\"precipIntensityMaxTime\":1774411200,\"precipProbability\":0.12,\"precipAccumulation\":0.0,\"precipType\":\"rain\",\"temperatureHigh\":48.76,\"temperatureHighTime\":1774472400,\"temperatureLow\":42.0,\"temperatureLowTime\":1774512000,\"apparentTemperatureHigh\":41.83,\"apparentTemperatureHighTime\":1774472400,\"apparentTemperatureLow\":31.72,\"apparentTemperatureLowTime\":1774512000,\"dewPoint\":27.59,\"humidity\":0.53,\"pressure\":1020.86,\"windSpeed\":11.18,\"windGust\":15.35,\"windGustTime\":1774472400,\"windBearing\":263,\"cloudCover\":0.62,\"uvIndex\":5.44,\"uvIndexTime\":1774461600,\"visibility\":10.0,\"temperatureMin\":39.58,\"temperatureMinTime\":1774432800,\"temperatureMax\":48.76,\"temperatureMaxTime\":1774472400,\"apparentTemperatureMin\":29.6,\"apparentTemperatureMinTime\":1774432800,\"apparentTemperatureMax\":41.83,\"apparentTemperatureMaxTime\":1774472400}]},\"alerts\":[],\"flags\":{\"sources\":[\"ETOPO1\",\"hrrrsubh\",\"rtma_ru\",\"hrrr_0-18\",\"nbm\",\"nbm_fire\",\"dwd_mosmix\",\"ecmwf_ifs\",\"hrrr_18-48\",\"gfs\",\"gefs\"],\"sourceTimes\":{\"hrrr_subh\":\"2026-03-18 + 21Z\",\"rtma_ru\":\"2026-03-18 23:15Z\",\"hrrr_0-18\":\"2026-03-18 21Z\",\"nbm\":\"2026-03-18 + 19Z\",\"nbm_fire\":\"2026-03-18 18Z\",\"dwd_mosmix\":\"2026-03-18 22Z\",\"ecmwf_ifs\":\"2026-03-18 + 00Z\",\"hrrr_18-48\":\"2026-03-18 18Z\",\"gfs\":\"2026-03-18 12Z\",\"gefs\":\"2026-03-18 + 12Z\"},\"nearest-station\":6.81,\"units\":\"us\",\"version\":\"V2.9.3\"}}" + headers: + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - max-age=900, must-revalidate + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 18 Mar 2026 23:48:53 GMT + Ratelimit-Limit: + - '10000' + Ratelimit-Remaining: + - '9851' + Ratelimit-Reset: + - '1037466' + Server: + - uvicorn + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 kong/3.10.0.8-enterprise-edition, 1.1 506bffda4b1949c4425629ce0bdce052.cloudfront.net + (CloudFront) + X-Amz-Cf-Id: + - 6QcgW9CeCiel8VkHx0AjEpcoEx3hd-wF8FOo9F_RXxmRSQoVrjfV6Q== + X-Amz-Cf-Pop: + - FRA56-P12 + X-Cache: + - Miss from cloudfront + X-Forecast-Api-Calls: + - '149' + X-Handler-Time: + - '43.3' + X-Kong-Proxy-Latency: + - '1' + X-Kong-Request-Id: + - ee7cc61bbd394f5633759108863c4144 + X-Kong-Upstream-Latency: + - '45' + X-Node-Id: + - ip-10-0-14-222.ec2.internal + X-Ratelimit-Limit-Month: + - '10000' + X-Ratelimit-Remaining-Month: + - '9851' + X-Response-Time: + - '43.35' + X-Server-Time: + - '44.6' + content-length: + - '94228' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index d4670dd2..17fe0b96 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -45,15 +45,29 @@ # API keys from environment (for live tests or recording new cassettes) VISUAL_CROSSING_API_KEY = os.environ.get("VISUAL_CROSSING_API_KEY", "test-api-key") +PIRATE_WEATHER_API_KEY = os.environ.get("PIRATE_WEATHER_API_KEY", "test-api-key") # ============================================================================= # VCR Configuration # ============================================================================= + # Create custom VCR instance with our configuration # Note: We use filter_query_parameters and filter_headers instead of # before_record_request to avoid compatibility issues with different VCR versions +def _scrub_pw_key_from_uri(request): + """Replace Pirate Weather API key in URL path with a placeholder.""" + import re + + request.uri = re.sub( + r"(api\.pirateweather\.net/forecast/)[^/]+(/)", + r"\1FILTERED_API_KEY\2", + request.uri, + ) + return request + + integration_vcr = vcr.VCR( cassette_library_dir=str(CASSETTE_DIR), record_mode=RECORD_MODE, @@ -62,6 +76,8 @@ # Filter sensitive data from recorded cassettes filter_query_parameters=["key", "api_key", "apikey", "token"], filter_headers=["authorization", "x-api-key", "api-key", "user-agent"], + # Scrub PW API keys from URL paths before recording + before_record_request=_scrub_pw_key_from_uri, # Decode compressed responses for readable cassettes decode_compressed_response=True, ) @@ -117,12 +133,31 @@ def alaska_location() -> Location: ) +@pytest.fixture +def norway_location() -> Location: + """Return a Norwegian location for testing (Tromsø).""" + from accessiweather.models import Location + + return Location( + name="Tromsø, Norway", + latitude=69.6489, + longitude=18.9551, + country_code="NO", + ) + + @pytest.fixture def visual_crossing_api_key() -> str: """Return the Visual Crossing API key.""" return VISUAL_CROSSING_API_KEY +@pytest.fixture +def pirate_weather_api_key() -> str: + """Return the Pirate Weather API key.""" + return PIRATE_WEATHER_API_KEY + + @pytest.fixture def skip_if_no_api_key(): """Skip test if no Visual Crossing API key is configured.""" @@ -130,6 +165,13 @@ def skip_if_no_api_key(): pytest.skip("Visual Crossing API key required for recording") +@pytest.fixture +def skip_if_no_pw_api_key(): + """Skip test if no Pirate Weather API key is configured.""" + if PIRATE_WEATHER_API_KEY == "test-api-key" and RECORD_MODE == "all": + pytest.skip("Pirate Weather API key required for recording") + + @pytest.fixture def skip_if_not_live(): """Skip test if not running in live mode.""" diff --git a/tests/integration/test_pirate_weather_integration.py b/tests/integration/test_pirate_weather_integration.py new file mode 100644 index 00000000..a78abf87 --- /dev/null +++ b/tests/integration/test_pirate_weather_integration.py @@ -0,0 +1,203 @@ +""" +Integration tests for Pirate Weather API client. + +Pirate Weather requires an API key. Tests will use recorded cassettes +unless VCR_RECORD_MODE=all is set (which requires a valid API key). + +These tests verify: +- Current conditions parsing +- Forecast data parsing (daily + hourly) +- Alert parsing (WMO global alerts) +- Minutely precipitation data +- Daily summary text +- Error handling +""" + +from __future__ import annotations + +import pytest + +from tests.integration.conftest import integration_vcr + + +@pytest.mark.integration +class TestPirateWeatherCurrentConditions: + """Test Pirate Weather current conditions API.""" + + @integration_vcr.use_cassette("pirate_weather/current_nyc.yaml") + @pytest.mark.asyncio + async def test_get_current_conditions_us(self, us_location, pirate_weather_api_key): + """Test fetching current conditions for a US location.""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + conditions = await client.get_current_conditions(us_location) + + assert conditions is not None + assert conditions.temperature_f is not None + assert -60 < conditions.temperature_f < 150 + assert conditions.temperature_c is not None + assert conditions.condition is not None + assert conditions.humidity is not None + assert 0 <= conditions.humidity <= 100 + + @integration_vcr.use_cassette("pirate_weather/current_london.yaml") + @pytest.mark.asyncio + async def test_get_current_conditions_international( + self, international_location, pirate_weather_api_key + ): + """Test fetching current conditions for an international location.""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + conditions = await client.get_current_conditions(international_location) + + assert conditions is not None + assert conditions.temperature_f is not None + assert conditions.condition is not None + + @integration_vcr.use_cassette("pirate_weather/current_wind_gust.yaml") + @pytest.mark.asyncio + async def test_current_conditions_wind_data(self, us_location, pirate_weather_api_key): + """Test that wind data is properly parsed.""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + conditions = await client.get_current_conditions(us_location) + + assert conditions is not None + assert conditions.wind_speed_mph is not None + assert conditions.wind_direction is not None + + +@pytest.mark.integration +class TestPirateWeatherForecast: + """Test Pirate Weather forecast API.""" + + @integration_vcr.use_cassette("pirate_weather/forecast_nyc.yaml") + @pytest.mark.asyncio + async def test_get_forecast_7_days(self, us_location, pirate_weather_api_key): + """Test fetching 7-day forecast.""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + forecast = await client.get_forecast(us_location, days=7) + + assert forecast is not None + assert forecast.has_data() + assert len(forecast.periods) <= 7 + assert forecast.periods[0].name == "Today" + assert forecast.periods[0].temperature is not None + + @integration_vcr.use_cassette("pirate_weather/forecast_daily_summary.yaml") + @pytest.mark.asyncio + async def test_daily_summary_present(self, us_location, pirate_weather_api_key): + """Test that daily summary text is parsed from the response.""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + forecast = await client.get_forecast(us_location) + + assert forecast is not None + # PW returns a daily summary string like "Light rain throughout the week." + # It may be None if PW doesn't generate one, but should be a string when present + if forecast.summary is not None: + assert isinstance(forecast.summary, str) + assert len(forecast.summary) > 0 + + +@pytest.mark.integration +class TestPirateWeatherHourlyForecast: + """Test Pirate Weather hourly forecast API.""" + + @integration_vcr.use_cassette("pirate_weather/hourly_nyc.yaml") + @pytest.mark.asyncio + async def test_get_hourly_forecast(self, us_location, pirate_weather_api_key): + """Test fetching hourly forecast (extended to 168 hours).""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + hourly = await client.get_hourly_forecast(us_location) + + assert hourly is not None + assert hourly.has_data() + # With extend=hourly, should get up to 168 hours + assert len(hourly.periods) > 24 + + +@pytest.mark.integration +class TestPirateWeatherAlerts: + """Test Pirate Weather alerts API (WMO global alerts).""" + + @integration_vcr.use_cassette("pirate_weather/alerts_nyc.yaml") + @pytest.mark.asyncio + async def test_get_alerts_us(self, us_location, pirate_weather_api_key): + """Test fetching alerts for a US location.""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + alerts = await client.get_alerts(us_location) + + assert alerts is not None + # NYC may or may not have active alerts + assert isinstance(alerts.alerts, list) + + @integration_vcr.use_cassette("pirate_weather/alerts_tromso.yaml") + @pytest.mark.asyncio + async def test_get_alerts_international(self, norway_location, pirate_weather_api_key): + """Test fetching WMO alerts for an international location.""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + alerts = await client.get_alerts(norway_location) + + assert alerts is not None + assert isinstance(alerts.alerts, list) + # Tromsø cassette was recorded with active alerts + if alerts.alerts: + alert = alerts.alerts[0] + assert alert.title is not None + assert alert.severity is not None + assert alert.source == "PirateWeather" + + +@pytest.mark.integration +class TestPirateWeatherMinutely: + """Test Pirate Weather minutely precipitation data.""" + + @integration_vcr.use_cassette("pirate_weather/minutely_nyc.yaml") + @pytest.mark.asyncio + async def test_minutely_data_present(self, us_location, pirate_weather_api_key): + """Test that minutely precipitation data is returned.""" + from accessiweather.pirate_weather_client import PirateWeatherClient + + client = PirateWeatherClient(api_key=pirate_weather_api_key) + data = await client.get_forecast_data(us_location) + + assert data is not None + minutely = data.get("minutely", {}) + assert "data" in minutely + # Should have ~61 data points (current minute + next 60) + assert len(minutely["data"]) > 0 + + # Each data point should have intensity and probability + point = minutely["data"][0] + assert "precipIntensity" in point + assert "precipProbability" in point + + +@pytest.mark.integration +class TestPirateWeatherErrorHandling: + """Test Pirate Weather error handling.""" + + @pytest.mark.asyncio + async def test_invalid_api_key(self, us_location): + """Test that invalid API key raises appropriate error.""" + from accessiweather.pirate_weather_client import ( + PirateWeatherApiError, + PirateWeatherClient, + ) + + client = PirateWeatherClient(api_key="invalid-key-12345") + with pytest.raises(PirateWeatherApiError): + await client.get_current_conditions(us_location) diff --git a/tests/test_html_formatters.py b/tests/test_html_formatters.py index 0815a205..57ce3b14 100644 --- a/tests/test_html_formatters.py +++ b/tests/test_html_formatters.py @@ -196,8 +196,9 @@ def test_with_hourly_periods(self): ], ) html = generate_forecast_html(pres) - assert "Next 6 Hours" in html - assert 'aria-label="Next 6 hours forecast"' in html + expected_hours = len(pres.hourly_periods) + assert f"Next {expected_hours} Hours" in html + assert f'aria-label="Next {expected_hours} hours forecast"' in html assert "3 PM" in html assert "75°F" in html assert "Sunny" in html diff --git a/tests/test_keyring_warning.py b/tests/test_keyring_warning.py index 40a28337..e5826f76 100644 --- a/tests/test_keyring_warning.py +++ b/tests/test_keyring_warning.py @@ -219,6 +219,8 @@ def test_wizard_continues_after_warning(self): import accessiweather.config.secure_storage as ss ss._keyring_available = False + if not hasattr(wx, "MessageDialog"): + wx.MessageDialog = MagicMock() app = _make_app_stub() prompt_calls = [] @@ -239,7 +241,7 @@ def fake_prompt(*args, **kwargs): ): app._maybe_show_first_start_onboarding() - assert len(prompt_calls) == 2 + assert len(prompt_calls) == 3 # --------------------------------------------------------------------------- diff --git a/tests/test_models.py b/tests/test_models.py index e5da94e9..0b14cbaa 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -17,6 +17,8 @@ HourlyForecast, HourlyForecastPeriod, Location, + MinutelyPrecipitationForecast, + MinutelyPrecipitationPoint, WeatherAlert, WeatherAlerts, WeatherData, @@ -331,6 +333,20 @@ def test_has_any_data(self): ) assert with_forecast.has_any_data() is True + with_minutely = WeatherData( + location=loc, + minutely_precipitation=MinutelyPrecipitationForecast( + points=[ + MinutelyPrecipitationPoint( + time=datetime.now(UTC), + precipitation_intensity=0.1, + precipitation_type="rain", + ) + ] + ), + ) + assert with_minutely.has_any_data() is True + class TestAppSettings: """Tests for AppSettings model.""" @@ -360,6 +376,18 @@ def test_custom_settings(self): assert settings.enable_alerts is False assert settings.data_source == "openmeteo" + def test_minutely_notification_settings_round_trip(self): + """Minutely precipitation notification settings should round-trip cleanly.""" + settings = AppSettings( + notify_minutely_precipitation_start=True, + notify_minutely_precipitation_stop=False, + ) + + restored = AppSettings.from_dict(settings.to_dict()) + + assert restored.notify_minutely_precipitation_start is True + assert restored.notify_minutely_precipitation_stop is False + def test_forecast_time_reference_validation(self): """Ensure invalid forecast_time_reference values fall back to location.""" settings = AppSettings() diff --git a/tests/test_notification_event_manager.py b/tests/test_notification_event_manager.py index 44935574..fd8e5462 100644 --- a/tests/test_notification_event_manager.py +++ b/tests/test_notification_event_manager.py @@ -8,6 +8,11 @@ import pytest from accessiweather.models import AppSettings, CurrentConditions, WeatherData +from accessiweather.notifications.minutely_precipitation import ( + build_minutely_transition_signature, + detect_minutely_precipitation_transition, + parse_pirate_weather_minutely_block, +) from accessiweather.notifications.notification_event_manager import ( NotificationEvent, NotificationEventManager, @@ -50,6 +55,15 @@ def test_from_dict(self): assert state.last_discussion_issuance_time == datetime.fromisoformat(issuance_time_str) assert state.last_severe_risk == 75 + def test_minutely_signature_round_trip(self): + """Test minutely state serialization.""" + state = NotificationState(last_minutely_transition_signature="starting:12:rain") + + data = state.to_dict() + restored = NotificationState.from_dict(data) + + assert restored.last_minutely_transition_signature == "starting:12:rain" + class TestNotificationEventManager: """Tests for NotificationEventManager.""" @@ -96,6 +110,16 @@ def settings_both_enabled(self): settings.notify_severe_risk_change = True return settings + @pytest.fixture + def settings_with_minutely(self): + """Create settings with minutely precipitation notifications enabled.""" + settings = AppSettings() + settings.notify_discussion_update = False + settings.notify_severe_risk_change = False + settings.notify_minutely_precipitation_start = True + settings.notify_minutely_precipitation_stop = True + return settings + @pytest.fixture def settings_none_enabled(self): """Create settings with no event notifications enabled.""" @@ -124,6 +148,7 @@ def test_first_discussion_no_notification(self, manager, settings_with_discussio 2026, 1, 20, 14, 35, 0, tzinfo=timezone.utc ) weather_data.current = None + weather_data.minutely_precipitation = None events = manager.check_for_events(weather_data, settings_with_discussion, "Test Location") assert len(events) == 0 @@ -134,6 +159,7 @@ def test_discussion_update_triggers_notification(self, manager, settings_with_di weather_data = MagicMock(spec=WeatherData) weather_data.current = None weather_data.discussion = "Discussion text" + weather_data.minutely_precipitation = None # First discussion with issuance time first_time = datetime(2026, 1, 20, 14, 35, 0, tzinfo=timezone.utc) @@ -170,6 +196,7 @@ def test_discussion_update_uses_standard_afd_header_time( weather_data = MagicMock(spec=WeatherData) weather_data.current = None weather_data.discussion = "Old discussion" + weather_data.minutely_precipitation = None first_time = datetime(2026, 1, 20, 14, 35, 0, tzinfo=timezone.utc) weather_data.discussion_issuance_time = first_time @@ -195,6 +222,7 @@ def test_discussion_update_falls_back_to_metadata_time(self, manager, settings_w weather_data = MagicMock(spec=WeatherData) weather_data.current = None weather_data.discussion = "Discussion text without an issued header" + weather_data.minutely_precipitation = None first_time = datetime(2026, 1, 20, 14, 35, 0, tzinfo=timezone.utc) weather_data.discussion_issuance_time = first_time @@ -214,6 +242,7 @@ def test_discussion_notification_disabled(self, manager, settings_none_enabled): 2026, 1, 20, 14, 35, 0, tzinfo=timezone.utc ) weather_data.current = None + weather_data.minutely_precipitation = None # First check manager.check_for_events(weather_data, settings_none_enabled, "Test Location") @@ -233,6 +262,7 @@ def test_no_issuance_time_no_notification(self, manager, settings_with_discussio weather_data.discussion = "Some discussion text" weather_data.discussion_issuance_time = None # Non-US location or API issue weather_data.current = None + weather_data.minutely_precipitation = None events = manager.check_for_events(weather_data, settings_with_discussion, "Test Location") assert len(events) == 0 @@ -247,6 +277,7 @@ def test_first_severe_risk_no_notification(self, manager, settings_with_severe_r weather_data.discussion = None weather_data.discussion_issuance_time = None weather_data.current = current + weather_data.minutely_precipitation = None events = manager.check_for_events(weather_data, settings_with_severe_risk, "Test Location") assert len(events) == 0 @@ -261,6 +292,7 @@ def test_severe_risk_category_change_triggers_notification( weather_data.discussion = None weather_data.discussion_issuance_time = None weather_data.current = current + weather_data.minutely_precipitation = None # First risk (low: 20-39) current.severe_weather_risk = 25 @@ -287,6 +319,7 @@ def test_severe_risk_decrease_notification(self, manager, settings_with_severe_r weather_data.discussion = None weather_data.discussion_issuance_time = None weather_data.current = current + weather_data.minutely_precipitation = None # Start at extreme (80+) current.severe_weather_risk = 85 @@ -329,6 +362,7 @@ def test_loaded_discussion_state_preserves_first_run_no_spam(self, tmp_path): weather_data.current = None weather_data.discussion = "Same issuance discussion text" weather_data.discussion_issuance_time = issuance_time + weather_data.minutely_precipitation = None same_events = manager2.check_for_events(weather_data, settings, "Test Location") @@ -359,6 +393,7 @@ def test_unified_runtime_state_preserves_first_run_no_spam(self, tmp_path): weather_data.current = None weather_data.discussion = "Same issuance discussion text" weather_data.discussion_issuance_time = issuance_time + weather_data.minutely_precipitation = None same_events = manager.check_for_events(weather_data, settings, "Test Location") @@ -385,6 +420,7 @@ def test_legacy_severe_risk_numeric_value_migrates_without_category_change_notif weather_data.discussion = None weather_data.discussion_issuance_time = None weather_data.current = current + weather_data.minutely_precipitation = None events = manager.check_for_events(weather_data, settings, "Test Location") reloaded = NotificationEventManager(runtime_state_manager=runtime_state) @@ -406,6 +442,7 @@ def test_loaded_severe_risk_state_tracks_numeric_value_within_category(self, tmp weather_data.discussion = None weather_data.discussion_issuance_time = None weather_data.current = current + weather_data.minutely_precipitation = None current.severe_weather_risk = 35 same_category_events = manager2.check_for_events(weather_data, settings, "Test Location") @@ -418,7 +455,149 @@ def test_loaded_severe_risk_state_tracks_numeric_value_within_category(self, tmp assert len(threshold_events) == 1 assert threshold_events[0].event_type == "severe_risk" - assert "low to moderate" in threshold_events[0].message.lower() + + def test_parse_pirate_weather_minutely_block(self): + """Pirate Weather minutely payloads should parse into the shared forecast model.""" + forecast = parse_pirate_weather_minutely_block( + { + "minutely": { + "summary": "Rain starting in 12 minutes.", + "icon": "rain", + "data": [ + {"time": 1768917600, "precipIntensity": 0, "precipProbability": 0}, + { + "time": 1768917660, + "precipIntensity": 0.02, + "precipProbability": 0.8, + "precipType": "rain", + }, + ], + } + } + ) + + assert forecast is not None + assert forecast.summary == "Rain starting in 12 minutes." + assert len(forecast.points) == 2 + assert forecast.points[1].precipitation_type == "rain" + + def test_detect_minutely_precipitation_start_transition(self): + """Dry-to-wet transitions should use the first wet minute and precip type.""" + forecast = parse_pirate_weather_minutely_block( + { + "data": [ + {"time": 1768917600, "precipIntensity": 0}, + {"time": 1768917660, "precipIntensity": 0}, + {"time": 1768917720, "precipIntensity": 0.02, "precipType": "rain"}, + ] + } + ) + + transition = detect_minutely_precipitation_transition(forecast) + + assert transition is not None + assert transition.transition_type == "starting" + assert transition.minutes_until == 2 + assert transition.precipitation_type == "rain" + assert build_minutely_transition_signature(forecast) == "starting:2:rain" + + def test_detect_minutely_precipitation_stop_transition(self): + """Wet-to-dry transitions should announce when precipitation stops.""" + forecast = parse_pirate_weather_minutely_block( + { + "data": [ + {"time": 1768917600, "precipIntensity": 0.03, "precipType": "snow"}, + {"time": 1768917660, "precipIntensity": 0.01, "precipType": "snow"}, + {"time": 1768917720, "precipIntensity": 0}, + ] + } + ) + + transition = detect_minutely_precipitation_transition(forecast) + + assert transition is not None + assert transition.transition_type == "stopping" + assert transition.minutes_until == 2 + assert transition.precipitation_type == "snow" + + def test_minutely_precipitation_transition_triggers_notification( + self, manager, settings_with_minutely + ): + """A changed minutely transition should generate a user-facing notification.""" + weather_data = MagicMock(spec=WeatherData) + weather_data.discussion = None + weather_data.discussion_issuance_time = None + weather_data.current = None + weather_data.minutely_precipitation = parse_pirate_weather_minutely_block( + { + "data": [ + {"time": 1768917600, "precipIntensity": 0}, + {"time": 1768917660, "precipIntensity": 0.02, "precipType": "rain"}, + ] + } + ) + + first_events = manager.check_for_events(weather_data, settings_with_minutely, "Test City") + second_events = manager.check_for_events(weather_data, settings_with_minutely, "Test City") + assert first_events == [] + assert second_events == [] + + weather_data.minutely_precipitation = parse_pirate_weather_minutely_block( + { + "data": [ + {"time": 1768917600, "precipIntensity": 0}, + {"time": 1768917660, "precipIntensity": 0}, + {"time": 1768917720, "precipIntensity": 0.02, "precipType": "rain"}, + ] + } + ) + + events = manager.check_for_events(weather_data, settings_with_minutely, "Test City") + + assert len(events) == 1 + assert events[0].event_type == "minutely_precipitation_start" + assert events[0].title == "Rain starting in 2 minutes" + assert events[0].message == "Rain starting in 2 minutes for Test City." + assert manager.state.last_minutely_transition_signature == "starting:2:rain" + + def test_minutely_precipitation_stop_can_be_disabled(self, manager): + """Disabled stop notifications should still update state without notifying.""" + settings = AppSettings( + notify_discussion_update=False, + notify_severe_risk_change=False, + notify_minutely_precipitation_start=True, + notify_minutely_precipitation_stop=False, + ) + weather_data = MagicMock(spec=WeatherData) + weather_data.discussion = None + weather_data.discussion_issuance_time = None + weather_data.current = None + weather_data.minutely_precipitation = parse_pirate_weather_minutely_block( + { + "data": [ + {"time": 1768917600, "precipIntensity": 0.04, "precipType": "rain"}, + {"time": 1768917660, "precipIntensity": 0}, + ] + } + ) + + first_events = manager.check_for_events(weather_data, settings, "Test City") + assert first_events == [] + + weather_data.minutely_precipitation = parse_pirate_weather_minutely_block( + { + "data": [ + {"time": 1768917600, "precipIntensity": 0.04, "precipType": "rain"}, + {"time": 1768917660, "precipIntensity": 0.03, "precipType": "rain"}, + {"time": 1768917720, "precipIntensity": 0}, + ] + } + ) + + events = manager.check_for_events(weather_data, settings, "Test City") + + assert events == [] + assert manager.state.last_minutely_transition_signature == "stopping:2:rain" def test_reset_state(self, manager): """Test state reset.""" @@ -431,6 +610,7 @@ def test_reset_state(self, manager): assert manager.state.last_discussion_issuance_time is None assert manager.state.last_severe_risk is None + assert manager.state.last_minutely_transition_signature is None class TestNotificationEvent: diff --git a/tests/test_pirate_weather_client.py b/tests/test_pirate_weather_client.py new file mode 100644 index 00000000..0d37db33 --- /dev/null +++ b/tests/test_pirate_weather_client.py @@ -0,0 +1,608 @@ +""" +Tests for PirateWeatherClient. + +Tests the Pirate Weather API client (https://pirateweather.net). +""" + +from __future__ import annotations + +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest + +from accessiweather.models import Location +from accessiweather.pirate_weather_client import ( + PirateWeatherApiError, + PirateWeatherClient, + _icon_to_condition, +) + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def client(): + return PirateWeatherClient(api_key="test-key", units="us") + + +@pytest.fixture +def sample_forecast_payload(): + """Return a minimal but realistic Pirate Weather payload.""" + return { + "latitude": 40.7128, + "longitude": -74.006, + "timezone": "America/New_York", + "offset": -5, + "currently": { + "time": 1700000000, + "summary": "Partly Cloudy", + "icon": "partly-cloudy-day", + "temperature": 68.0, + "apparentTemperature": 66.5, + "humidity": 0.65, + "dewPoint": 55.0, + "windSpeed": 10.0, + "windGust": 18.0, + "windBearing": 180, + "pressure": 1013.0, + "uvIndex": 3, + "cloudCover": 0.45, + "visibility": 10.0, + "precipIntensity": 0.0, + }, + "minutely": { + "data": [{"time": 1700000060, "precipIntensity": 0.0, "precipProbability": 0.0}] + }, + "hourly": { + "data": [ + { + "time": 1700000000, + "summary": "Partly Cloudy", + "icon": "partly-cloudy-day", + "temperature": 68.0, + "apparentTemperature": 66.5, + "windSpeed": 10.0, + "windGust": 18.0, + "windBearing": 180, + "pressure": 1013.0, + "uvIndex": 3, + "cloudCover": 0.45, + "visibility": 10.0, + "precipIntensity": 0.0, + "precipProbability": 0.1, + } + ] + }, + "daily": { + "data": [ + { + "time": 1699999200, + "summary": "Mostly cloudy throughout the day.", + "icon": "cloudy", + "sunriseTime": 1700020000, + "sunsetTime": 1700055000, + "temperatureHigh": 75.0, + "temperatureLow": 55.0, + "temperatureMax": 75.0, + "temperatureMin": 55.0, + "windSpeed": 8.0, + "windGust": 14.0, + "windBearing": 200, + "uvIndex": 4, + "cloudCover": 0.6, + "precipProbability": 0.2, + "precipIntensity": 0.01, + } + ] + }, + "alerts": [], + } + + +@pytest.fixture +def sample_payload_with_alerts(sample_forecast_payload): + payload = dict(sample_forecast_payload) + payload["alerts"] = [ + { + "title": "Winter Storm Warning", + "severity": "severe", + "time": 1700000000, + "expires": 1700050000, + "description": "Heavy snow expected.", + "uri": "https://alerts.weather.gov/cap/123", + "regions": ["New York"], + } + ] + return payload + + +# --------------------------------------------------------------------------- +# Unit tests – icon / condition mapping +# --------------------------------------------------------------------------- + + +class TestIconToCondition: + def test_known_icon(self): + assert _icon_to_condition("clear-day") == "Clear" + assert _icon_to_condition("rain") == "Rain" + assert _icon_to_condition("partly-cloudy-night") == "Partly Cloudy" + + def test_unknown_icon_title_cases(self): + result = _icon_to_condition("sleet-hail") + assert result == "Sleet Hail" + + def test_none_returns_none(self): + assert _icon_to_condition(None) is None + + def test_empty_string_returns_none(self): + assert _icon_to_condition("") is None + + +# --------------------------------------------------------------------------- +# Unit tests – client initialization +# --------------------------------------------------------------------------- + + +class TestPirateWeatherClientInit: + def test_default_init(self): + c = PirateWeatherClient(api_key="abc123") + assert c.api_key == "abc123" + assert c.units == "us" + assert c.user_agent == "AccessiWeather/1.0" + + def test_custom_units(self): + c = PirateWeatherClient(api_key="key", units="si") + assert c.units == "si" + + def test_build_url(self): + c = PirateWeatherClient(api_key="mykey") + url = c._build_url(40.71, -74.01) + assert "mykey" in url + assert "40.71" in url + assert "-74.01" in url + + +# --------------------------------------------------------------------------- +# Unit tests – _parse_current_conditions +# --------------------------------------------------------------------------- + + +class TestParseCurrentConditions: + def test_basic_parse(self, client, sample_forecast_payload): + result = client._parse_current_conditions(sample_forecast_payload) + assert result.temperature_f == 68.0 + assert result.humidity == 65 + assert result.condition == "Partly Cloudy" + assert result.wind_speed_mph == 10.0 + assert result.pressure_mb == 1013.0 + assert result.cloud_cover == 45 + assert result.uv_index == 3 + assert result.wind_gust_mph == 18.0 + + def test_temperature_conversions(self, client, sample_forecast_payload): + result = client._parse_current_conditions(sample_forecast_payload) + assert result.temperature_f is not None + assert result.temperature_c is not None + assert abs(result.temperature_c - (68.0 - 32) * 5 / 9) < 0.1 + + def test_pressure_conversion(self, client, sample_forecast_payload): + result = client._parse_current_conditions(sample_forecast_payload) + assert result.pressure_mb == 1013.0 + assert result.pressure_in is not None + assert abs(result.pressure_in - 1013.0 / 33.8639) < 0.01 + + def test_visibility_us_units(self, client, sample_forecast_payload): + result = client._parse_current_conditions(sample_forecast_payload) + assert result.visibility_miles == 10.0 + assert result.visibility_km is not None + + def test_wind_direction_cardinal(self, client, sample_forecast_payload): + result = client._parse_current_conditions(sample_forecast_payload) + # 180 degrees = South + assert result.wind_direction == "S" + + def test_sunrise_sunset_populated(self, client, sample_forecast_payload): + result = client._parse_current_conditions(sample_forecast_payload) + # daily block has sunriseTime / sunsetTime + assert result.sunrise_time is not None + assert result.sunset_time is not None + + def test_missing_currently_block(self, client): + data = {"offset": 0, "daily": {"data": []}} + result = client._parse_current_conditions(data) + assert result.temperature_f is None + assert result.condition is None + + def test_si_units_temperature(self): + si_client = PirateWeatherClient(api_key="key", units="si") + data = { + "currently": {"temperature": 20.0, "humidity": 0.5}, + "offset": 0, + "daily": {"data": []}, + } + result = si_client._parse_current_conditions(data) + # In SI mode, temperature is Celsius + assert result.temperature_c == 20.0 + assert result.temperature_f is not None + assert abs(result.temperature_f - (20.0 * 9 / 5 + 32)) < 0.1 + + +# --------------------------------------------------------------------------- +# Unit tests – _parse_forecast +# --------------------------------------------------------------------------- + + +class TestParseForecast: + def test_basic_forecast(self, client, sample_forecast_payload): + result = client._parse_forecast(sample_forecast_payload) + assert len(result.periods) == 1 + period = result.periods[0] + assert period.name == "Today" + assert period.temperature == 75.0 + assert period.temperature_low == 55.0 + assert period.temperature_unit == "F" + assert period.cloud_cover == 60 + assert period.uv_index == 4 + assert period.precipitation_probability == 20 + + def test_second_day_name_tomorrow(self, client, sample_forecast_payload): + # Clone the day entry and add a second one + day2 = dict(sample_forecast_payload["daily"]["data"][0]) + day2["time"] = sample_forecast_payload["daily"]["data"][0]["time"] + 86400 + payload = dict(sample_forecast_payload) + payload["daily"] = {"data": [sample_forecast_payload["daily"]["data"][0], day2]} + result = client._parse_forecast(payload) + assert result.periods[1].name == "Tomorrow" + + def test_days_cap_respected(self, client, sample_forecast_payload): + # Add 10 days worth of data + base_day = sample_forecast_payload["daily"]["data"][0] + days = [dict(base_day, time=base_day["time"] + i * 86400) for i in range(10)] + payload = dict(sample_forecast_payload) + payload["daily"] = {"data": days} + result = client._parse_forecast(payload, days=3) + assert len(result.periods) == 3 + + def test_wind_string_us_units(self, client, sample_forecast_payload): + result = client._parse_forecast(sample_forecast_payload) + assert result.periods[0].wind_speed is not None + assert "mph" in result.periods[0].wind_speed + + def test_wind_string_si_units(self, sample_forecast_payload): + si_client = PirateWeatherClient(api_key="key", units="si") + result = si_client._parse_forecast(sample_forecast_payload) + assert result.periods[0].wind_speed is not None + assert "m/s" in result.periods[0].wind_speed + + def test_daily_summary_parsed(self, client): + """Summary field is populated from data['daily']['summary'].""" + payload = { + "offset": 0, + "daily": { + "summary": "Light rain throughout the week.", + "data": [ + { + "time": 1700000000, + "temperatureHigh": 70.0, + "temperatureLow": 50.0, + "summary": "Rain", + "icon": "rain", + "windSpeed": 5.0, + "windBearing": 90, + "precipProbability": 0.8, + "precipIntensity": 0.05, + "cloudCover": 0.9, + "uvIndex": 1, + } + ], + }, + } + result = client._parse_forecast(payload) + assert result.summary == "Light rain throughout the week." + + def test_daily_summary_none_when_missing(self, client, sample_forecast_payload): + """Summary is None when the daily block has no 'summary' key.""" + payload = dict(sample_forecast_payload) + payload["daily"] = {"data": sample_forecast_payload["daily"]["data"]} + result = client._parse_forecast(payload) + assert result.summary is None + + def test_daily_summary_preserved_in_forecast_model(self, client): + """Forecast dataclass stores summary independently of period summaries.""" + payload = { + "offset": 0, + "daily": { + "summary": "Possible drizzle on Thursday.", + "data": [], + }, + } + result = client._parse_forecast(payload) + assert result.summary == "Possible drizzle on Thursday." + assert result.periods == [] + + +# --------------------------------------------------------------------------- +# Unit tests – _parse_hourly_forecast +# --------------------------------------------------------------------------- + + +class TestParseHourlyForecast: + def test_basic_hourly(self, client, sample_forecast_payload): + result = client._parse_hourly_forecast(sample_forecast_payload) + assert len(result.periods) == 1 + period = result.periods[0] + assert period.temperature == 68.0 + assert period.temperature_unit == "F" + assert period.pressure_mb == 1013.0 + assert period.cloud_cover == 45 + assert period.uv_index == 3 + assert period.precipitation_probability == 10 + + def test_timezone_aware_start_time(self, client, sample_forecast_payload): + result = client._parse_hourly_forecast(sample_forecast_payload) + assert result.periods[0].start_time.tzinfo is not None + + def test_pressure_conversion(self, client, sample_forecast_payload): + result = client._parse_hourly_forecast(sample_forecast_payload) + period = result.periods[0] + assert period.pressure_in is not None + assert abs(period.pressure_in - 1013.0 / 33.8639) < 0.01 + + def test_empty_hourly_block(self, client, sample_forecast_payload): + payload = dict(sample_forecast_payload) + payload["hourly"] = {"data": []} + result = client._parse_hourly_forecast(payload) + assert result.periods == [] + + +# --------------------------------------------------------------------------- +# Unit tests – _parse_alerts +# --------------------------------------------------------------------------- + + +class TestParseAlerts: + def test_no_alerts(self, client, sample_forecast_payload): + result = client._parse_alerts(sample_forecast_payload) + assert result.alerts == [] + + def test_single_alert(self, client, sample_payload_with_alerts): + result = client._parse_alerts(sample_payload_with_alerts) + assert len(result.alerts) == 1 + alert = result.alerts[0] + assert alert.title == "Winter Storm Warning" + assert alert.severity == "Severe" + assert alert.source == "PirateWeather" + assert "New York" in alert.areas + + def test_alert_id_from_uri(self, client, sample_payload_with_alerts): + result = client._parse_alerts(sample_payload_with_alerts) + assert result.alerts[0].id == "https://alerts.weather.gov/cap/123" + + def test_alert_times_parsed(self, client, sample_payload_with_alerts): + result = client._parse_alerts(sample_payload_with_alerts) + alert = result.alerts[0] + assert alert.onset is not None + assert alert.expires is not None + assert alert.expires > alert.onset + + def test_severity_mapping(self, client): + for raw, expected in [ + ("extreme", "Extreme"), + ("severe", "Severe"), + ("moderate", "Moderate"), + ("minor", "Minor"), + ("advisory", "Minor"), + ("watch", "Moderate"), + ("warning", "Severe"), + ("unknown_value", "Unknown"), + (None, "Unknown"), + ]: + assert client._map_severity(raw) == expected + + +# --------------------------------------------------------------------------- +# Async tests – HTTP layer +# --------------------------------------------------------------------------- + + +class TestPirateWeatherHttpLayer: + @pytest.mark.asyncio + async def test_get_current_conditions_success(self, client, sample_forecast_payload): + mock_resp = MagicMock() + mock_resp.status_code = 200 + mock_resp.json.return_value = sample_forecast_payload + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.return_value = mock_resp + + result = await client.get_current_conditions(Location("NYC", 40.7128, -74.006)) + + assert result is not None + assert result.temperature_f == 68.0 + + @pytest.mark.asyncio + async def test_get_forecast_success(self, client, sample_forecast_payload): + mock_resp = MagicMock() + mock_resp.status_code = 200 + mock_resp.json.return_value = sample_forecast_payload + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.return_value = mock_resp + + result = await client.get_forecast(Location("NYC", 40.7128, -74.006)) + + assert result is not None + assert len(result.periods) >= 1 + + @pytest.mark.asyncio + async def test_get_hourly_forecast_success(self, client, sample_forecast_payload): + mock_resp = MagicMock() + mock_resp.status_code = 200 + mock_resp.json.return_value = sample_forecast_payload + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.return_value = mock_resp + + result = await client.get_hourly_forecast(Location("NYC", 40.7128, -74.006)) + + assert result is not None + assert len(result.periods) >= 1 + + @pytest.mark.asyncio + async def test_get_alerts_success(self, client, sample_payload_with_alerts): + mock_resp = MagicMock() + mock_resp.status_code = 200 + mock_resp.json.return_value = sample_payload_with_alerts + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.return_value = mock_resp + + result = await client.get_alerts(Location("NYC", 40.7128, -74.006)) + + assert result is not None + assert len(result.alerts) == 1 + + @pytest.mark.asyncio + async def test_unauthorized_raises_error(self, client): + mock_resp = MagicMock() + mock_resp.status_code = 401 + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.return_value = mock_resp + + with pytest.raises(PirateWeatherApiError) as exc_info: + await client.get_forecast_data(Location("NYC", 40.7128, -74.006)) + + assert exc_info.value.status_code == 401 + assert "Invalid API key" in str(exc_info.value) + + @pytest.mark.asyncio + async def test_rate_limit_raises_error(self, client): + mock_resp = MagicMock() + mock_resp.status_code = 429 + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.return_value = mock_resp + + with pytest.raises(PirateWeatherApiError) as exc_info: + await client.get_forecast_data(Location("NYC", 40.7128, -74.006)) + + assert exc_info.value.status_code == 429 + + @pytest.mark.asyncio + async def test_http_500_raises_error(self, client): + mock_resp = MagicMock() + mock_resp.status_code = 500 + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.return_value = mock_resp + + with pytest.raises(PirateWeatherApiError) as exc_info: + await client.get_forecast_data(Location("NYC", 40.7128, -74.006)) + + assert exc_info.value.status_code == 500 + + @pytest.mark.asyncio + async def test_alerts_returns_empty_on_error(self, client): + """get_alerts should not raise — it returns empty alerts on failure.""" + with patch.object(client, "get_forecast_data", side_effect=PirateWeatherApiError("fail")): + result = await client.get_alerts(Location("NYC", 40.7128, -74.006)) + + assert result.alerts == [] + + @pytest.mark.asyncio + async def test_timeout_raises_error(self, client): + import httpx + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.side_effect = httpx.TimeoutException("timeout") + + with pytest.raises(PirateWeatherApiError) as exc_info: + await client.get_forecast_data(Location("NYC", 40.7128, -74.006)) + + assert "timed out" in str(exc_info.value).lower() + + @pytest.mark.asyncio + async def test_request_error_raises_error(self, client): + import httpx + + with patch("httpx.AsyncClient") as mock_client_class: + mock_http = AsyncMock() + mock_client_class.return_value.__aenter__.return_value = mock_http + mock_http.get.side_effect = httpx.RequestError("connection refused") + + with pytest.raises(PirateWeatherApiError) as exc_info: + await client.get_forecast_data(Location("NYC", 40.7128, -74.006)) + + assert "Request failed" in str(exc_info.value) + + +# --------------------------------------------------------------------------- +# Tests for WeatherClient integration +# --------------------------------------------------------------------------- + + +class TestWeatherClientPirateWeatherIntegration: + """Tests for WeatherClient's Pirate Weather integration.""" + + def test_pirate_weather_client_property_created_with_key(self): + from accessiweather.weather_client import WeatherClient + + wc = WeatherClient(pirate_weather_api_key="test-key") + assert wc.pirate_weather_client is not None + assert wc.pirate_weather_client.api_key == "test-key" + + def test_pirate_weather_client_property_none_without_key(self): + from accessiweather.weather_client import WeatherClient + + wc = WeatherClient(pirate_weather_api_key="") + assert wc.pirate_weather_client is None + + def test_pirate_weather_client_setter(self): + from accessiweather.weather_client import WeatherClient + + wc = WeatherClient() + mock_client = MagicMock() + wc.pirate_weather_client = mock_client + assert wc.pirate_weather_client is mock_client + + def test_determine_api_choice_pirateweather(self): + from accessiweather.weather_client import WeatherClient + + wc = WeatherClient(data_source="pirateweather", pirate_weather_api_key="key") + loc = Location("London", 51.5, -0.12, country_code="GB") + assert wc._determine_api_choice(loc) == "pirateweather" + + def test_determine_api_choice_pirateweather_falls_back_without_key(self): + from accessiweather.weather_client import WeatherClient + + wc = WeatherClient(data_source="pirateweather", pirate_weather_api_key="") + loc = Location("London", 51.5, -0.12, country_code="GB") + # Falls back to openmeteo for international + assert wc._determine_api_choice(loc) == "openmeteo" + + def test_forecast_days_cap_pirateweather(self): + from accessiweather.weather_client import WeatherClient + + wc = WeatherClient() + loc = Location("NYC", 40.7, -74.0, country_code="US") + days = wc._get_forecast_days_for_source(loc, source="pirateweather") + assert days <= 8 diff --git a/tests/test_portable_secrets.py b/tests/test_portable_secrets.py index 2151aeb3..4c4cc1dd 100644 --- a/tests/test_portable_secrets.py +++ b/tests/test_portable_secrets.py @@ -15,6 +15,7 @@ def test_encrypt_decrypt_secret_bundle_round_trip(): secrets = { "openrouter_api_key": "FAKE_SK_TEST_ONLY", "visual_crossing_api_key": "FAKE_VC_TEST_ONLY", + "pirate_weather_api_key": "FAKE_PW_TEST_ONLY", } envelope = encrypt_secret_bundle(secrets, "correct horse battery staple") @@ -66,6 +67,7 @@ def _fake_get_password(key_name: str) -> str | None: return { "openrouter_api_key": "FAKE_OR_EXPORTED_TEST", "visual_crossing_api_key": "FAKE_VC_EXPORTED_TEST", + "pirate_weather_api_key": "FAKE_PW_EXPORTED_TEST", }.get(key_name) def _fake_set_password(key_name: str, value: str) -> bool: @@ -94,6 +96,7 @@ def _fake_set_password(key_name: str, value: str) -> bool: assert imported_store["openrouter_api_key"] == "FAKE_OR_EXPORTED_TEST" assert imported_store["visual_crossing_api_key"] == "FAKE_VC_EXPORTED_TEST" + assert imported_store["pirate_weather_api_key"] == "FAKE_PW_EXPORTED_TEST" # After import, in-memory config should be refreshed so keys are active immediately manager._load_secure_keys.assert_called_once() @@ -120,6 +123,7 @@ def test_export_reads_in_memory_keys_for_portable_mode(self, tmp_path): # Simulate in-memory settings with API keys (portable mode) config = MagicMock() config.settings.visual_crossing_api_key = "FAKE_VC_KEY_TEST" + config.settings.pirate_weather_api_key = "FAKE_PW_KEY_TEST" config.settings.openrouter_api_key = "FAKE_OR_KEY_TEST" manager._config = config operations = ImportExportOperations(manager) @@ -137,6 +141,7 @@ def test_export_reads_in_memory_keys_for_portable_mode(self, tmp_path): saved = json.loads(export_file.read_text(encoding="utf-8")) restored = decrypt_secret_bundle(saved, "FAKE_PASSPHRASE_123") assert restored["visual_crossing_api_key"] == "FAKE_VC_KEY_TEST" + assert restored["pirate_weather_api_key"] == "FAKE_PW_KEY_TEST" assert restored["openrouter_api_key"] == "FAKE_OR_KEY_TEST" def test_export_resolves_lazy_secure_storage_values(self, tmp_path): @@ -151,6 +156,7 @@ def test_export_resolves_lazy_secure_storage_values(self, tmp_path): lazy._value = "FAKE_VC_LAZY_TEST" lazy._loaded = True config.settings.visual_crossing_api_key = lazy + config.settings.pirate_weather_api_key = "FAKE_PW_PLAIN_TEST" config.settings.openrouter_api_key = "FAKE_OR_PLAIN_TEST" manager._config = config operations = ImportExportOperations(manager) @@ -166,6 +172,7 @@ def test_export_resolves_lazy_secure_storage_values(self, tmp_path): saved = json.loads(export_file.read_text(encoding="utf-8")) restored = decrypt_secret_bundle(saved, "FAKE_PASSPHRASE_123") assert restored["visual_crossing_api_key"] == "FAKE_VC_LAZY_TEST" + assert restored["pirate_weather_api_key"] == "FAKE_PW_PLAIN_TEST" assert restored["openrouter_api_key"] == "FAKE_OR_PLAIN_TEST" def test_import_writes_all_keys_even_if_first_fails(self, tmp_path): @@ -177,6 +184,7 @@ def test_import_writes_all_keys_even_if_first_fails(self, tmp_path): secrets = { "visual_crossing_api_key": "FAKE_VC_VAL_TEST", + "pirate_weather_api_key": "FAKE_PW_VAL_TEST", "openrouter_api_key": "FAKE_OR_VAL_TEST", } envelope = encrypt_secret_bundle(secrets, "FAKE_TEST_PASSPHRASE") @@ -197,6 +205,7 @@ def _set_pw(key_name: str, value: str) -> bool: # Returns False because one key failed assert result is False # But the second key was still written + assert written["pirate_weather_api_key"] == "FAKE_PW_VAL_TEST" assert written["openrouter_api_key"] == "FAKE_OR_VAL_TEST" def test_import_sets_in_memory_keys_in_portable_mode(self, tmp_path): @@ -214,6 +223,7 @@ def test_import_sets_in_memory_keys_in_portable_mode(self, tmp_path): secrets = { "visual_crossing_api_key": "FAKE_VC_PORTABLE_TEST", + "pirate_weather_api_key": "FAKE_PW_PORTABLE_TEST", "openrouter_api_key": "FAKE_OR_PORTABLE_TEST", } envelope = encrypt_secret_bundle(secrets, "FAKE_TEST_PASSPHRASE") @@ -228,6 +238,7 @@ def test_import_sets_in_memory_keys_in_portable_mode(self, tmp_path): assert result is True assert config.settings.visual_crossing_api_key == "FAKE_VC_PORTABLE_TEST" + assert config.settings.pirate_weather_api_key == "FAKE_PW_PORTABLE_TEST" assert config.settings.openrouter_api_key == "FAKE_OR_PORTABLE_TEST" # Should NOT call _load_secure_keys in portable mode manager._load_secure_keys.assert_not_called() diff --git a/tests/test_pw_coverage.py b/tests/test_pw_coverage.py new file mode 100644 index 00000000..d86330d9 --- /dev/null +++ b/tests/test_pw_coverage.py @@ -0,0 +1,752 @@ +""" +Coverage gap tests for Pirate Weather integration. + +Covers lines missed in: +- pirate_weather_client.py +- weather_client_base.py +- weather_client_parallel.py +- config/settings.py +- models/config.py +- display/presentation/forecast.py (summary feature) +""" + +from __future__ import annotations + +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest + +from accessiweather.models import AppConfig, Location, WeatherAlerts +from accessiweather.pirate_weather_client import ( + PirateWeatherApiError, + PirateWeatherClient, +) +from accessiweather.weather_client import WeatherClient +from accessiweather.weather_client_parallel import ParallelFetchCoordinator + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def client(): + return PirateWeatherClient(api_key="test-key", units="us") + + +@pytest.fixture +def ca_client(): + return PirateWeatherClient(api_key="test-key", units="ca") + + +@pytest.fixture +def si_client(): + return PirateWeatherClient(api_key="test-key", units="si") + + +@pytest.fixture +def uk2_client(): + return PirateWeatherClient(api_key="test-key", units="uk2") + + +@pytest.fixture +def location(): + return Location(name="Test City", latitude=40.0, longitude=-75.0) + + +@pytest.fixture +def intl_location(): + return Location(name="London", latitude=51.5, longitude=-0.12, country_code="GB") + + +# --------------------------------------------------------------------------- +# pirate_weather_client.py – HTTP layer +# --------------------------------------------------------------------------- + + +class TestPirateWeatherHttpErrors: + @pytest.mark.asyncio + async def test_http_400_raises_bad_request(self, client, location): + """Line 119: HTTP 400 raises PirateWeatherApiError.""" + mock_resp = MagicMock() + mock_resp.status_code = 400 + + with patch("httpx.AsyncClient") as mock_cls: + mock_http = AsyncMock() + mock_cls.return_value.__aenter__.return_value = mock_http + mock_http.get.return_value = mock_resp + + with pytest.raises(PirateWeatherApiError) as exc_info: + await client.get_forecast_data(location) + + assert exc_info.value.status_code == 400 + assert "Bad request" in str(exc_info.value) + + @pytest.mark.asyncio + async def test_unexpected_exception_raises_error(self, client, location): + """Lines 143-145: Non-httpx exception is wrapped.""" + with patch("httpx.AsyncClient") as mock_cls: + mock_http = AsyncMock() + mock_cls.return_value.__aenter__.return_value = mock_http + mock_http.get.side_effect = ValueError("json parse failed") + + with pytest.raises(PirateWeatherApiError) as exc_info: + await client.get_forecast_data(location) + + assert "Unexpected error" in str(exc_info.value) + + +# --------------------------------------------------------------------------- +# pirate_weather_client.py – None return paths +# --------------------------------------------------------------------------- + + +class TestNoneDataPaths: + @pytest.mark.asyncio + async def test_get_current_conditions_none_when_data_none(self, client, location): + """Line 151: returns None when get_forecast_data returns None.""" + with patch.object(client, "get_forecast_data", return_value=None): + result = await client.get_current_conditions(location) + assert result is None + + @pytest.mark.asyncio + async def test_get_forecast_none_when_data_none(self, client, location): + """Line 158: returns None when get_forecast_data returns None.""" + with patch.object(client, "get_forecast_data", return_value=None): + result = await client.get_forecast(location) + assert result is None + + @pytest.mark.asyncio + async def test_get_hourly_forecast_none_when_data_none(self, client, location): + """Line 165: returns None when get_forecast_data returns None.""" + with patch.object(client, "get_forecast_data", return_value=None): + result = await client.get_hourly_forecast(location) + assert result is None + + @pytest.mark.asyncio + async def test_get_alerts_empty_when_data_none(self, client, location): + """Line 173: returns empty WeatherAlerts when get_forecast_data returns None.""" + with patch.object(client, "get_forecast_data", return_value=None): + result = await client.get_alerts(location) + assert result.alerts == [] + + +# --------------------------------------------------------------------------- +# pirate_weather_client.py – _parse_current_conditions edge cases +# --------------------------------------------------------------------------- + + +class TestParseCurrentConditionsEdgeCases: + def test_dewpoint_calculated_from_temp_humidity(self, client): + """Lines 208-209: dewpoint derived from temp+humidity when not in payload.""" + data = { + "currently": { + "temperature": 72.0, + "humidity": 0.70, + # intentionally no "dewPoint" + }, + "offset": 0, + "daily": {"data": []}, + } + result = client._parse_current_conditions(data) + assert result.dewpoint_f is not None + assert result.dewpoint_c is not None + + def test_ca_units_wind_speed(self, ca_client): + """Lines 220-221: ca units converts km/h → mph.""" + data = { + "currently": {"temperature": 20.0, "windSpeed": 36.0}, + "offset": 0, + "daily": {"data": []}, + } + result = ca_client._parse_current_conditions(data) + assert result.wind_speed_kph == 36.0 + assert result.wind_speed_mph is not None + assert abs(result.wind_speed_mph - 36.0 / 1.60934) < 0.1 + + def test_ca_units_wind_gust(self, ca_client): + """Lines 257-258: ca units wind gust km/h → mph.""" + data = { + "currently": {"temperature": 20.0, "windGust": 50.0}, + "offset": 0, + "daily": {"data": []}, + } + result = ca_client._parse_current_conditions(data) + assert result.wind_gust_kph == 50.0 + assert result.wind_gust_mph is not None + + def test_si_units_visibility_km(self, si_client): + """Non-us path for visibility: km → miles (lines 239-240).""" + data = { + "currently": {"temperature": 20.0, "visibility": 15.0}, + "offset": 0, + "daily": {"data": []}, + } + result = si_client._parse_current_conditions(data) + assert result.visibility_km == 15.0 + assert result.visibility_miles is not None + + +# --------------------------------------------------------------------------- +# pirate_weather_client.py – _parse_forecast edge cases +# --------------------------------------------------------------------------- + + +class TestParseForecastEdgeCases: + def test_no_time_val_gets_day_n_name(self, client): + """Line 340: daily entry without 'time' gets 'Day N' name.""" + data = { + "daily": {"data": [{"temperatureHigh": 75.0}]}, # no "time" + "offset": 0, + } + result = client._parse_forecast(data) + assert result.periods[0].name == "Day 1" + + def test_ca_units_wind_string_kmh(self, ca_client): + """Line 351: ca units produce 'km/h' wind string.""" + data = { + "daily": {"data": [{"time": 1700000000, "windSpeed": 25.0}]}, + "offset": 0, + } + result = ca_client._parse_forecast(data) + assert result.periods[0].wind_speed is not None + assert "km/h" in result.periods[0].wind_speed + + def test_null_wind_speed_gives_none(self, client): + """Line 355: missing windSpeed produces None wind_str.""" + data = { + "daily": {"data": [{"time": 1700000000}]}, + "offset": 0, + } + result = client._parse_forecast(data) + assert result.periods[0].wind_speed is None + + def test_ca_units_wind_gust_kmh(self, ca_client): + """Line 362: ca units produce 'km/h' wind gust string.""" + data = { + "daily": {"data": [{"time": 1700000000, "windGust": 35.0}]}, + "offset": 0, + } + result = ca_client._parse_forecast(data) + assert result.periods[0].wind_gust is not None + assert "km/h" in result.periods[0].wind_gust + + def test_si_units_wind_gust_ms(self): + """Line 364: si units produce 'm/s' wind gust string.""" + si_client = PirateWeatherClient(api_key="key", units="si") + data = { + "daily": {"data": [{"time": 1700000000, "windGust": 8.0}]}, + "offset": 0, + } + result = si_client._parse_forecast(data) + assert result.periods[0].wind_gust is not None + assert "m/s" in result.periods[0].wind_gust + + def test_null_wind_gust_gives_none(self, client): + """Line 366: missing windGust produces None.""" + data = { + "daily": {"data": [{"time": 1700000000}]}, + "offset": 0, + } + result = client._parse_forecast(data) + assert result.periods[0].wind_gust is None + + def test_null_precip_intensity_gives_none(self, client): + """Line 375: missing precipIntensity produces None.""" + data = { + "daily": {"data": [{"time": 1700000000}]}, + "offset": 0, + } + result = client._parse_forecast(data) + assert result.periods[0].precipitation_amount is None + + +# --------------------------------------------------------------------------- +# pirate_weather_client.py – _parse_hourly_forecast edge cases +# --------------------------------------------------------------------------- + + +class TestParseHourlyForecastEdgeCases: + def test_no_time_val_uses_now(self, client): + """Line 419: hourly entry without 'time' uses datetime.now().""" + data = { + "hourly": {"data": [{"temperature": 68.0}]}, # no "time" + "offset": 0, + } + result = client._parse_hourly_forecast(data) + assert result.periods[0].start_time is not None + + def test_si_units_temp_converted_to_f(self, si_client): + """Lines 425-426: si units convert °C → °F for temperature.""" + data = { + "hourly": {"data": [{"time": 1700000000, "temperature": 20.0}]}, + "offset": 0, + } + result = si_client._parse_hourly_forecast(data) + assert result.periods[0].temperature is not None + assert abs(result.periods[0].temperature - (20.0 * 9 / 5 + 32)) < 0.1 + + def test_ca_units_wind_string_kmh(self, ca_client): + """Lines 436-437: ca units wind string uses km/h.""" + data = { + "hourly": {"data": [{"time": 1700000000, "windSpeed": 25.0}]}, + "offset": 0, + } + result = ca_client._parse_hourly_forecast(data) + assert "km/h" in result.periods[0].wind_speed + + def test_si_units_wind_string_ms(self, si_client): + """Line 439: si units wind string uses m/s.""" + data = { + "hourly": {"data": [{"time": 1700000000, "windSpeed": 8.0}]}, + "offset": 0, + } + result = si_client._parse_hourly_forecast(data) + assert "m/s" in result.periods[0].wind_speed + + def test_null_wind_speed_gives_none(self, client): + """Line 441: missing windSpeed gives None.""" + data = { + "hourly": {"data": [{"time": 1700000000}]}, + "offset": 0, + } + result = client._parse_hourly_forecast(data) + assert result.periods[0].wind_speed is None + + def test_ca_units_wind_gust_converts(self, ca_client): + """Lines 448-449: ca units wind gust km/h → mph.""" + data = { + "hourly": {"data": [{"time": 1700000000, "windGust": 40.0}]}, + "offset": 0, + } + result = ca_client._parse_hourly_forecast(data) + assert result.periods[0].wind_gust_mph is not None + assert abs(result.periods[0].wind_gust_mph - 40.0 / 1.60934) < 0.1 + + def test_si_units_wind_gust_converts(self, si_client): + """Line 451: si units wind gust m/s → mph.""" + data = { + "hourly": {"data": [{"time": 1700000000, "windGust": 5.0}]}, + "offset": 0, + } + result = si_client._parse_hourly_forecast(data) + assert result.periods[0].wind_gust_mph is not None + assert abs(result.periods[0].wind_gust_mph - 5.0 * 2.23694) < 0.1 + + def test_null_precip_intensity_gives_none(self, client): + """Line 460: missing precipIntensity gives None.""" + data = { + "hourly": {"data": [{"time": 1700000000}]}, + "offset": 0, + } + result = client._parse_hourly_forecast(data) + assert result.periods[0].precipitation_amount is None + + def test_si_units_visibility_km_to_miles(self, si_client): + """Lines 473-474: non-us visibility in km → miles.""" + data = { + "hourly": {"data": [{"time": 1700000000, "visibility": 15.0}]}, + "offset": 0, + } + result = si_client._parse_hourly_forecast(data) + assert result.periods[0].visibility_km == 15.0 + assert result.periods[0].visibility_miles is not None + + def test_null_visibility_gives_none(self, client): + """Lines 476-477: missing visibility gives None for both fields.""" + data = { + "hourly": {"data": [{"time": 1700000000}]}, + "offset": 0, + } + result = client._parse_hourly_forecast(data) + assert result.periods[0].visibility_miles is None + assert result.periods[0].visibility_km is None + + def test_si_units_feels_like_converted(self, si_client): + """Lines 483-484: non-us apparentTemperature °C → °F.""" + data = { + "hourly": {"data": [{"time": 1700000000, "apparentTemperature": 18.0}]}, + "offset": 0, + } + result = si_client._parse_hourly_forecast(data) + assert result.periods[0].feels_like is not None + assert abs(result.periods[0].feels_like - (18.0 * 9 / 5 + 32)) < 0.1 + + +# --------------------------------------------------------------------------- +# weather_client_parallel.py – pirateweather task +# --------------------------------------------------------------------------- + + +class TestParallelFetchPirateWeather: + @pytest.mark.asyncio + async def test_fetch_pirateweather_source(self, location): + """Lines 120, 123: pirateweather task is created and appended.""" + coordinator = ParallelFetchCoordinator(timeout=2.0) + mock_current = MagicMock() + mock_forecast = MagicMock() + mock_hourly = MagicMock() + mock_alerts = MagicMock() + + async def fake_pw(): + return (mock_current, mock_forecast, mock_hourly, mock_alerts) + + results = await coordinator.fetch_all(location, fetch_pirateweather=fake_pw()) + assert len(results) == 1 + assert results[0].source == "pirateweather" + assert results[0].success is True + assert results[0].current is mock_current + assert results[0].forecast is mock_forecast + assert results[0].hourly_forecast is mock_hourly + assert results[0].alerts is mock_alerts + + @pytest.mark.asyncio + async def test_all_four_sources_including_pirateweather(self, location): + """All four sources fetched including pirateweather.""" + coordinator = ParallelFetchCoordinator(timeout=2.0) + mock_data = MagicMock() + + async def fake_nws(): + return (mock_data, mock_data, mock_data, None) + + async def fake_om(): + return (mock_data, mock_data, mock_data) + + async def fake_vc(): + return (mock_data, mock_data, mock_data, None) + + async def fake_pw(): + return (mock_data, mock_data, mock_data, None) + + results = await coordinator.fetch_all( + location, + fetch_nws=fake_nws(), + fetch_openmeteo=fake_om(), + fetch_visualcrossing=fake_vc(), + fetch_pirateweather=fake_pw(), + ) + assert len(results) == 4 + sources = {r.source for r in results} + assert sources == {"nws", "openmeteo", "visualcrossing", "pirateweather"} + assert all(r.success for r in results) + + +# --------------------------------------------------------------------------- +# config/settings.py – pirateweather validation +# --------------------------------------------------------------------------- + + +class TestSettingsPirateWeatherValidation: + @pytest.fixture + def mock_manager(self, tmp_path): + manager = MagicMock() + manager._get_logger.return_value = MagicMock() + manager.save_config.return_value = True + + config = AppConfig.default() + config.settings.data_source = "pirateweather" + config.settings.pirate_weather_api_key = "" # no key + manager._config = config + manager.get_config.return_value = config + + return manager + + def test_pirateweather_without_api_key_falls_back_to_auto(self, mock_manager): + """Lines 60, 63-64: pirateweather selected but no key → switch to auto.""" + from accessiweather.config.settings import SettingsOperations + + ops = SettingsOperations(mock_manager) + ops._validate_and_fix_config() + + config = mock_manager.get_config() + assert config.settings.data_source == "auto" + mock_manager.save_config.assert_called() + + +# --------------------------------------------------------------------------- +# models/config.py – source priority validation +# --------------------------------------------------------------------------- + + +class TestSourcePriorityValidation: + def test_source_priority_us_invalid_type_resets_to_default(self): + """Lines 353-356: non-list value for source_priority_us resets to default.""" + from accessiweather.models.config import AppSettings + + settings = AppSettings() + settings.source_priority_us = "not-a-list" + settings.validate_on_access("source_priority_us") + assert settings.source_priority_us == [ + "nws", + "openmeteo", + "visualcrossing", + "pirateweather", + ] + + def test_source_priority_international_invalid_type_resets_to_default(self): + """Lines 351, 357-358: non-list value for source_priority_international resets.""" + from accessiweather.models.config import AppSettings + + settings = AppSettings() + settings.source_priority_international = 42 + settings.validate_on_access("source_priority_international") + assert settings.source_priority_international == [ + "openmeteo", + "pirateweather", + "visualcrossing", + ] + + def test_source_priority_us_all_invalid_resets_to_default(self): + """Lines 362-368: all-invalid filtered list for US resets to default.""" + from accessiweather.models.config import AppSettings + + settings = AppSettings() + settings.source_priority_us = ["invalid_source"] + settings.validate_on_access("source_priority_us") + assert "nws" in settings.source_priority_us + assert "pirateweather" in settings.source_priority_us + + def test_source_priority_international_all_invalid_resets_to_default(self): + """Lines 369-372: all-invalid filtered list for international resets to default.""" + from accessiweather.models.config import AppSettings + + settings = AppSettings() + settings.source_priority_international = ["bogus"] + settings.validate_on_access("source_priority_international") + assert "openmeteo" in settings.source_priority_international + assert "pirateweather" in settings.source_priority_international + + def test_source_priority_us_filters_invalid_sources(self): + """Lines 373-374: filtered != value triggers setattr.""" + from accessiweather.models.config import AppSettings + + settings = AppSettings() + settings.source_priority_us = ["nws", "invalid_source"] + settings.validate_on_access("source_priority_us") + # "invalid_source" should be filtered out + assert "nws" in settings.source_priority_us + assert "invalid_source" not in settings.source_priority_us + + +# --------------------------------------------------------------------------- +# weather_client_base.py – pirate_weather_client branch in notification data +# --------------------------------------------------------------------------- + + +class TestGetNotificationEventDataPirateWeatherBranch: + @pytest.mark.asyncio + async def test_pirate_weather_used_when_no_vc_client_intl_location(self, intl_location): + """Lines 475, 478-480: pw client used for notification data when no VC and intl location.""" + wc = WeatherClient(data_source="openmeteo") + + mock_pw = MagicMock() + mock_pw.get_current_conditions = AsyncMock(return_value=MagicMock()) + mock_pw.get_alerts = AsyncMock(return_value=WeatherAlerts(alerts=[])) + wc._pirate_weather_client = mock_pw + wc._visual_crossing_client = None + + wc._fetch_nws_cancel_references = AsyncMock(return_value=set()) + + with patch.object(wc, "_is_us_location", return_value=False): + result = await wc.get_notification_event_data(intl_location) + + assert result is not None + mock_pw.get_current_conditions.assert_called_once_with(intl_location) + mock_pw.get_alerts.assert_called_once_with(intl_location) + + +# --------------------------------------------------------------------------- +# weather_client_base.py – pirateweather data source path +# --------------------------------------------------------------------------- + + +class TestPirateWeatherDataSourcePath: + @pytest.mark.asyncio + async def test_pirateweather_data_source_successful_fetch(self, intl_location): + """Lines 561, 571-576, 579-583, 586, 590: successful PW fetch.""" + wc = WeatherClient(data_source="pirateweather", pirate_weather_api_key="test-key") + + mock_pw = MagicMock() + mock_pw.get_current_conditions = AsyncMock(return_value=MagicMock()) + mock_pw.get_forecast = AsyncMock(return_value=MagicMock()) + mock_pw.get_hourly_forecast = AsyncMock(return_value=MagicMock()) + mock_pw.get_alerts = AsyncMock(return_value=WeatherAlerts(alerts=[])) + wc._pirate_weather_client = mock_pw + + result = await wc._do_fetch_weather_data(intl_location) + + assert result is not None + assert result.source_attribution is not None + assert "pirateweather" in result.source_attribution.contributing_sources + + @pytest.mark.asyncio + async def test_pirateweather_data_source_no_client_sets_empty_data(self, intl_location): + """Lines 556-558, 592-594: no PW client raises error, sets empty data.""" + wc = WeatherClient(data_source="pirateweather", pirate_weather_api_key="test-key") + wc._pirate_weather_client = None # force None despite key existing + + # Force _determine_api_choice to return "pirateweather" even without a working client + with patch.object(wc, "_determine_api_choice", return_value="pirateweather"): + result = await wc._do_fetch_weather_data(intl_location) + + # _set_empty_weather_data is called: current is empty CurrentConditions, not None + assert result is not None + assert result.discussion == "Weather data not available." + + @pytest.mark.asyncio + async def test_pirateweather_api_error_handled_gracefully(self, intl_location): + """Lines 592-594: PirateWeatherApiError caught and empty data returned.""" + wc = WeatherClient(data_source="pirateweather", pirate_weather_api_key="test-key") + + mock_pw = MagicMock() + mock_pw.get_current_conditions = AsyncMock( + side_effect=PirateWeatherApiError("API failed", 503) + ) + mock_pw.get_forecast = AsyncMock(side_effect=PirateWeatherApiError("API failed", 503)) + mock_pw.get_hourly_forecast = AsyncMock( + side_effect=PirateWeatherApiError("API failed", 503) + ) + mock_pw.get_alerts = AsyncMock(side_effect=PirateWeatherApiError("API failed", 503)) + wc._pirate_weather_client = mock_pw + + result = await wc._do_fetch_weather_data(intl_location) + + # _set_empty_weather_data is called: returns empty weather data + assert result is not None + assert result.discussion == "Weather data not available." + + +# --------------------------------------------------------------------------- +# weather_client_base.py – fetch_pw in _fetch_smart_auto_source +# --------------------------------------------------------------------------- + + +class TestFetchPirateWeatherInAutoMode: + @pytest.mark.asyncio + async def test_auto_mode_includes_pw_alerts_for_intl(self, intl_location): + """Lines 796-806, 855, 861-862, 869-870: PW fetched in auto mode for intl locations.""" + from datetime import UTC, datetime + + from accessiweather.models.weather import SourceAttribution + from accessiweather.weather_client_fusion import DataFusionEngine + from accessiweather.weather_client_parallel import ParallelFetchCoordinator, SourceData + + wc = WeatherClient(data_source="auto", pirate_weather_api_key="test-key") + + # Use MagicMock() without spec to avoid dataclass instance-attr limitations + mock_current = MagicMock() + mock_current.has_data.return_value = True + mock_forecast = MagicMock() + mock_forecast.has_data.return_value = True + mock_hourly = MagicMock() + mock_hourly.has_data.return_value = True + mock_alerts = WeatherAlerts(alerts=[]) + + mock_pw = MagicMock() + mock_pw.get_current_conditions = AsyncMock(return_value=mock_current) + mock_pw.get_forecast = AsyncMock(return_value=mock_forecast) + mock_pw.get_hourly_forecast = AsyncMock(return_value=mock_hourly) + mock_pw.get_alerts = AsyncMock(return_value=mock_alerts) + wc._pirate_weather_client = mock_pw + + pw_source = SourceData( + source="pirateweather", + current=mock_current, + forecast=mock_forecast, + hourly_forecast=mock_hourly, + alerts=mock_alerts, + fetch_time=datetime.now(UTC), + success=True, + ) + + mock_current_attribution = SourceAttribution( + field_sources={}, + conflicts=[], + contributing_sources={"pirateweather"}, + failed_sources=set(), + ) + mock_forecast_attribution = {"summary": "pirateweather"} + mock_hourly_attribution = {"temperature": "pirateweather"} + + with ( + patch.object( + ParallelFetchCoordinator, + "fetch_all", + return_value=[pw_source], + ), + patch.object(wc, "_fetch_nws_cancel_references", return_value=set()), + patch.object( + DataFusionEngine, + "merge_current_conditions", + return_value=(mock_current, mock_current_attribution), + ), + patch.object( + DataFusionEngine, + "merge_forecasts", + return_value=(mock_forecast, mock_forecast_attribution), + ), + patch.object( + DataFusionEngine, + "merge_hourly_forecasts", + return_value=(mock_hourly, mock_hourly_attribution), + ), + ): + result = await wc._fetch_smart_auto_source(intl_location) + + assert result is not None + + +# --------------------------------------------------------------------------- +# display/presentation/forecast.py – summary field from Forecast +# --------------------------------------------------------------------------- + + +class TestForecastSummaryPresentation: + """Tests for the Pirate Weather daily summary wired into ForecastPresentation.""" + + def _make_location(self): + from accessiweather.models.weather import Location + + return Location(name="Test City", latitude=40.0, longitude=-75.0) + + def _make_forecast(self, summary=None): + from accessiweather.models.weather import Forecast, ForecastPeriod + + period = ForecastPeriod(name="Today", temperature=72.0, short_forecast="Sunny") + return Forecast(periods=[period], summary=summary) + + def test_summary_appears_in_presentation(self): + """When Forecast.summary is set, ForecastPresentation.summary is populated.""" + from accessiweather.display.presentation.forecast import build_forecast + from accessiweather.utils import TemperatureUnit + + forecast = self._make_forecast(summary="Light rain throughout the week.") + result = build_forecast(forecast, None, self._make_location(), TemperatureUnit.FAHRENHEIT) + assert result.summary == "Overall: Light rain throughout the week." + + def test_summary_appears_in_fallback_text(self): + """When Forecast.summary is set, it appears in the screen-reader fallback text.""" + from accessiweather.display.presentation.forecast import build_forecast + from accessiweather.utils import TemperatureUnit + + forecast = self._make_forecast(summary="Mostly cloudy with a chance of rain.") + result = build_forecast(forecast, None, self._make_location(), TemperatureUnit.FAHRENHEIT) + assert "Overall: Mostly cloudy with a chance of rain." in result.fallback_text + + def test_no_summary_leaves_presentation_summary_none(self): + """When Forecast.summary is None, ForecastPresentation.summary is also None.""" + from accessiweather.display.presentation.forecast import build_forecast + from accessiweather.utils import TemperatureUnit + + forecast = self._make_forecast(summary=None) + result = build_forecast(forecast, None, self._make_location(), TemperatureUnit.FAHRENHEIT) + assert result.summary is None + + def test_no_summary_omitted_from_fallback_text(self): + """When Forecast.summary is None, 'Overall:' does not appear in fallback text.""" + from accessiweather.display.presentation.forecast import build_forecast + from accessiweather.utils import TemperatureUnit + + forecast = self._make_forecast(summary=None) + result = build_forecast(forecast, None, self._make_location(), TemperatureUnit.FAHRENHEIT) + assert "Overall:" not in result.fallback_text diff --git a/tests/test_runtime_storage_integration.py b/tests/test_runtime_storage_integration.py index c7e4c88b..aff06d29 100644 --- a/tests/test_runtime_storage_integration.py +++ b/tests/test_runtime_storage_integration.py @@ -12,6 +12,7 @@ def test_initialize_components_uses_runtime_cache_dir(tmp_path): settings = SimpleNamespace( data_source="auto", visual_crossing_api_key="", + pirate_weather_api_key="", avwx_api_key="", to_alert_settings=lambda: object(), sound_enabled=True, diff --git a/tests/test_settings_dialog_api_key_guard.py b/tests/test_settings_dialog_api_key_guard.py index 788e0fb4..0c01018e 100644 --- a/tests/test_settings_dialog_api_key_guard.py +++ b/tests/test_settings_dialog_api_key_guard.py @@ -14,7 +14,14 @@ from __future__ import annotations -def _make_dialog(vc_key="", openrouter_key="", original_vc="", original_or=""): +def _make_dialog( + vc_key="", + pirate_key="", + openrouter_key="", + original_vc="", + original_pirate="", + original_or="", +): """Create a minimal SettingsDialogSimple stand-in with the guard logic.""" import importlib.util from pathlib import Path @@ -33,10 +40,12 @@ def _make_dialog(vc_key="", openrouter_key="", original_vc="", original_or=""): dlg = mod.SettingsDialogSimple.__new__(mod.SettingsDialogSimple) dlg._original_vc_key = original_vc + dlg._original_pirate_weather_key = original_pirate dlg._original_openrouter_key = original_or settings_dict = { "visual_crossing_api_key": vc_key, + "pirate_weather_api_key": pirate_key, "openrouter_api_key": openrouter_key, "update_interval_minutes": 30, } @@ -45,6 +54,7 @@ def _make_dialog(vc_key="", openrouter_key="", original_vc="", original_or=""): for key, orig_attr in ( ("visual_crossing_api_key", "_original_vc_key"), + ("pirate_weather_api_key", "_original_pirate_weather_key"), ("openrouter_api_key", "_original_openrouter_key"), ): if not settings_dict.get(key) and getattr(dlg, orig_attr, ""): @@ -75,13 +85,21 @@ def test_openrouter_key_guard(self): result = _make_dialog(openrouter_key="", original_or="sk-abc123") assert "openrouter_api_key" not in result + def test_pirate_weather_key_guard(self): + """Same guard applies to Pirate Weather key.""" + result = _make_dialog(pirate_key="", original_pirate="pw-abc123") + assert "pirate_weather_api_key" not in result + def test_both_keys_guarded_independently(self): """Each key is guarded independently.""" result = _make_dialog( vc_key="", + pirate_key="still-set-pw", openrouter_key="still-set", original_vc="was-set", + original_pirate="still-set-pw", original_or="still-set", ) assert "visual_crossing_api_key" not in result + assert result["pirate_weather_api_key"] == "still-set-pw" assert result["openrouter_api_key"] == "still-set" diff --git a/tests/test_settings_dialog_audio_events.py b/tests/test_settings_dialog_audio_events.py index 7bfecbf1..3290b4e9 100644 --- a/tests/test_settings_dialog_audio_events.py +++ b/tests/test_settings_dialog_audio_events.py @@ -31,6 +31,7 @@ def __init__(self) -> None: self._value = False self._label = "" self._name = "" + self._parent = _DummyParent() def SetSelection(self, value: int) -> None: self._selection = value @@ -53,6 +54,9 @@ def GetLabel(self) -> str: def SetName(self, _value: str) -> None: self._name = _value + def GetParent(self): + return self._parent + def __getattr__(self, _name: str): return lambda *args, **kwargs: None @@ -64,6 +68,19 @@ def __missing__(self, key: str) -> _DummyControl: return value +class _DummySizer: + def ShowItems(self, _value: bool) -> None: + return None + + +class _DummyParent: + def Layout(self) -> None: + return None + + def FitInside(self) -> None: + return None + + def _make_dialog(settings: SimpleNamespace) -> SettingsDialogSimple: dialog = SettingsDialogSimple.__new__(SettingsDialogSimple) dialog._controls = _Controls() @@ -72,6 +89,8 @@ def _make_dialog(settings: SimpleNamespace) -> SettingsDialogSimple: dialog._sound_pack_ids = ["default"] dialog._selected_specific_model = None dialog._event_sound_states = dialog._build_default_event_sound_states() + dialog._vc_config_sizer = _DummySizer() + dialog._pw_config_sizer = _DummySizer() dialog.config_manager = MagicMock() dialog.config_manager.get_settings.return_value = settings dialog.config_manager.update_settings.return_value = True diff --git a/tests/test_settings_dialog_portable_copy.py b/tests/test_settings_dialog_portable_copy.py index 33bf2bf0..7197061c 100644 --- a/tests/test_settings_dialog_portable_copy.py +++ b/tests/test_settings_dialog_portable_copy.py @@ -682,7 +682,11 @@ def test_maybe_update_portable_bundle_uses_export_encrypted_api_keys(tmp_path, m ) dialog._maybe_update_portable_bundle_after_save( - {"visual_crossing_api_key": "FAKE_VC_KEY_123", "other_setting": "ignored"} + { + "visual_crossing_api_key": "FAKE_VC_KEY_123", + "pirate_weather_api_key": "FAKE_PW_KEY_123", + "other_setting": "ignored", + } ) dialog.config_manager.export_encrypted_api_keys.assert_called_once_with( @@ -735,7 +739,7 @@ def GetValue(self): monkeypatch.setattr(wx, "TextEntryDialog", _FakeTextEntryDialog, raising=False) - dialog._maybe_update_portable_bundle_after_save({"openrouter_api_key": "FAKE_OR_KEY_456"}) + dialog._maybe_update_portable_bundle_after_save({"pirate_weather_api_key": "FAKE_PW_KEY_456"}) dialog.config_manager.export_encrypted_api_keys.assert_called_once_with( portable / "api-keys.keys", "FAKE_NEW_PASSPHRASE" diff --git a/tests/test_settings_dialog_source_priority.py b/tests/test_settings_dialog_source_priority.py index c4bc0d7b..0e357878 100644 --- a/tests/test_settings_dialog_source_priority.py +++ b/tests/test_settings_dialog_source_priority.py @@ -29,6 +29,7 @@ class _DummyControl: def __init__(self) -> None: self._selection = 0 self._value = False + self._parent = _DummyParent() def SetSelection(self, value: int) -> None: self._selection = value @@ -45,6 +46,9 @@ def GetValue(self): def Append(self, _value: str) -> None: return None + def GetParent(self): + return self._parent + def __getattr__(self, _name: str): return lambda *args, **kwargs: None @@ -56,18 +60,47 @@ def __missing__(self, key: str) -> _DummyControl: return value +class _DummySizer: + def ShowItems(self, _value: bool) -> None: + return None + + +class _DummyParent: + def Layout(self) -> None: + return None + + def FitInside(self) -> None: + return None + + def _make_dialog_for_settings(settings: SimpleNamespace) -> SettingsDialogSimple: dialog = SettingsDialogSimple.__new__(SettingsDialogSimple) dialog._controls = _Controls() dialog._sound_pack_ids = ["default"] dialog._selected_specific_model = None dialog._update_minimize_on_startup_state = lambda _enabled: None + dialog._vc_config_sizer = _DummySizer() + dialog._pw_config_sizer = _DummySizer() dialog.config_manager = MagicMock() dialog.config_manager.get_settings.return_value = settings return dialog def test_load_settings_maps_us_source_priority_to_index_1(): + # 4-element list (current format) + settings = SimpleNamespace( + source_priority_us=["nws", "visualcrossing", "openmeteo", "pirateweather"], + source_priority_international=["openmeteo", "pirateweather", "visualcrossing"], + ) + dialog = _make_dialog_for_settings(settings) + + dialog._load_settings() + + assert dialog._controls["us_priority"].GetSelection() == 1 + + +def test_load_settings_maps_us_source_priority_legacy_3_element_to_index_1(): + # 3-element list (legacy config without pirateweather) - should still map correctly settings = SimpleNamespace( source_priority_us=["nws", "visualcrossing", "openmeteo"], source_priority_international=["openmeteo", "visualcrossing"], @@ -80,6 +113,20 @@ def test_load_settings_maps_us_source_priority_to_index_1(): def test_load_settings_maps_international_source_priority_to_index_1(): + # 3-element list (current format) + settings = SimpleNamespace( + source_priority_us=["nws", "openmeteo", "visualcrossing", "pirateweather"], + source_priority_international=["visualcrossing", "openmeteo", "pirateweather"], + ) + dialog = _make_dialog_for_settings(settings) + + dialog._load_settings() + + assert dialog._controls["intl_priority"].GetSelection() == 1 + + +def test_load_settings_maps_international_source_priority_legacy_2_element_to_index_1(): + # 2-element list (legacy config without pirateweather) - should still map correctly settings = SimpleNamespace( source_priority_us=["nws", "openmeteo", "visualcrossing"], source_priority_international=["visualcrossing", "openmeteo"], @@ -103,4 +150,4 @@ def test_save_settings_persists_selected_us_source_priority_index_2(): assert success is True kwargs = dialog.config_manager.update_settings.call_args.kwargs - assert kwargs["source_priority_us"] == ["openmeteo", "nws", "visualcrossing"] + assert kwargs["source_priority_us"] == ["openmeteo", "nws", "visualcrossing", "pirateweather"] diff --git a/tests/test_settings_dialog_tray_text.py b/tests/test_settings_dialog_tray_text.py index e7580d56..ee2e3d98 100644 --- a/tests/test_settings_dialog_tray_text.py +++ b/tests/test_settings_dialog_tray_text.py @@ -30,6 +30,7 @@ def __init__(self) -> None: self._selection = 0 self._value = False self.enabled = True + self._parent = _DummyParent() def SetSelection(self, value: int) -> None: self._selection = value @@ -49,6 +50,9 @@ def Enable(self, value: bool) -> None: def Append(self, _value: str) -> None: return None + def GetParent(self): + return self._parent + def __getattr__(self, _name: str): return lambda *args, **kwargs: None @@ -60,11 +64,26 @@ def __missing__(self, key: str) -> _DummyControl: return value +class _DummySizer: + def ShowItems(self, _value: bool) -> None: + return None + + +class _DummyParent: + def Layout(self) -> None: + return None + + def FitInside(self) -> None: + return None + + def _make_dialog_for_settings(settings: SimpleNamespace) -> SettingsDialogSimple: dialog = SettingsDialogSimple.__new__(SettingsDialogSimple) dialog._controls = _Controls() dialog._sound_pack_ids = ["default"] dialog._selected_specific_model = None + dialog._vc_config_sizer = _DummySizer() + dialog._pw_config_sizer = _DummySizer() dialog.config_manager = MagicMock() dialog.config_manager.get_settings.return_value = settings return dialog diff --git a/tests/test_settings_operations.py b/tests/test_settings_operations.py index a7e317ef..97bdd8f6 100644 --- a/tests/test_settings_operations.py +++ b/tests/test_settings_operations.py @@ -314,11 +314,11 @@ def test_update_secure_setting(self, mock_set_password, operations, mock_manager """Test updating a secure setting.""" mock_set_password.return_value = True - result = operations.update_settings(visual_crossing_api_key="test_key") + result = operations.update_settings(pirate_weather_api_key="test_key") config = mock_manager.get_config.return_value - assert config.settings.visual_crossing_api_key == "test_key" - mock_set_password.assert_called_once_with("visual_crossing_api_key", "test_key") + assert config.settings.pirate_weather_api_key == "test_key" + mock_set_password.assert_called_once_with("pirate_weather_api_key", "test_key") assert result is True @patch("accessiweather.config.settings.SecureStorage.set_password") @@ -326,11 +326,11 @@ def test_update_secure_setting_storage_fails(self, mock_set_password, operations """Test updating a secure setting when secure storage fails.""" mock_set_password.return_value = False - result = operations.update_settings(visual_crossing_api_key="test_key") + result = operations.update_settings(pirate_weather_api_key="test_key") # Should still update the setting and save config config = mock_manager.get_config.return_value - assert config.settings.visual_crossing_api_key == "test_key" + assert config.settings.pirate_weather_api_key == "test_key" assert result is True def test_update_multiple_settings(self, operations, mock_manager): @@ -363,11 +363,11 @@ def test_save_config_failure(self, operations, mock_manager): def test_redacted_logging(self, operations, mock_manager): """Test that sensitive values are redacted in logs.""" - operations.update_settings(github_app_private_key="secret_key") + operations.update_settings(pirate_weather_api_key="secret_key") logger = mock_manager._get_logger.return_value # Check that logger.info was called with redacted value - logger.info.assert_called_with("Updated setting github_app_private_key = ***redacted***") + logger.info.assert_called_with("Updated setting pirate_weather_api_key = ***redacted***") class TestGetSettings: diff --git a/tests/test_source_priority_pirateweather.py b/tests/test_source_priority_pirateweather.py new file mode 100644 index 00000000..e8f36f2d --- /dev/null +++ b/tests/test_source_priority_pirateweather.py @@ -0,0 +1,249 @@ +"""Tests verifying pirateweather is wired into source priority defaults.""" + +from __future__ import annotations + +from datetime import UTC, datetime + +from accessiweather.config.source_priority import SourcePriorityConfig +from accessiweather.models.config import AppSettings +from accessiweather.models.weather import ( + CurrentConditions, + Forecast, + ForecastPeriod, + HourlyForecast, + HourlyForecastPeriod, + Location, + SourceData, +) +from accessiweather.weather_client_fusion import DataFusionEngine + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _make_source(name, current=None, forecast=None, hourly=None, alerts=None, success=True): + return SourceData( + source=name, + current=current, + forecast=forecast, + hourly_forecast=hourly, + alerts=alerts, + fetch_time=datetime.now(UTC), + success=success, + ) + + +def _make_forecast(name="Day 1"): + dt = datetime.now(UTC).replace(microsecond=0) + period = ForecastPeriod( + name=name, + start_time=dt, + end_time=dt, + temperature=70, + wind_speed="10 mph", + wind_direction="N", + short_forecast="Sunny", + detailed_forecast="Sunny skies.", + ) + return Forecast(periods=[period]) + + +def _make_hourly(hours=24): + dt = datetime.now(UTC).replace(microsecond=0) + periods = [ + HourlyForecastPeriod( + start_time=dt, temperature=70, wind_speed="10 mph", short_forecast="Clear" + ) + for _ in range(hours) + ] + return HourlyForecast(periods=periods) + + +US_LOCATION = Location(name="New York", latitude=40.7, longitude=-74.0, country_code="US") +INTL_LOCATION = Location(name="London", latitude=51.5, longitude=-0.1, country_code="GB") + + +# --------------------------------------------------------------------------- +# SourcePriorityConfig defaults +# --------------------------------------------------------------------------- + + +class TestSourcePriorityConfigDefaults: + def test_us_default_includes_pirateweather(self): + config = SourcePriorityConfig() + assert "pirateweather" in config.us_default + + def test_us_default_order(self): + config = SourcePriorityConfig() + assert config.us_default == ["nws", "openmeteo", "visualcrossing", "pirateweather"] + + def test_international_default_includes_pirateweather(self): + config = SourcePriorityConfig() + assert "pirateweather" in config.international_default + + def test_international_default_order(self): + config = SourcePriorityConfig() + # PW before VC for international (WMO global alerts) + assert config.international_default == ["openmeteo", "pirateweather", "visualcrossing"] + pw_idx = config.international_default.index("pirateweather") + vc_idx = config.international_default.index("visualcrossing") + assert pw_idx < vc_idx + + def test_from_dict_us_default_fallback_includes_pirateweather(self): + config = SourcePriorityConfig.from_dict({}) + assert "pirateweather" in config.us_default + + def test_from_dict_international_default_fallback_includes_pirateweather(self): + config = SourcePriorityConfig.from_dict({}) + assert "pirateweather" in config.international_default + + def test_from_dict_preserves_explicit_list(self): + custom_us = ["pirateweather", "nws", "openmeteo", "visualcrossing"] + config = SourcePriorityConfig.from_dict({"us_default": custom_us}) + assert config.us_default == custom_us + + def test_roundtrip_json_preserves_pirateweather(self): + config = SourcePriorityConfig() + restored = SourcePriorityConfig.from_json(config.to_json()) + assert "pirateweather" in restored.us_default + assert "pirateweather" in restored.international_default + + def test_roundtrip_dict_preserves_pirateweather(self): + config = SourcePriorityConfig() + restored = SourcePriorityConfig.from_dict(config.to_dict()) + assert restored.us_default == config.us_default + assert restored.international_default == config.international_default + + +# --------------------------------------------------------------------------- +# AppSettings source priority defaults +# --------------------------------------------------------------------------- + + +class TestAppSettingsSourcePriorityDefaults: + def test_us_priority_default_includes_pirateweather(self): + settings = AppSettings() + assert "pirateweather" in settings.source_priority_us + + def test_us_priority_default_order(self): + settings = AppSettings() + assert settings.source_priority_us == [ + "nws", + "openmeteo", + "visualcrossing", + "pirateweather", + ] + + def test_international_priority_default_includes_pirateweather(self): + settings = AppSettings() + assert "pirateweather" in settings.source_priority_international + + def test_international_priority_default_order(self): + settings = AppSettings() + assert settings.source_priority_international == [ + "openmeteo", + "pirateweather", + "visualcrossing", + ] + + def test_from_dict_us_fallback_includes_pirateweather(self): + settings = AppSettings.from_dict({}) + assert "pirateweather" in settings.source_priority_us + + def test_from_dict_international_fallback_includes_pirateweather(self): + settings = AppSettings.from_dict({}) + assert "pirateweather" in settings.source_priority_international + + def test_from_dict_explicit_list_preserved(self): + custom = ["pirateweather", "openmeteo", "visualcrossing"] + data = {"source_priority_international": custom} + settings = AppSettings.from_dict(data) + assert settings.source_priority_international == custom + + +# --------------------------------------------------------------------------- +# DataFusionEngine forecast preferred_order +# --------------------------------------------------------------------------- + + +class TestFusionEnginePirateWeatherOrder: + def test_merge_forecasts_us_falls_back_to_pirateweather(self): + """When NWS, OM, and VC are absent, PW forecast is selected for US.""" + pw_forecast = _make_forecast("PW Day 1") + sources = [_make_source("pirateweather", forecast=pw_forecast)] + engine = DataFusionEngine() + result, attribution = engine.merge_forecasts(sources, US_LOCATION) + assert result is pw_forecast + assert attribution.get("forecast_source") == "pirateweather" + + def test_merge_forecasts_intl_prefers_pw_over_vc(self): + """For international, PW should be selected over VC when OM is absent.""" + vc_forecast = _make_forecast("VC Day 1") + pw_forecast = _make_forecast("PW Day 1") + sources = [ + _make_source("visualcrossing", forecast=vc_forecast), + _make_source("pirateweather", forecast=pw_forecast), + ] + engine = DataFusionEngine() + result, attribution = engine.merge_forecasts(sources, INTL_LOCATION) + assert result is pw_forecast + assert attribution.get("forecast_source") == "pirateweather" + + def test_merge_forecasts_intl_prefers_openmeteo_over_pw(self): + """For international, OM should be selected over PW.""" + om_forecast = _make_forecast("OM Day 1") + pw_forecast = _make_forecast("PW Day 1") + sources = [ + _make_source("openmeteo", forecast=om_forecast), + _make_source("pirateweather", forecast=pw_forecast), + ] + engine = DataFusionEngine() + result, attribution = engine.merge_forecasts(sources, INTL_LOCATION) + assert result is om_forecast + assert attribution.get("forecast_source") == "openmeteo" + + def test_merge_hourly_us_falls_back_to_pirateweather(self): + """When NWS, OM, and VC are absent, PW hourly is selected for US.""" + pw_hourly = _make_hourly() + sources = [_make_source("pirateweather", hourly=pw_hourly)] + engine = DataFusionEngine() + result, attribution = engine.merge_hourly_forecasts(sources, US_LOCATION) + assert result is pw_hourly + assert attribution.get("hourly_source") == "pirateweather" + + def test_merge_hourly_intl_prefers_pw_over_vc(self): + """For international, PW hourly should be selected over VC when OM is absent.""" + vc_hourly = _make_hourly() + pw_hourly = _make_hourly() + sources = [ + _make_source("visualcrossing", hourly=vc_hourly), + _make_source("pirateweather", hourly=pw_hourly), + ] + engine = DataFusionEngine() + result, attribution = engine.merge_hourly_forecasts(sources, INTL_LOCATION) + assert result is pw_hourly + assert attribution.get("hourly_source") == "pirateweather" + + def test_merge_current_conditions_includes_pirateweather(self): + """PW current conditions are included in merge when present.""" + pw_current = CurrentConditions(temperature_f=68.0) + sources = [_make_source("pirateweather", current=pw_current)] + engine = DataFusionEngine() + result, attribution = engine.merge_current_conditions(sources, INTL_LOCATION) + assert result is not None + assert "pirateweather" in attribution.contributing_sources + + def test_merge_current_conditions_us_nws_takes_priority_over_pw(self): + """For US, NWS current conditions take priority over PW.""" + nws_current = CurrentConditions(temperature_f=72.0) + pw_current = CurrentConditions(temperature_f=65.0) + sources = [ + _make_source("nws", current=nws_current), + _make_source("pirateweather", current=pw_current), + ] + engine = DataFusionEngine() + result, attribution = engine.merge_current_conditions(sources, US_LOCATION) + assert result is not None + # NWS temperature should win for US + assert attribution.field_sources.get("temperature_f") == "nws" diff --git a/tests/test_split_notification_timers.py b/tests/test_split_notification_timers.py index c7374e66..b0009e78 100644 --- a/tests/test_split_notification_timers.py +++ b/tests/test_split_notification_timers.py @@ -374,6 +374,8 @@ def test_process_notification_events_skips_when_both_disabled(self): settings = MagicMock() settings.notify_discussion_update = False settings.notify_severe_risk_change = False + settings.notify_minutely_precipitation_start = False + settings.notify_minutely_precipitation_stop = False win.app.config_manager.get_settings.return_value = settings win._process_notification_events(MagicMock()) diff --git a/tests/test_startup_guidance_prompts.py b/tests/test_startup_guidance_prompts.py index 69163f2a..da080695 100644 --- a/tests/test_startup_guidance_prompts.py +++ b/tests/test_startup_guidance_prompts.py @@ -152,7 +152,7 @@ def test_onboarding_wizard_shown_once_with_skip_path(monkeypatch): _ensure_wx_dialog_constants() skip_id = getattr(wx, "ID_NO", 0) cancel_id = getattr(wx, "ID_CANCEL", 2) - responses = [skip_id, cancel_id, cancel_id, getattr(wx, "ID_OK", 1)] + responses = [skip_id, cancel_id, cancel_id, cancel_id, getattr(wx, "ID_OK", 1)] monkeypatch.setattr( "accessiweather.app.wx.MessageDialog", lambda *args, **kwargs: _FakeDialog(responses), @@ -197,11 +197,12 @@ def test_onboarding_wizard_portable_happy_path_sets_keys_and_bundle(monkeypatch, ) _ensure_wx_dialog_constants() - # Step 1: skip location; step 2: OR key prompt+link dialogs; step 3: VC key; summary OK + # Step 1: skip location; step 2: OR key; step 3: VC key; step 4: Pirate key; summary OK responses = [ getattr(wx, "ID_NO", 0), # step 1: skip location getattr(wx, "ID_YES", 1), # step 2: OR key — choose "Enter key" getattr(wx, "ID_YES", 1), # step 3: VC key — choose "Enter key" + getattr(wx, "ID_YES", 1), # step 4: Pirate key — choose "Enter key" getattr(wx, "ID_OK", 1), # onboarding summary ] monkeypatch.setattr( @@ -209,8 +210,13 @@ def test_onboarding_wizard_portable_happy_path_sets_keys_and_bundle(monkeypatch, lambda *args, **kwargs: _FakeDialog(responses), raising=False, ) - # TextEntryDialog: OR key, VC key, bundle passphrase - text_responses = ["FAKE_OR_KEY_TEST", "FAKE_VC_KEY_TEST", "FAKE_BUNDLE_PASSPHRASE"] + # TextEntryDialog: OR key, VC key, Pirate key, bundle passphrase + text_responses = [ + "FAKE_OR_KEY_TEST", + "FAKE_VC_KEY_TEST", + "FAKE_PW_KEY_TEST", + "FAKE_BUNDLE_PASSPHRASE", + ] monkeypatch.setattr( "accessiweather.app.wx.TextEntryDialog", lambda *args, **kwargs: _FakeTextEntryDialog(text_responses), @@ -239,6 +245,7 @@ def test_onboarding_wizard_portable_happy_path_sets_keys_and_bundle(monkeypatch, # Keys should be live in session memory (set before export call) assert settings.openrouter_api_key == "FAKE_OR_KEY_TEST" assert settings.visual_crossing_api_key == "FAKE_VC_KEY_TEST" + assert settings.pirate_weather_api_key == "FAKE_PW_KEY_TEST" assert app._portable_keys_imported_this_session is True # wizard_shown should be marked last_call = app.config_manager.update_settings.call_args_list[-1] @@ -264,6 +271,8 @@ def test_onboarding_wizard_api_key_link_actions_open_browser(monkeypatch): getattr(wx, "ID_NO", 0), getattr(wx, "ID_NO", 0), getattr(wx, "ID_CANCEL", 2), + getattr(wx, "ID_NO", 0), + getattr(wx, "ID_CANCEL", 2), getattr(wx, "ID_OK", 1), ] monkeypatch.setattr( @@ -290,6 +299,7 @@ def test_onboarding_wizard_api_key_link_actions_open_browser(monkeypatch): assert opened_urls == [ "https://openrouter.ai/keys", "https://www.visualcrossing.com/sign-up", + "https://pirateweather.net/", ] calls = app.config_manager.update_settings.call_args_list assert calls[0].kwargs == {"openrouter_api_key": "FAKE_OR_KEY_TEST"} @@ -318,6 +328,7 @@ def test_onboarding_summary_includes_readiness_status(monkeypatch): getattr(wx, "ID_NO", 0), getattr(wx, "ID_CANCEL", 2), getattr(wx, "ID_CANCEL", 2), + getattr(wx, "ID_CANCEL", 2), getattr(wx, "ID_OK", 1), ] captured_messages: list[str] = [] @@ -347,6 +358,7 @@ def __init__(self, message: str, responses: list[int]): assert "Location configured: Yes" in summary assert "OpenRouter key set: Yes" in summary assert "Visual Crossing weather provider key set: No" in summary + assert "Pirate Weather provider key set: No" in summary # portable_auto_bundle_enabled line removed — not relevant in new design @@ -368,6 +380,7 @@ def test_onboarding_completion_triggers_deferred_startup_update_check(monkeypatc getattr(wx, "ID_NO", 0), getattr(wx, "ID_CANCEL", 2), getattr(wx, "ID_CANCEL", 2), + getattr(wx, "ID_CANCEL", 2), getattr(wx, "ID_OK", 1), ] monkeypatch.setattr( @@ -387,7 +400,7 @@ def test_onboarding_completion_triggers_deferred_startup_update_check(monkeypatc # --------------------------------------------------------------------------- -# Tests for wizard step numbering (non-portable = 3 steps, portable = 4) +# Tests for wizard step numbering (non-portable = 4 steps, portable = 5) # --------------------------------------------------------------------------- @@ -412,11 +425,12 @@ def __init__(self, message: str, responses: list[int]): super().__init__(responses) captured_messages.append(message) - # Skip location, skip OR key, skip VC key, OK summary + # Skip location, skip OR key, skip VC key, skip Pirate key, OK summary responses = [ getattr(wx, "ID_NO", 0), getattr(wx, "ID_CANCEL", 2), getattr(wx, "ID_CANCEL", 2), + getattr(wx, "ID_CANCEL", 2), getattr(wx, "ID_OK", 1), ] monkeypatch.setattr( @@ -436,21 +450,21 @@ def __init__(self, message: str, responses: list[int]): def test_wizard_step_numbering_non_portable(monkeypatch): - """Non-portable wizard uses 'of 3' in step labels.""" + """Non-portable wizard uses 'of 4' in step labels.""" messages = _capture_wizard_step_messages(monkeypatch, portable=False) step1 = messages[0] - assert "Step 1 of 3" in step1, f"Expected 'Step 1 of 3' in: {step1}" + assert "Step 1 of 4" in step1, f"Expected 'Step 1 of 4' in: {step1}" def test_wizard_step_numbering_portable(monkeypatch): - """Portable wizard uses 'of 4' in step labels.""" + """Portable wizard uses 'of 5' in step labels.""" messages = _capture_wizard_step_messages(monkeypatch, portable=True) step1 = messages[0] - assert "Step 1 of 4" in step1, f"Expected 'Step 1 of 4' in: {step1}" + assert "Step 1 of 5" in step1, f"Expected 'Step 1 of 5' in: {step1}" -def test_wizard_step2_step3_numbering_non_portable(monkeypatch): - """Non-portable wizard passes 'of 3' to _prompt_optional_secret_with_link calls.""" +def test_wizard_step2_step3_step4_numbering_non_portable(monkeypatch): + """Non-portable wizard passes 'of 4' to provider key prompts.""" app = AccessiWeatherApp.__new__(AccessiWeatherApp) app._portable_mode = False app._force_wizard = False @@ -483,13 +497,14 @@ def fake_prompt(title, message, url, label): app._maybe_show_first_start_onboarding() - assert len(prompt_messages) == 2 - assert "Step 2 of 3" in prompt_messages[0], f"Expected 'Step 2 of 3' in: {prompt_messages[0]}" - assert "Step 3 of 3" in prompt_messages[1], f"Expected 'Step 3 of 3' in: {prompt_messages[1]}" + assert len(prompt_messages) == 3 + assert "Step 2 of 4" in prompt_messages[0], f"Expected 'Step 2 of 4' in: {prompt_messages[0]}" + assert "Step 3 of 4" in prompt_messages[1], f"Expected 'Step 3 of 4' in: {prompt_messages[1]}" + assert "Step 4 of 4" in prompt_messages[2], f"Expected 'Step 4 of 4' in: {prompt_messages[2]}" -def test_wizard_step2_step3_numbering_portable(monkeypatch): - """Portable wizard passes 'of 4' to _prompt_optional_secret_with_link calls.""" +def test_wizard_step2_step3_step4_numbering_portable(monkeypatch): + """Portable wizard passes 'of 5' to provider key prompts.""" app = AccessiWeatherApp.__new__(AccessiWeatherApp) app._portable_mode = True app._force_wizard = False @@ -522,9 +537,10 @@ def fake_prompt(title, message, url, label): app._maybe_show_first_start_onboarding() - assert len(prompt_messages) == 2 - assert "Step 2 of 4" in prompt_messages[0], f"Expected 'Step 2 of 4' in: {prompt_messages[0]}" - assert "Step 3 of 4" in prompt_messages[1], f"Expected 'Step 3 of 4' in: {prompt_messages[1]}" + assert len(prompt_messages) == 3 + assert "Step 2 of 5" in prompt_messages[0], f"Expected 'Step 2 of 5' in: {prompt_messages[0]}" + assert "Step 3 of 5" in prompt_messages[1], f"Expected 'Step 3 of 5' in: {prompt_messages[1]}" + assert "Step 4 of 5" in prompt_messages[2], f"Expected 'Step 4 of 5' in: {prompt_messages[2]}" # --------------------------------------------------------------------------- @@ -927,6 +943,7 @@ def test_wizard_portable_export_failure_shows_warning(monkeypatch, tmp_path): getattr(wx, "ID_NO", 0), # step 1: skip location getattr(wx, "ID_YES", 1), # step 2: OR key — choose "Enter key" getattr(wx, "ID_CANCEL", 2), # step 3: VC key — skip + getattr(wx, "ID_CANCEL", 2), # step 4: Pirate key — skip getattr(wx, "ID_OK", 1), # onboarding summary ] monkeypatch.setattr(