串接 LINE Notify ,免費通知訊息吃到飽


假使你最近剛好要去日本旅遊或出差(比方說參加 11/20 、 11/21 在東京台場日航大酒店舉行的 LINE Developer Day 2019 開發者大會),你可以今天就準備行李,也可以下個禮拜再準備,唯有一件事情是必須時刻關注的,那就是匯率變化。今天( 11/12 )早上台幣兌換日幣的匯率是 0.2819 ,聽說已是不錯的換鈔買點了唷!

身為一名全端工程師,尤其是 LINE 聊天機器人開發者,責無旁貸當然要自己在後端寫一支爬蟲程式(臺灣銀行網站有提供 CSV 格式,週一至週五的交易日,從早上 9 點到下午 4 點,更新週期大約 10-15 分鐘,你要說它是 Open Data 也行,非常好解析),再串接 LINE Notify API 來發通知提醒自己囉(最簡單的方式是用個人開發名義來發行存取權杖,連服務都不必登錄,不少網管工程師都用來當作主機健康狀態的警示通知)。

對於使用者和開發者而言, LINE Notify 的最大優勢,就是可以免費接收 LINE 推播通知,不會被依訊息則數來收費。它是一個官方帳號,加為好友之後,就可以用它來接收你的服務發送過來的推播通知。然而免費的代價就是,操作是在你的服務裡(可能是一個網站或者同樣是聊天機器人 LINE 好友),接收通知卻是在 LINE Notify 裡, UX 可能就沒有同在一個服務裡面來得那麼順暢了。

言歸正傳,如果是個人開發使用(私人)而不登錄為服務(公開)的話,首先第一步是取得存取權杖( Access Token ),必須特別留意的是,已發行過的權杖只會出現一次,所以在點擊「關閉」按鈕之前,務必先把權杖「複製」起來。成功發行權杖之後, LINE Notify 官方帳號會立刻收到一則「已發行個人存取權杖」的訊息通知。

登入 LINE Notify 後台,點擊右上角的帳號名稱,可以選擇發行開發人員權杖的「個人頁面」,或是「管理登錄服務」。
登入 LINE Notify 後台,點擊右上角的帳號名稱,可以選擇發行開發人員權杖的「個人頁面」,或是「管理登錄服務」。

說到通知,大叔我年輕時候看過的網管書籍,管理員會把一些系統監測數據的警示通知(例如 CPU 使用量超過 80% )發送到 B.B.Call 、簡訊或郵件,我之前都用 Slack 的 webhook 來收通知,但是生活中最常開啟的通訊軟體 App 還是 LINE ,所以現在改用 LINE Notify 來收通知好像也滿酷的哦!

另一方面,權杖在發行的時候,就要選擇未來要由誰來接收 LINE Notify 的通知,是身為 LINE Notify 好友的,或是你的好友清單裡面的群組聊天室。如果是後者,必須在發行權杖之前就先建立,例如先拉好一個 12 月玩雪的日本團群組或聊天室,隨後再把 LINE Notify 帳號也拉進去。

LINE Notify 用個人名義發行存取權杖的第一步:點擊「發行權杖」。
LINE Notify 用個人名義發行存取權杖的第一步:點擊「發行權杖」。
LINE Notify 用個人名義發行存取權杖的第二步:設定權杖名稱、選擇接收通知的聊天室。
LINE Notify 用個人名義發行存取權杖的第二步:設定權杖名稱、選擇接收通知的聊天室。
LINE Notify 用個人名義發行存取權杖的第三步:將已發行的權杖複製起來。
LINE Notify 用個人名義發行存取權杖的第三步:將已發行的權杖複製起來。
在 LINE Notify 後台的「個人頁面」的「已連動的服務」中,可以看到剛才發行權杖的服務。
在 LINE Notify 後台的「個人頁面」的「已連動的服務」中,可以看到剛才發行權杖的服務。

現在讓我們以日幣( JPY )當作例子,但是將 GitHub 上的 PHP 程式碼(也就是 jpy_xrt.php ,短短的不到 50 行)稍加修改一下,就可以適用於其他幣別甚至是複選的多重幣別。簡單講解一下程式碼,請在 GitHub 給星,感恩!

  • 第一步(程式碼第 5 行)是取得 CSV 檔案,利用 file_get_contents() 從臺灣銀行網站下載。
  • 第二步(程式碼第 8~14 行)是找到 JPY 日幣資料,利用 foreach 迴圈搭配 explode() 逐行逐列解析, JPY 日幣那行資料的第 2 欄是日幣兌換台幣的現金匯率、第 12 欄是台幣兌換日幣的現金匯率。
  • 第三步(程式碼第 15~30 行)是發送 LINE Notify 推播通知到存取權杖所代表的接收對象,別忘了修改第 23 行要在 HTTP Header 內夾帶的剛才發行的權杖,其中第 18 行使用表情貼來美化通知的文字訊息內容。

如果你有虛擬主機,你可以將每天早上 9:15 (畢竟銀行也要 9 點鐘才會開門營業,然後臺灣銀行的網站也要從差不多 9 點零幾分才會開始有資料)發送 LINE Notify 通知的功能寫在 crontab 裡。而如果你想嘗試無伺服器( Serverless )部署,可以透過 Azure FunctionsAWS LambdaGoogle Cloud Functions 這類的雲端服務,不過我覺得最厲害也最省錢的是使用 Google Apps Script 。我自己目前是使用虛擬主機,底下是 crontab 命令可資參考,其餘部署方式的範例再找時間補上:

15 9 * * * php /path_to_your_dir/jpy_xrt.php

於是我最近這兩週早上都在關注日幣匯率,距離到日本出差只剩下不到一週的時間,拜託再繼續下探 0.27 吧,讓我可以兌換更多日幣呀!