地震警報批次檔通知到line notify或官方推播方式

最近地震頻傳,但因為工作關係不見得都在電腦旁~於是思考另一種方式。把程式另存成ansi的bat檔案

一、使用line notify

@echo off
:: 檢查是否提供了兩個參數
if "%1"=="" goto usage
if "%2"=="" goto usage

:: 將參數存入變數
set magnitude=%1
set seconds=%2

:: 檢查震度是否大於 2
if %magnitude% LSS 2.0 (
echo 震度小於2.0,不發送通知
goto end
)

:: LINE Notify
set LINE_TOKEN=你的line notify token

:: 準備訊息內容
set "message=地震警報! 震度: %magnitude%, 預計抵達時間: %seconds%秒"

:: 使用 curl 發送 LINE Notify
curl -X POST https://notify-api.line.me/api/notify ^
-H "Authorization: Bearer %LINE_TOKEN%" ^
-F "message=%message%"

if %ERRORLEVEL% EQU 0 (
echo LINE通知發送成功!
) else (
echo LINE通知發送失敗...
echo 錯誤代碼: %ERRORLEVEL%
)
goto end

:usage
echo 使用方式: %0 震度 秒數
echo 範例: %0 6.0 30

:end

二、官方帳號推播給個人

@echo off
:: 檢查是否提供了兩個參數
if "%1"=="" goto usage
if "%2"=="" goto usage

:: 將參數存入變數
set magnitude=%1
set seconds=%2

:: 檢查震度是否大於 2
if %magnitude% LSS 2.0 (
echo 震度小於2.0,不發送通知
goto end
)

:: LINE Messaging API 設定
set CHANNEL_TOKEN=你的chaneel token
set USER_ID=你的id

:: 使用 curl 發送訊息 (使用單引號並直接寫入JSON)
curl -v -X POST https://api.line.me/v2/bot/message/push ^
-H "Content-Type: application/json" ^
-H "Authorization: Bearer %CHANNEL_TOKEN%" ^
-d "{\"to\":\"%USER_ID%\",\"messages\":[{\"type\":\"text\",\"text\":\"地震警報!震度:%magnitude%,預計抵達時間:%seconds%秒\"}]}"

if %ERRORLEVEL% EQU 0 (
echo LINE訊息發送成功!
) else (
echo LINE訊息發送失敗...
echo 錯誤代碼: %ERRORLEVEL%
)

goto end

:usage
echo 使用方式: %0 震度 秒數
echo 範例: %0 6.0 30

:end

Delphi拿Line Notify來當通知

  • 取得個人的TOKEN

進到網站 https://notify-bot.line.me/zh_TW/ ,右上角有一個登入,登入後選個人頁面

往下拉可以看到一個發行存取權杖(TOKEN),按發行權杖功能。按照步驟就可以取得權杖

複製權杖下來備用。

接下來在安裝ipwork的Delphi上,加入ipwhhtp的元件後,呼叫LINE NOTIFY的程式如下:

2021.06.12 更新 Delphi 版本 ipwork試用連結(官網)
https://www.nsoftware.com/download/download.aspx?sku=IPDF-A&type=demo

七行程式就可以了!

  ipwhttp1.Config(‘CodePage=65001’);

  ipwhttp1.Timeout := 10;

  ipwhttp1.ResetHeaders;

  ipwhttp1.OtherHeaders := ‘Authorization: Bearer +’這裡改成剛才的權杖';

  ipwhttp1.ContentType := ‘application/x-www-form-urlencoded;’;

  ipwhttp1.PostData:= ‘message=’+’這裡改成你要通知的內容';

  ipwhttp1.Post(‘https://notify-api.line.me/api/notify’);