Align Taipei and Shenzhen settlement sources with Wunderground
This commit is contained in:
@@ -57,21 +57,38 @@ const CITY_SPECIFIC_SOURCES: Record<string, OfficialSourceLink[]> = {
|
|||||||
href: "https://aviationweather.gov/data/metar/?id=VHHH&decoded=1&taf=1",
|
href: "https://aviationweather.gov/data/metar/?id=VHHH&decoded=1&taf=1",
|
||||||
kind: "metar",
|
kind: "metar",
|
||||||
},
|
},
|
||||||
],
|
|
||||||
taipei: [
|
|
||||||
{
|
{
|
||||||
label: "NOAA RCTP Timeseries",
|
label: "流浮山站(HKO)",
|
||||||
href: "https://www.weather.gov/wrh/timeseries?site=RCTP",
|
href: "https://www.hko.gov.hk/sc/wxinfo/ts/index.htm",
|
||||||
|
kind: "agency",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"lau fau shan": [
|
||||||
|
{
|
||||||
|
label: "香港天文台",
|
||||||
|
href: "https://www.hko.gov.hk/en/index.html",
|
||||||
kind: "agency",
|
kind: "agency",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "桃园机场",
|
label: "流浮山站(HKO)",
|
||||||
href: "https://www.taoyuan-airport.com/",
|
href: "https://www.hko.gov.hk/sc/wxinfo/ts/index.htm",
|
||||||
|
kind: "airport",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
taipei: [
|
||||||
|
{
|
||||||
|
label: "Wunderground RCSS",
|
||||||
|
href: "https://www.wunderground.com/history/daily/tw/taipei/RCSS",
|
||||||
|
kind: "agency",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "台北松山机场",
|
||||||
|
href: "https://www.tsa.gov.tw/?lang=en",
|
||||||
kind: "airport",
|
kind: "airport",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "RCTP METAR",
|
label: "RCSS METAR",
|
||||||
href: "https://aviationweather.gov/data/metar/?id=RCTP&decoded=1&taf=1",
|
href: "https://aviationweather.gov/data/metar/?id=RCSS&decoded=1&taf=1",
|
||||||
kind: "metar",
|
kind: "metar",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -494,8 +511,8 @@ const CITY_SPECIFIC_SOURCES: Record<string, OfficialSourceLink[]> = {
|
|||||||
],
|
],
|
||||||
shenzhen: [
|
shenzhen: [
|
||||||
{
|
{
|
||||||
label: "NOAA ZGSZ Timeseries",
|
label: "Wunderground ZGSZ",
|
||||||
href: "https://www.weather.gov/wrh/timeseries?site=ZGSZ",
|
href: "https://www.wunderground.com/history/daily/cn/shenzhen/ZGSZ",
|
||||||
kind: "agency",
|
kind: "agency",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ def build_city_query_report(
|
|||||||
sc_current = {}
|
sc_current = {}
|
||||||
city_meta = CITY_REGISTRY.get(city_name.lower(), {})
|
city_meta = CITY_REGISTRY.get(city_name.lower(), {})
|
||||||
settlement_source, settlement_source_label = _resolve_settlement_source(city_meta)
|
settlement_source, settlement_source_label = _resolve_settlement_source(city_meta)
|
||||||
use_settlement_current = settlement_source in {"hko", "cwa", "noaa"} and bool(sc_current)
|
use_settlement_current = settlement_source in {"hko", "cwa", "noaa", "wunderground"} and bool(sc_current)
|
||||||
fallback_utc_offset = int(city_meta.get("tz_offset", 0))
|
fallback_utc_offset = int(city_meta.get("tz_offset", 0))
|
||||||
nws_periods = ((weather_data.get("nws") or {}).get("forecast_periods") or [])
|
nws_periods = ((weather_data.get("nws") or {}).get("forecast_periods") or [])
|
||||||
if nws_periods:
|
if nws_periods:
|
||||||
|
|||||||
@@ -110,22 +110,42 @@ CITY_REGISTRY = {
|
|||||||
"distance_km": 2.0,
|
"distance_km": 2.0,
|
||||||
"warning": "海风与地形共同作用,午后对流触发后温度回落可能偏快。",
|
"warning": "海风与地形共同作用,午后对流触发后温度回落可能偏快。",
|
||||||
},
|
},
|
||||||
|
"lau fau shan": {
|
||||||
|
"name": "Lau Fau Shan",
|
||||||
|
"lat": 22.4686,
|
||||||
|
"lon": 113.9970,
|
||||||
|
"icao": "LFS",
|
||||||
|
"settlement_source": "hko",
|
||||||
|
"settlement_station_code": "LFS",
|
||||||
|
"settlement_station_label": "Lau Fau Shan",
|
||||||
|
"settlement_station_candidates": ["Lau Fau Shan"],
|
||||||
|
"disable_aviationweather": True,
|
||||||
|
"tz_offset": 28800,
|
||||||
|
"use_fahrenheit": False,
|
||||||
|
"is_major": False,
|
||||||
|
"risk_level": "medium",
|
||||||
|
"risk_emoji": "🟡",
|
||||||
|
"airport_name": "流浮山站",
|
||||||
|
"distance_km": 0.0,
|
||||||
|
"warning": "HKO 结算取流浮山站分钟级观测;该站不是机场 METAR,不能与 VHHH/VHSK 报文混用。",
|
||||||
|
},
|
||||||
"taipei": {
|
"taipei": {
|
||||||
"name": "Taipei",
|
"name": "Taipei",
|
||||||
"lat": 25.0777,
|
"lat": 25.0670,
|
||||||
"lon": 121.2330,
|
"lon": 121.5525,
|
||||||
"icao": "RCTP",
|
"icao": "RCSS",
|
||||||
"settlement_source": "noaa",
|
"settlement_source": "wunderground",
|
||||||
"settlement_station_code": "RCTP",
|
"settlement_station_code": "RCSS",
|
||||||
"settlement_station_label": "Taiwan Taoyuan International Airport",
|
"settlement_station_label": "Taipei Songshan Airport Station",
|
||||||
|
"settlement_url": "https://www.wunderground.com/history/daily/tw/taipei/RCSS",
|
||||||
"tz_offset": 28800,
|
"tz_offset": 28800,
|
||||||
"use_fahrenheit": False,
|
"use_fahrenheit": False,
|
||||||
"is_major": True,
|
"is_major": True,
|
||||||
"risk_level": "low",
|
"risk_level": "low",
|
||||||
"risk_emoji": "🟢",
|
"risk_emoji": "🟢",
|
||||||
"airport_name": "台湾桃园国际机场",
|
"airport_name": "台北松山机场",
|
||||||
"distance_km": 28.1,
|
"distance_km": 4.1,
|
||||||
"warning": "市场现按 NOAA RCTP 整度°C口径结算,机场与台北市区温度不可混用。",
|
"warning": "市场现按 Wunderground 台北松山机场站整度°C口径结算;以历史页当日最终完成后的最高整度摄氏值为准。",
|
||||||
},
|
},
|
||||||
"shanghai": {
|
"shanghai": {
|
||||||
"name": "Shanghai",
|
"name": "Shanghai",
|
||||||
@@ -514,9 +534,10 @@ CITY_REGISTRY = {
|
|||||||
"lat": 22.6393,
|
"lat": 22.6393,
|
||||||
"lon": 113.8107,
|
"lon": 113.8107,
|
||||||
"icao": "ZGSZ",
|
"icao": "ZGSZ",
|
||||||
"settlement_source": "noaa",
|
"settlement_source": "wunderground",
|
||||||
"settlement_station_code": "ZGSZ",
|
"settlement_station_code": "ZGSZ",
|
||||||
"settlement_station_label": "Shenzhen Baoan International Airport",
|
"settlement_station_label": "Shenzhen Bao'an International Airport Station",
|
||||||
|
"settlement_url": "https://www.wunderground.com/history/daily/cn/shenzhen/ZGSZ",
|
||||||
"tz_offset": 28800,
|
"tz_offset": 28800,
|
||||||
"use_fahrenheit": False,
|
"use_fahrenheit": False,
|
||||||
"is_major": True,
|
"is_major": True,
|
||||||
@@ -524,7 +545,7 @@ CITY_REGISTRY = {
|
|||||||
"risk_emoji": "🟡",
|
"risk_emoji": "🟡",
|
||||||
"airport_name": "深圳宝安国际机场",
|
"airport_name": "深圳宝安国际机场",
|
||||||
"distance_km": 32.0,
|
"distance_km": 32.0,
|
||||||
"warning": "市场现按 NOAA ZGSZ 整度°C口径结算;以 weather.gov Temp 列在当日全部小时最终完成后的最高整度摄氏值为准。",
|
"warning": "市场现按 Wunderground 深圳宝安国际机场站整度°C口径结算;以历史页当日最终完成后的最高整度摄氏值为准。",
|
||||||
},
|
},
|
||||||
"beijing": {
|
"beijing": {
|
||||||
"name": "Beijing",
|
"name": "Beijing",
|
||||||
@@ -569,6 +590,7 @@ ALIASES = {
|
|||||||
"dal": "dallas", "mia": "miami", "atl": "atlanta",
|
"dal": "dallas", "mia": "miami", "atl": "atlanta",
|
||||||
"sea": "seattle", "tor": "toronto", "sel": "seoul",
|
"sea": "seattle", "tor": "toronto", "sel": "seoul",
|
||||||
"seo": "seoul", "hkg": "hong kong", "hk": "hong kong",
|
"seo": "seoul", "hkg": "hong kong", "hk": "hong kong",
|
||||||
|
"lfs": "lau fau shan", "laufaushan": "lau fau shan",
|
||||||
"tpe": "taipei", "tp": "taipei", "taipei": "taipei",
|
"tpe": "taipei", "tp": "taipei", "taipei": "taipei",
|
||||||
"sha": "shanghai", "sh": "shanghai", "sin": "singapore",
|
"sha": "shanghai", "sh": "shanghai", "sin": "singapore",
|
||||||
"sg": "singapore", "tok": "tokyo", "tyo": "tokyo",
|
"sg": "singapore", "tok": "tokyo", "tyo": "tokyo",
|
||||||
@@ -600,6 +622,7 @@ ALIASES = {
|
|||||||
"多伦多": "toronto",
|
"多伦多": "toronto",
|
||||||
"首尔": "seoul",
|
"首尔": "seoul",
|
||||||
"香港": "hong kong",
|
"香港": "hong kong",
|
||||||
|
"流浮山": "lau fau shan",
|
||||||
"台北": "taipei",
|
"台北": "taipei",
|
||||||
"臺北": "taipei",
|
"臺北": "taipei",
|
||||||
"上海": "shanghai",
|
"上海": "shanghai",
|
||||||
|
|||||||
@@ -601,7 +601,9 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
|||||||
if settlement_current:
|
if settlement_current:
|
||||||
results["settlement_current"] = settlement_current
|
results["settlement_current"] = settlement_current
|
||||||
|
|
||||||
if city_lower in ["hong_kong", "hong kong", "香港", "hk"]:
|
city_meta = self.CITY_REGISTRY.get(str(city_lower or "").strip().lower()) or {}
|
||||||
|
settlement_source = str(city_meta.get("settlement_source") or "").strip().lower()
|
||||||
|
if settlement_source == "hko" or city_lower in ["hong_kong", "hong kong", "香港", "hk"]:
|
||||||
hko_forecast = self.fetch_hko_forecast()
|
hko_forecast = self.fetch_hko_forecast()
|
||||||
if hko_forecast:
|
if hko_forecast:
|
||||||
results["hko_forecast"] = hko_forecast
|
results["hko_forecast"] = hko_forecast
|
||||||
|
|||||||
Reference in New Issue
Block a user