使用 Node-RED 從台灣銀行網站自動抓取日幣匯率,結合 Messaging API 可以做到當日幣匯率低於一個數值時自動發送信息到你的手機。
Step .1
申請 Line Developer 帳號 & Messaging API
網址:https://developers.line.biz/
頁面,點選 Messaging API
申請完成後進到 Products設定提供者名稱(自己取名或公司名稱)
填寫APP基本資料
- App icon
- Line Bot 使用者圖像
- App name
- Line Bot 使用者名稱
- App description
- App 描述
- Category
- App 分類
- Subcategory
- App 子分類
- Privacy Policy URL(非必填)
- 隱私政策
- Terms Of Use URL(非必填)
- 使用條款
閱讀完使用條款之後按下『同意』
確認資料沒問題,勾選 帳號 與 API 的使用條款後,按下 Create 就完成 Line Bot 的初期設定了
Step .2
設定 Messaging API
上一步驟完成後就會看到這樣的畫面,點進去你剛建立好的 App。
進去找到『Messaging settings』的部分
這裡有四個選項:
- Channel access token (long-lived)
- 生成令牌,用來存取 API,他會問你重新生成令牌後,原本的令牌要多久後才會失效,依照你個人需求填寫。
- Use webhooks
- 是否要使用 webhooks,他會把傳送給這個Line Bot的信息轉送到指定網址。
- 設定為:Enabled
- Webhook URL
- webhooks 網址位置,用來接收信息。
- 設定為:https://nodered.com/line_hook
- 將 noderd.com 換成你 Node-RED 的對外名稱,要有 SSL。
- Allow bot to join group chats
- 允許加入聊天群組,可以回復群組信息或推送信息到群組。
- 進去後在 Chet 的下方可以設定是否允許。
Step .3
導入 Node-RED Flow
點選『Copy』複製以下代碼,匯入 Node-RED
[{"id":"f4a1039.77816","type":"tab","label":"Line Bot JPY","disabled":false,"info":""},{"id":"1cdf8c88.5fb8d3","type":"inject","z":"f4a1039.77816","name":"","topic":"","payload":"","payloadType":"date","repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"x":220,"y":120,"wires":[["e523d1ed.87656"]]},{"id":"e523d1ed.87656","type":"http request","z":"f4a1039.77816","name":"","method":"GET","ret":"txt","url":"http://rate.bot.com.tw/xrt?Lang=zh-TW","tls":"","x":410,"y":120,"wires":[["cc67386b.69cc48"]]},{"id":"cc67386b.69cc48","type":"html","z":"f4a1039.77816","name":"filter","property":"payload","outproperty":"payload","tag":".rate-content-cash.text-right.print_hide","ret":"html","as":"single","x":569,"y":120,"wires":[["6f5c428c.c222ec"]]},{"id":"6f5c428c.c222ec","type":"function","z":"f4a1039.77816","name":"Get JPY Currency","func":"var currency = 0.28;\n\nvar data = {\n jpy: Number(msg.payload[15])\n}\n\nvar isLow = flow.get('isLow') || false;\nmsg.payload = data\nif (data.jpy < currency && !isLow) {\n isLow = true;\n flow.set('isLow', isLow);\n return msg;\n}\nif (data.jpy > currency && isLow) {\n isLow = false;\n flow.set('isLow', isLow);\n}","outputs":1,"noerr":0,"x":754,"y":120,"wires":[["ef3dd37a.900db","3d5e1d3d.8d0e92"]]},{"id":"3d5e1d3d.8d0e92","type":"debug","z":"f4a1039.77816","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1004,"y":120,"wires":[]},{"id":"ef3dd37a.900db","type":"function","z":"f4a1039.77816","name":"傳送信息","func":"CHANNEL_ACCESS_TOKEN = 'Messaging API Token';\nUSER_ID = '使用者ID(不是Line ID)';\nmessage = {\n type:'text',\n text:'目前日圓匯率:'+msg.payload.jpy\n};\nheaders = {\n 'Content-Type': 'application/json; charset=UTF-8',\n 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,\n};\npayload = {\n 'to': USER_ID,\n 'messages': [message]\n};\nmsg.headers = headers;\nmsg.payload = payload;\nreturn msg;","outputs":1,"noerr":0,"x":994,"y":170,"wires":[["1a1d9d91.e25812"]]},{"id":"1a1d9d91.e25812","type":"http request","z":"f4a1039.77816","name":"Messaging API 傳送","method":"POST","ret":"txt","url":"https://api.line.me/v2/bot/message/push","tls":"","x":1216,"y":170,"wires":[[]]},{"id":"115048dd.aa6ef7","type":"http in","z":"f4a1039.77816","name":"Messaging API 接收","url":"/line_hook","method":"post","upload":false,"swaggerDoc":"","x":239,"y":203,"wires":[["c3a26b18.b658b8"]]},{"id":"c3a26b18.b658b8","type":"debug","z":"f4a1039.77816","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":434,"y":203,"wires":[]},{"id":"9035f1cb.02bb5","type":"inject","z":"f4a1039.77816","name":"發送測試信息","topic":"","payload":"{\"jpy\":\"測試信息\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":732,"y":202,"wires":[["ef3dd37a.900db"]]}]
匯入後看起來像這樣
自定匯率
進入到『Get JPY Currency』function 節點後
修改第一行的『currency』= 你要的匯率,結尾記得加上『;』
var currency = 匯率;
取得使用者ID
回到 Line Developers 的頁面,在 Messaging API 的設定頁面下可以找到『Bot Informations』,下方有 QR Code 可以加 Line Bot 好友。
之後傳送信息給 Line Bot,在 Node-RED 的 Debug視窗 就可以看到信息資訊:
這時候在event[0].source下方就可以看到 userId,使用 userId 作為『使用者ID』。
如果你想要推送信息到群組的話,將 Line Bot 加入到聊天群組後發一則信息,就會得到 userId & groupId,使用 groupId 作為『使用者ID』。
設定 Token & 使用者ID
要設定的有兩個東西:
- CHANNEL_ACCESS_TOKEN:在前面設定 Messaging API 的時候有一個『Channel access token (long-lived)』按下『Issue』後會生成令牌(Token),請在此填入令牌。
- USER_ID:『使用者ID』
Step .4
最終測試
按下『發送測試信息』你應該會收到像這樣的測試信息:
如果收到了,恭喜你完成了!
如果沒有收到,回去檢查看看是不是哪裡做錯了。
如果有Bug歡迎在下方留言回報。
參考資料
Tags: