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(