本專案是藉由氣象署所提供的公開資料,透過資料視覺化,展示氣象的長期趨勢,以及使用地圖掌握即時天氣概況。
- 專案架構
- 前端介面:Streamlit(由Python構成)
- 後端架構:FastAPI、SQLAlchemy
- 資料庫:SQLite
- 使用的技術
- 爬蟲:加入反爬蟲機制,例如User-Agent/延遲時間/Session,提高爬取成功率。
- 平行處理:提高爬蟲速度、縮短資料整理時間。
- 防止SQL注入攻擊:避免資料庫遭到惡意攻擊,而使資料庫被清空。
《!!重要!!》本專案是部署在免費版的Render上,每當超過15分鐘無任何人使用時,會進入休眠狀態,喚醒時需等待2~3分鐘,接著即可正常使用。
掃描以下QRcode,或是點擊我開啟網頁
- 📈 歷史變化圖:資料期間為 1990/01/01 ~ 2024/04/19 ,測站明細請參考網址。站種 僅涵蓋署屬有人站,包含現存測站、已撤銷測站,不包含雷達站。觀測項目則有溫度、降雨量、相對濕度、風速等要素。
- ⚡ 即時天氣:目前仍在開發中,資料僅供參考。 提供氣溫和降雨量分布圖,測站則為署屬有人站,不包含雷達站。
- 歷史變化圖
- 即時天氣圖
.
+-- assets # 包含 gif、png 等素材圖檔
+-- backend
| +-- main.py # FastAPI的主程式
| +-- dataprocessing.py # 資料庫操作和資料處理管線
| +-- models.py # 資料表模型
|
|
+-- frontend
| +-- main # 主頁面
| +-- pages
| +-- history.py # 歷史資料頁面
| +-- realtime.py # 即時資料頁面
|
+-- data
| +-- weather.db # 氣象資料庫
|
+-- requirements.txt # 相依套件
+-- example_config.ini # 設定檔範例
+-- README.md # 說明文件
- 硬體最低要求:CPU至少要有4個執行緒
- 套件要求詳見requirements.txt
- 請至中央氣象署填寫資料加入會員
- 登入會員後,進入頁面,點擊「取得授權碼」。
- 將 example_config.ini 中的 your_cwa_authorization ,取代為您的授權碼
- 再把「 example_config.ini 」的檔名,修改為 「 config.ini 」
- 移至 config讀取授權碼 的註解處,將以下程式碼 移除註解:
config = configparser.ConfigParser()
config.read('config.ini')
self.cwa_authorization = config['cwa']['authorization']
- 接著為以下程式 加入註解:
self.cwa_authorization = os.environ.get("CWA_AUTHORIZATION")
- 最後在命令列中下達指令:
python main.py
,即可在本機上操作!
- 進入 Render的 Dashboard頁面,點選右上角 「New」 中的 「Web Service」,接著在 「Public Git repository」 中貼上本專案的網址,然後點選 Continue
- 在 「Name」 填入自訂名稱(同時是網站名稱),還有在 「Start Command」 填入
python main.py
- 接著在 「Environment Variables」 填入環境變數名稱: CWA_AUTHORIZATION ,以及你的 氣象資料開放平台授權碼 (重要)
- 最後點選 「Create Web Service」 ,即可完成部署了!
- SQLAlchemy文檔
- SQLAlchemy中的text對象防注入
- SQLAlchemy執行原生sql防止sql注入
- FastAPI
- Fast API 入門筆記
- FastAPI 如何 Fast ? 框架入門、實例、重構與測試
- 菜鳥教學 - Python map() 函數
- 菜鳥教學 - Python按鍵(key)或value(value)對字典進行排序
- [Python] 使用 functools.partial() 固定函式參數並返回新的 partial 物件
- STEAM 教育學習網 - concurrent.futures 平行任務處理
- STEAM 教育學習網 - 爬取後同時下載多張圖片
- Learn Code With Mike - [Python爬蟲教學]善用多執行緒(Multithreading)提升Python網頁爬蟲的執行效率
- Streamlit • A faster way to build and share data apps
- TEJ API 遇上STREAMLIT App
- Streamlit🔥+ FastAPI⚡️- The ingredients you need for your next Data Science Recipe
- Vega-Lite – A Grammar of Interactive Graphics