AirNow retires the web services behind
get_airnow_conditions() and
get_airnow_forecast() on 2026-09-30. This release moves the
package to the replacement services released in June 2026.
get_airnow_observations() returns current readings by
ZIP code, coordinates, or reporting area code, with a derived
utc_datetime column.get_airnow_forecasts() returns the forecasts currently
issued for a location.get_airnow_forecast_history() returns past forecasts
for a reporting area and date range. It replaces
get_airnow_forecast(date = ).get_airnow_reporting_area() finds the reporting area
that serves a location. ZIP codes whose area has no forecast issued
today fall back to AirNow’s bundled ZIP crosswalk.get_airnow_monitors() is the new name for
get_airnow_area().get_airnow_key() and set_airnow_key()
replace the token-named credential helpers.airnow_areas lists every AirNow reporting area with its
code, location, time zone, and agency.get_airnow_conditions(),
get_airnow_forecast(), get_airnow_area(),
get_airnow_token(), and set_airnow_token()
still work but warn. The first two call the new services and reshape the
result to their old columns. Row counts and AQI values can differ from
the retired services because AirNow changed its lookup methodology;
LocalTimeZone is now correct where it was wrong before;
distance is ignored; and
get_airnow_forecast(date = ) returns forecasts valid on
that date only. Dated calls for ZIPs in AirNow’s bundled crosswalk no
longer depend on a forecast being issued today. The additive
area argument provides an exact fallback for coordinates
and ZIPs absent from the crosswalk while preserving the legacy output
columns.aqi_color() and aqi_descriptor() accept
values above 500 (treated as Hazardous) and NA, and warn
instead of erroring on negative values. Real AirNow data exceeds 500
during smoke events.NA.get_airnow_forecast_history() warns when asked for
dates in the future. AirNow serves these forecasts only through today,
so such requests return no rows; get_airnow_forecasts() has
the upcoming forecasts.Fix issue with documentation - thanks @GeraldineGomez! (#6)