cwadayi commited on
Commit
4f8c995
·
verified ·
1 Parent(s): a89407f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -5
app.py CHANGED
@@ -1,5 +1,6 @@
1
  import os
2
  import re
 
3
  from datetime import datetime, timedelta, timezone
4
 
5
  import requests
@@ -25,7 +26,7 @@ def _fmt(dt: datetime) -> str:
25
  return dt.strftime("%Y-%m-%dT%H:%M:%S")
26
 
27
  def set_time_range(hours=None, days=None):
28
- """依台北時間回傳 (timeFrom, timeTo) 字串"""
29
  now = datetime.now(TAIPEI_TZ)
30
  if hours is not None:
31
  t_from = now - timedelta(hours=hours)
@@ -78,6 +79,8 @@ def parse_ea0015(obj):
78
  for q in quakes:
79
  ei = q.get("EarthquakeInfo") or q.get("earthquakeInfo") or {}
80
  epic = ei.get("Epicenter") or ei.get("epicenter") or {}
 
 
81
  mago = (
82
  ei.get("Magnitude") or ei.get("magnitude")
83
  or ei.get("EarthquakeMagnitude") or ei.get("earthquakeMagnitude")
@@ -89,6 +92,7 @@ def parse_ea0015(obj):
89
  or q.get("OriginTime") or q.get("originTime")
90
  )
91
 
 
92
  lat_raw = (
93
  epic.get("EpicenterLat") or epic.get("epicenterLat")
94
  or epic.get("EpicenterLatitude") or epic.get("epicenterLatitude")
@@ -100,12 +104,14 @@ def parse_ea0015(obj):
100
  or epic.get("Lon") or epic.get("lon")
101
  )
102
 
 
103
  depth_raw = (
104
  ei.get("Depth") or ei.get("depth")
105
  or ei.get("FocalDepth") or ei.get("focalDepth")
106
  or ei.get("FocalDepthKm") or ei.get("focalDepthKm")
107
  )
108
 
 
109
  mag_raw = (
110
  mago.get("MagnitudeValue") or mago.get("magnitudeValue")
111
  or mago.get("Value") or mago.get("value")
@@ -192,7 +198,7 @@ def map_osm_html(df: pd.DataFrame):
192
  center = [d["Lat"].mean(), d["Lon"].mean()]
193
  m = folium.Map(location=center, zoom_start=6, tiles="OpenStreetMap", control_scale=True)
194
 
195
- # 顏色條(深度)— viridis(通用寫法)取代 Viridis_08
196
  depth_min, depth_max = float(d["Depth_km"].min()), float(d["Depth_km"].max())
197
  if depth_min == depth_max:
198
  depth_min, depth_max = max(0.0, depth_min - 1), depth_max + 1
@@ -251,9 +257,11 @@ def query_and_render(time_from, time_to, sort_order):
251
  md = df_to_markdown(df)
252
  map_html = map_osm_html(df)
253
 
254
- csv_bytes = df.to_csv(index=False).encode("utf-8-sig")
255
- # 回傳 (bytes, filename) 讓(舊)Gradio 也能指定檔名
256
- return md, map_html, (csv_bytes, "CWA_E-A0015-001.csv")
 
 
257
  except Exception as e:
258
  return f"錯誤:{e}", "<div style='padding:8px'>(無法繪圖)</div>", None
259
 
 
1
  import os
2
  import re
3
+ import tempfile
4
  from datetime import datetime, timedelta, timezone
5
 
6
  import requests
 
26
  return dt.strftime("%Y-%m-%dT%H:%M:%S")
27
 
28
  def set_time_range(hours=None, days=None):
29
+ """依台北時間回傳 (timeFrom, timeTo) ISO 字串"""
30
  now = datetime.now(TAIPEI_TZ)
31
  if hours is not None:
32
  t_from = now - timedelta(hours=hours)
 
79
  for q in quakes:
80
  ei = q.get("EarthquakeInfo") or q.get("earthquakeInfo") or {}
81
  epic = ei.get("Epicenter") or ei.get("epicenter") or {}
82
+
83
+ # Magnitude 可能在 Magnitude 或 EarthquakeMagnitude
84
  mago = (
85
  ei.get("Magnitude") or ei.get("magnitude")
86
  or ei.get("EarthquakeMagnitude") or ei.get("earthquakeMagnitude")
 
92
  or q.get("OriginTime") or q.get("originTime")
93
  )
94
 
95
+ # 經緯度多種鍵名
96
  lat_raw = (
97
  epic.get("EpicenterLat") or epic.get("epicenterLat")
98
  or epic.get("EpicenterLatitude") or epic.get("epicenterLatitude")
 
104
  or epic.get("Lon") or epic.get("lon")
105
  )
106
 
107
+ # 深度:Depth / FocalDepth / FocalDepthKm / depth / focalDepth...
108
  depth_raw = (
109
  ei.get("Depth") or ei.get("depth")
110
  or ei.get("FocalDepth") or ei.get("focalDepth")
111
  or ei.get("FocalDepthKm") or ei.get("focalDepthKm")
112
  )
113
 
114
+ # 規模:MagnitudeValue / value / Magnitude / magnitude
115
  mag_raw = (
116
  mago.get("MagnitudeValue") or mago.get("magnitudeValue")
117
  or mago.get("Value") or mago.get("value")
 
198
  center = [d["Lat"].mean(), d["Lon"].mean()]
199
  m = folium.Map(location=center, zoom_start=6, tiles="OpenStreetMap", control_scale=True)
200
 
201
+ # 顏色條(深度)— 通用 viridis
202
  depth_min, depth_max = float(d["Depth_km"].min()), float(d["Depth_km"].max())
203
  if depth_min == depth_max:
204
  depth_min, depth_max = max(0.0, depth_min - 1), depth_max + 1
 
257
  md = df_to_markdown(df)
258
  map_html = map_osm_html(df)
259
 
260
+ # ⬇️ 寫檔並回傳「檔案路徑」給 DownloadButton
261
+ tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".csv", prefix="CWA_E-A0015-001_")
262
+ df.to_csv(tmp.name, index=False, encoding="utf-8-sig")
263
+
264
+ return md, map_html, tmp.name
265
  except Exception as e:
266
  return f"錯誤:{e}", "<div style='padding:8px'>(無法繪圖)</div>", None
267