函式庫 / SDK
netbymatt/ws4kp avatar
netbymatt/ws4kp

WeatherStar 4000+:基於 NOAA API 的 90 年代天氣預報介面

基於 Web 的 WeatherStar 4000。相反,該專案旨在創建一個簡單易用的介面,並最大限度地減少配置麻煩。

1,997 個 Star264 個 ForkJavaScriptMIT

秒懂

它是什麼?
一個 JavaScript 專案把 1990 年代天氣頻道的感覺做成網頁應用,提供兩種部署方式、連結分享,並明確警告不能依賴它應對真實天氣緊急情況。
適合誰用?
WeatherStar 4000+ 是一個懷舊專案,並且很清楚自己只是再創作而非復刻。原始碼依賴僅限美國使用的 NOAA API,文件說明了兩種部署路徑,也透過永久連結、自訂鉤子和可替換音樂檔案留下修改空間。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 1 天前。
用什麼語言寫的?
主要是 JavaScript(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

這是再創作,不是完美模擬

WeatherStar 4000+ 是一個基於網頁的專案,目標是帶回 1990 年代天氣頻道本地預報的觀感,包括藍橙配色和相近的播放節奏。README 明確說這不是對當時產生這些畫面的 WeatherStar 4000 硬體的完美模擬,並指向 WS4000 Simulator 以獲得更準確的還原。專案更看重簡單介面和盡可能少的設定麻煩,也改動了部分畫面,因為今天的預報資料比 90 年代更多或更少。作者說做這個專案的動機是懷舊,以及自己本來就喜歡關注天氣尤其是強烈風暴;同時這也是他的創意出口,能讓自己在上班之外保持程式設計手感。專案首頁上還運行著一個線上版本,位址是 https://weatherstar.netbymatt.com。這個專案 2020 年 8 月從 Mike Battaglia 的工作中 fork 出來,README 在致謝裡保留了原作者的貢獻,包括天氣畫面繪製和背景圖形。

把程式碼當作學習材料來寫

儲存庫刻意保持開源、註解完整,並盡可能少用第三方函式庫,方便想學程式設計的人直接讀程式碼。專案使用 api.weather.gov 的 REST API,也用到了 ES6 的箭頭函式、Promise、async/await、類別和 JavaScript 模組;其中 async/await 用於並行載入所有預報資源。程式碼把 API 層和介面層分開,日期處理用了 luxon,還做了 API 請求的實用快取和靜態資源快取。HTML 是手寫的,CSS 用 SASS 編寫,並配有 lint 工具保持程式碼風格一致。Gulp 和 Webpack 負責建置,減少瀏覽器需要載入的指令碼數量。README 把這些選擇說成是展示常見網路技術如何協作,而不是在推薦某套生產環境技術棧。這種寫法對想了解現代前端工具鏈的人也有參考價值。

快速開始和執行方式

快速開始假定你已經安裝了 Node。文件給出的指令是 git clone https://github.com/netbymatt/ws4kp.git,然後 cd ws4kp,再執行 npm install 和 npm start,最後打開 http://localhost:8080。開發模式直接提供單一 JavaScript 模組檔案,方便除錯;生產模式需要先 npm run build,再用 DIST=1 npm start 提供壓縮和合併後的套件。STATIC=1 這個環境變數會關閉 Node 代理快取,所以 STATIC=1 npm start 以不帶快取的方式跑開發伺服器,STATIC=1 DIST=1 npm start 則模擬靜態 Docker 部署。Docker 方面,ghcr.io/netbymatt/ws4kp 用於靜態部署,Dockerfile.server 用於伺服器部署。README 沒有給出這些模式的具體效能資料,也沒有說明實際負載下的回應時間。

伺服器部署與靜態部署的區別

文件說明了兩種部署模式。伺服器部署包含一個帶快取代理的 Node.js 伺服器,有請求去重、快取,以及天氣 API 的可觀測性和日誌;npm start、DIST=1 npm start 和 Dockerfile.server 都走這種模式。靜態部署是純客戶端方案,用 nginx 提供靜態檔案,每個瀏覽器直接向天氣服務發 API 請求,快取也由瀏覽器完成;靜態檔案託管和預設 Dockerfile 使用這種模式。靜態部署執行起來較輕,但所有 API 流量都由每個客戶端自己承擔。當多台客戶端連線同一台本地伺服器時,README 建議用伺服器部署。README 沒有說靜態部署會比伺服器部署更快,只是描述了兩者適用場景不同。

相對原始硬體改了什么

README 列出了幾處有意的改動。雷達畫面現在顯示圖片的時間戳。新增了一個逐小時圖表,展示接下來 36 小時的溫度、雲量和降水機率。還有一個未來 24 小時的逐小時預報,樣式接近旅行城市預報,但預設關閉,因為它和逐小時圖表重複。SPC Outlook 畫面顯示接下來三天出現強天氣的機率,而且只有當位置落在某個高亮風險區域內才會顯示。本地預報和延伸預報的天數都比 90 年代的原始格式更多。原來受版權保護的音樂被換成儲存庫裡附帶的 AI 生成曲目,更多曲目放在配套儲存庫 ws4kp-music 中。海洋預報和原來的 flavors 播放順序都不存在;顯示順序固定,每個畫面可以用核取方塊單獨開關。README 還提到旅行城市預報預設關閉,這樣新使用者先看到的是本地資訊。

永久連結、kiosk 模式和預設參數

選中的顯示項、預報城市和寬螢幕設定會在兩次造訪之間保留。頁面上有 Copy Permalink 或 Get Permalink,可以把所有選中顯示項和位置拼成一個 URL,用於分享或收藏。省略的參數會使用預設值。kiosk 模式核取方塊會把頁面填滿目前視口,但不會啟用瀏覽器的全螢幕或 kiosk 模式,而且進入後頁面內沒有退出方式,重新整理頁面才能回到普通檢視。也可以在永久連結末尾加上 &kiosk=true 直接進入 kiosk。內建 Express 伺服器還支援以 WSQS_ 開頭的環境變數來設定預設查詢參數,例如把 permalink 中的 travel-checkbox=true 改成環境變數 WSQS_travel=true;Docker 啟動時會讀取這些變數並產生一個重新導向 HTML 頁面。設定面板包括播放速度、標準或寬螢幕顯示模式、直立增強(文件標注為進行中)、掃描線、單位和音量。

音樂、自訂和執行注意

背景音樂預設靜音,但如果上次造訪時取消了靜音,應用程式會嘗試自動播放;瀏覽器自動播放策略仍然生效,README 給出了 Chrome 和 Firefox 的相關文件連結,也提供了 mediaPlaying 和 mediaVolume 兩個查詢參數用來預先設定播放狀態和音量。在 Express 伺服器模式下,伺服器會掃描 ./server/music 下的 .mp3 檔案並產生 playlist.json;靜態託管時如果 playlist.json 不存在,就靠目錄掃描,nginx 設定會設定 X-Weatherstar 回應標頭。自訂鉤子放在 server/scripts/custom.js 和 custom.mjs,還有一個範例檔案需要改名啟用。啟用 RSS 文字功能後,底部藍條可以捲動自訂文字,多個字串可以用豎線分隔。README 還收錄了社群連結,涉及 FFmpeg 推流、樹莓派方案和 Channels DVR 整合。作者在問題報告裡提醒不要上報 api.weather.gov 的宕機問題,也說明公制單位轉換不覆蓋所有文字產品;免責聲明說這個站點不應用於危及生命的天氣場景。Android 包裝應用還在封閉測試,沒有 iOS 原生應用,因為作者沒有 Apple 裝置。授權是 MIT,允許在條件下使用、複製、修改和分發,但對支援、保固或適用性沒有任何承諾,只有標準免責聲明。

針對 WeatherStar 4000+,請依 README 的部署命令啟動本地頁面,測試城市輸入、分享連結與 NOAA 回應;它明確不是緊急天氣資訊來源。

編輯結論

WeatherStar 4000+ 是一個懷舊專案,並且很清楚自己只是再創作而非復刻。原始碼依賴僅限美國使用的 NOAA API,文件說明了兩種部署路徑,也透過永久連結、自訂鉤子和可替換音樂檔案留下修改空間。它沒有聲稱自己準確或安全:README 明確說不要在危及生命的天氣中使用,MIT 授權也按原樣提供軟體。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
社群筆記

社群筆記