JinJia0618/Taiwan_earthquake_tracker
0
🌋 台灣地震追蹤系統 (Taiwan Earthquake Tracker)
本專案是一個全自動化的台灣地震數據追蹤、儲存與視覺化平台。它能每天定時向中華民國交通部中央氣象署 (CWA) 抓取最新地震報告(包含「顯著有感地震」與「小區域有感地震」),自動排入 SQLite 資料庫中防止重複,並於每週產出精美的地震經緯度分布圖,最後自動將代碼、資料庫與網頁同步部署到 Hugging Face Spaces 上。
🌟 核心特色
- 雙資料集自動追蹤:同時整合氣象署
E-A0015-001(顯著有感) 與E-A0016-001(小區域有感) API。 - 防重複寫入 SQLite:主鍵設計與 Robust 解析機制,防範重複匯入與 API 欄位格式異動。
- 歷史地震目錄匯入:支援 CSV 批次資料匯入,無編號資料將以時間與經緯度產生 MD5 雜湊做為唯一鍵,防止重複匯入。
- Matplotlib 地震分布圖:將震央位置繪製於經緯度散點圖,圓點大小代表規模,點顏色代表震源深度(紅色為極淺層,藍色為深層),並標示台灣主要城市作為對照。
- GitHub Actions 每日排程:定時抓取、產圖、提交,並自動同步至 Hugging Face Spaces 網頁。
- Streamlit 互動網頁儀表板:包含近30天數據統計、互動式地圖分布、歷史資料網頁上傳及手動同步控制台。
🛠️ 本機安裝與執行步驟
1. 複製專案並安裝套件
請確保您已安裝 Python 3.8 以上環境,接著執行以下指令:
pip install -r requirements.txt2. 環境變數設定
本專案的 API 金鑰讀取自環境變數,請複製 .env.example 並重新命名為 .env:
cp .env.example .env編輯 .env 並填入您的中央氣象署授權碼:
CWA_API_KEY=您的中央氣象署開放資料授權碼(氣象署授權碼申請網址: [https://opendata.cwa.gov.tw/](https://opendata.cwa.gov.tw/))
3. 命令列 (CLI) 工具使用說明
- 抓取最新地震資料:
python main.py crawl- 產生成最近 7 天的地震分布圖:
python main.py plot --days 7- 批次匯入歷史 CSV 地震目錄:
python main.py import --csv 您的歷史目錄.csv4. 啟動 Streamlit 互動網站
streamlit run app.py啟動後會自動在您的瀏覽器打開 http://localhost:8501。
🤖 GitHub Actions 與 Hugging Face 自動部署
為了讓專案能夠每天自動更新,請在您的 GitHub 倉庫的 Settings > Secrets and variables > Actions 中新增以下兩個 Secret:
CWA_API_KEY:中央氣象署開放資料授權碼。HF_TOKEN:您的 Hugging Face 寫入權限 Token (前往 Hugging Face Settings > Access Tokens 申請,類型需為 Write)。
設定完成後,GitHub Actions 將會在每天台灣時間凌晨 00:10 自動更新資料庫、產圖,並將網站部署到您的 Hugging Face Space 上。
📂 專案架構
台灣地震追蹤/
├── .github/workflows/
│ └── earthquake_cron.yml # GitHub Actions 自動化腳本
├── .agents/
│ └── AGENTS.md # AI 助理維護指南
├── data/
│ └── earthquake.db # SQLite 資料庫 (Git 忽略,動態生成)
├── outputs/
│ └── weekly_map.png # 每週生成的地震分布圖 (動態提交/展示)
├── src/
│ ├── __init__.py
│ ├── database.py # 資料庫邏輯 (初始化與防重寫)
│ ├── crawler.py # API 爬蟲邏輯 (包含 Robust 欄位映射)
│ ├── visualizer.py # 地震分布圖繪製 (Matplotlib 實作)
│ └── importer.py # 歷史 CSV 地震目錄匯入
├── app.py # Streamlit 網頁應用程式主入口
├── main.py # 命令列介面 (CLI) 主入口
├── requirements.txt # 專案相依性套件
└── README.md # 本專案說明文件 / HF Space 設定檔