A Cumulus station reports the backyard. An aerodrome METAR reports a listed observing site under WMO/ICAO and, in the United States, FMH-1 rules. Operators still want both on one page: “my temperature versus the airport.” The historical path /scripts/getmetar.php was a PHP fetch of official METAR (and often TAF) for that comparison. This article is about provenance, freshness, and distance—how to obtain the official products and how not to treat the PWS as a substitute.
It is not a lesson in composing a METAR-like string from Cumulus fields. That claim boundary is projects.metar. The original script is not rehosted.
Historical context
Community weather sites commonly polled NOAA’s Aviation Digital Data Service (ADDS) text data server, then decoded a METAR for a configured ICAO identifier and printed it beside Weather Display or Cumulus values. /scripts/getmetar.php on the Cumulus host was that class of utility: remote fetch, local format, HTML include.
ADDS as a named text data server is no longer the current official machine interface. The Aviation Weather Center (AWC) overhauled aviationweather.gov in October 2023. AWC states that the ADDS Text Data Server was discontinued and succeeded by the Data API, and that ADDS static graphics were phased out in favor of Graphical Forecasts for Aviation (AWC: Upcoming changes / FAQ, last checked 13 August 2026). The legacy dataserver path now points at the new API (discontinued Text Data Server notice).
A recovered 2010 getmetar.php that still calls ADDS URLs is a stale client, not a current data source. This page documents the job, not that client.
Official products, two jobs
METAR is an aerodrome routine meteorological observation (WMO FM-15; US implementation in FMH-1). NWS summarizes the typical body: identifier, time, wind, visibility, RVR, present weather, sky, temperature, dew point, altimeter (NWS). SPECI is an unscheduled observation when criteria are met.
TAF is a forecast for the terminal area, not an observation. Comparing a TAF to a Cumulus realtime.txt line is comparing a forecast to an observed packet. That can be useful. It is not a like-for-like sensor check.
Keep the labels. A page that pastes a TAF under a heading “Current airport weather” is mis-stating the product.
Current official machine source (verify at use)
For machine-to-machine access, AWC documents a Data API under https://aviationweather.gov/api/data, with METAR and TAF among the products, in raw text, JSON, GeoJSON, XML, and (for some products) CSV or IWXXM (AWC Data API, last checked 13 August 2026). Example form documented by AWC: METAR for an ICAO id in JSON via https://aviationweather.gov/api/data/metar?ids=KMCI&format=json. Cache files of current METARs are offered for bulk use and are updated on the order of a minute.
AWC’s published request limits include rate limiting (documented as 100 requests per minute, with guidance not to consume endpoints more frequently than about one request per minute per thread) and a maximum result count per query. CORS is documented as not permitted. Status 204 means a valid request with no data.
Human lookup remains on METAR/TAF data pages. AWC notes that the interactive site generally shows observations within a minute or two of receipt and that AWC does not maintain the observing platforms; a missing station is usually a source outage.
Do not treat a third-party “METAR API,” a scraped airline page, or a Cumulus extra file as the official source. If you cache AWC bytes, keep the fetch time and the raw report.
Comparison is not substitution
A PWS and a METAR can disagree for reasons that are not instrument failure.
Distance and elevation. The official identifier is a point—typically an airport sensor suite. Your Cumulus station is another point. A few kilometres, a valley, or a shoreline is enough for temperature and wind to differ honestly. If you cannot state the distance (and preferably the bearings and elevations), you are not doing a comparison; you are decorating a PWS page with aviation text.
Siting and averaging. METAR wind and visibility follow handbook rules. Cumulus wind may be a station-defined average and a “latest” sample (realtime.txt). Roof-mount PWS wind is not a 10-metre aerodrome anemometer.
Time. METAR time is UTC. Cumulus date/time tags are usually local. Convert before subtracting. A “two-degree difference” that is actually a 90-minute lag is a clock error.
Stale METAR. Hourly routine reports can be up to about an hour old by design; AWC’s help notes that METARs are widely treated as hourly products, and SPECI fill some gaps. If the latest METAR for your chosen id is several hours old, the comparison is against a historical observation. Do not keep reprinting it as “now” because the PHP still returns 200. AWC’s API may return 204 when nothing is available; that is a missing observation, not an invitation to reuse yesterday’s string.
Units. METAR body temperature is integer Celsius in the US-coded body; Cumulus may be decimal Fahrenheit. Convert explicitly. Pressure in a US METAR altimeter group is not the same quantity as Cumulus sea-level pressure in hPa until you document the conversion and what you are comparing.
Derived Cumulus fields. Wind chill, humidex, and Zambretti-style forecast numbers are not METAR groups. Do not line them up under “airport” as if they were.
The PWS remains a PWS. It does not become an ASOS because you printed KJFK next to it.
A safe fetch-and-compare procedure
- Choose the nearest relevant official station, not the most famous airport in the state. Record ICAO id, name, lat/lon, and distance to the PWS.
- Fetch METAR (observation) and, if you want a forecast column, TAF (forecast) from the current AWC interface, not from a remembered ADDS URL.
- Store raw text plus retrieve time. Honor AWC rate limits; a Cumulus page that refreshes every 10 seconds should not hit the API every 10 seconds—cache the official report for a documented TTL.
- Parse the METAR time group. If the report is older than your freshness rule, display it as stale or omit the comparison.
- Convert PWS time to UTC. Compare only overlapping quantities: temperature, dew point, wind, pressure—each with units stated.
- Label three columns if you also show a TAF: PWS observed, METAR observed, TAF forecast.
- On failure (timeout, 204, 429, malformed report), show a gap. Do not substitute the last PWS temperature into the METAR column.
Do not send user-supplied ICAO ids straight into a server-side fetch without allow-listing. A getmetar.php?id= that accepts arbitrary URLs or hostnames is a proxy, not a weather tool.
Modern relevance
MX and other station programs can display official METAR via current HTTP APIs. The scientific rule did not change: official code forms come from official distribution; PWS files come from Cumulus; comparison requires distance, clocks, and units. The historical /scripts/getmetar.php URL keeps that rule attached to the old script name without restoring an ADDS client.
Source identity and freshness are the same questions TNET states for public weather records on data sources, quality controls, and methodology. How TNET distinguishes observed and forecast evidence in connection research is conceptual on how the service works. For aviation decisions and warnings, use NWS and aviationweather.gov, not a Cumulus include. Related historical pages live on the Cumulus hub.
Sources
- AWC Data API (last checked 13 August 2026)
- AWC: Upcoming changes (ADDS succession) (last checked 13 August 2026)
- AWC: Text Data Server discontinued
- AWC METAR/TAF data
- NWS: What’s a METAR? (last checked 13 August 2026)
- FMH-1 (FCM-H1-2019)
- WMO: FM-15 METAR
- Cumulus Wiki: realtime.txt (last checked 13 August 2026)
- TNET: data sources and methodology
- TNET: how it works
- Cumulus hub