日幣匯率( Node-js 爬蟲) - Webduino 實戰智慧插座教學
文章推薦指數: 80 %
日幣匯率( Node-js 爬蟲). 前一篇透過Node-RED 即時地抓取日幣匯率,這邊要繼續介紹Node.js 的做法,輕鬆實現「抓取日幣匯率,並且在指定匯率到達的時候用Webduino 點 ...
日幣匯率(Node-js爬蟲)
前一篇透過Node-RED即時地抓取日幣匯率,這邊要繼續介紹Node.js的做法,輕鬆實現「抓取日幣匯率,並且在指定匯率到達的時候用Webduino點亮燈泡提示,並且也會寄送email通知」。
安裝Node.js
前往https://nodejs.org/en/download/下載安裝,建議直接安裝4.2以上版本。
安裝Node.js套件
因為要透過Node.js來完成抓匯率、寄Email和點燈,以下幾個Node.js套件是一定要安裝的,如果你的Node.js是0.X版本,建議透過nvm直接把Node.js升到4.2以上比較不會有問題。
request:抓取整個網頁的程式碼。
cheerio:後端的jQuery
nodemailer:寄Email
webduino-js:Webduino主程式
webduino-blockly:可直接把WebduinoBlockly產生程式碼貼進來
透過npm安裝完成之後,建立一個index.js的檔案,開頭先輸入下列的程式碼,就可以準備開始了。
require("webduino-js");
require("webduino-blockly");
varrequest=require("request");
varcheerio=require("cheerio");
varnodemailer=require('nodemailer');
抓取日幣匯率
首先我們輸入下面這一段,當我們執行jp這個流程的時候,會透過request抓取整個網頁內容,然後回傳到下一個流程的body裡頭,當我們回到指令列,輸入nodeindex,就會看到整個網頁的原始碼呈現在畫面裡。
varjp=function(){
request({
url:"http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm",
method:"GET"
},function(error,response,body){
if(error||!body){
return;
}else{
//爬完網頁後要做的事情
console.log(body);
}
});
};
接著我們把剛剛的console.log換成成下面的程式碼,也就是透過cheerio來篩選資料,不過當你執行後,會發現target印出的是一個很嚇人的陣列,因為.rate-content-sight.text-right.print_hide的數量多達38個這麼多,而且從陣列中好像又看不出日幣到底排在哪裡(因為都隱藏在children裡面了)。
var$=cheerio.load(body);
vartarget=$(".rate-content-sight.text-right.print_hide");
console.log(target);
不過不用擔心,我們回到剛剛網頁的原始碼,透過瀏覽器的「搜尋」功能,我們就可以知道日幣的位置排在第16位,也就是陣列的15(如果你有看上一篇透過Node-RED抓取日幣,也應該就知道順序是在16了)。
這時候只要把程式稍做修改,就可以看到日幣匯率了。
var$=cheerio.load(body);
vartarget=$(".rate-content-sight.text-right.print_hide");
console.log(target[15].children);
或是你也可以做更精準的寫法,就會只出現匯率數字而已,到這邊基本上我們已經完成了大部分的工作了。
target[15].children[0].data
寄送Email並且透過Webduino點亮燈泡
只有抓到匯率數值還不夠,重要的可以即時的通知我們,首先看到Webduino的部分,把剛剛的程式改成這樣,指定一個變數result為日幣匯率,讓匯率小於我們設定的匯率就開燈,否則就關燈。
var$=cheerio.load(body);
vartarget=$(".rate-content-sight.text-right.print_hide");
varresult=target[15].children[0].data;
varled;
//輸入你的裝置ID
boardReady({
device:deviceId,
multi:true
},function(board){
board.samplingInterval=20;
led=getLed(board,10);//設定LED腳位
if(result<0.28){
led.on();
}else{
led.off();
}
});
可以點亮燈泡之後,接下來就是要寄送Email,這邊可以參考nodemailer套件的寫法,一開始先獲取當下的時間,然後印出時間與日幣的關係,然後就是判斷當匯率小於多少的時候,會寄送Email,程式裡比較特別的是nodemailer.createTransport('smtps://[email protected]:[email protected]');這一段,記得把userID換成要寄件的信箱的帳號,password也換成要寄件的信箱的密碼。
參考:nodemailer套件
vardate=newDate();//獲取當前時刻與日期
varh=date.getHours();
varm=date.getMinutes();
vars=date.getSeconds();
if(h<10){
h='0'+h;
}
if(m<10){
m='0'+m;
}
if(s<10){
s='0'+s;
}
vartime=h+':'+m+':'+s;//獲取當前時間
console.log('現在時間:'+time+',日幣匯率為'+result);//印出時間與匯率
//初始化寄信
vartransporter=nodemailer.createTransport('smtps://[email protected]:[email protected]');
//如果匯率小於我們設定的就寄信
if(result<0.28){
varmailOptions={
from:'"xxxx"
都設定好了以後,執行程式,如果到達我們設定的匯率,就會點亮燈泡,同時寄信通知囉!
當然,如果你想要每隔一段時間擷取一次,可以在最後加個setInterval就可以了,以下面的例子,就是每兩分鐘擷取一次。
(不過如果是有寄信的話,可以再多寫個判斷只寄一次就好,不然可能每兩分鐘就寄一次信囉XD)
jp();
setInterval(jp,120000);
小結
其實不論是用Node-RED或是純粹的Node.js,都可以很輕鬆地抓取一些靜態網頁的資訊(當然如果是一些有查詢或是需要登入的,就比較麻煩了),透過Webduino或其它套件的輔助,我們就可以做到即時通知的效果,例如辦公室的某盞燈突然亮了,大家就趕快去買日幣,或是突然收到一封要買日幣的信,就該去買日幣...等之類的。
總之,當我們可以活動這些應用與技巧,相信就能完成過去事情,並節省許多寶貴的時間與金錢囉!
參考:https://www.npmjs.com/package/nodemailer
聯絡我們
如果對於Webduino產品有興趣,歡迎透過下列方式購買:
個人線上購買:https://store.webduino.io/(支援信用卡、超商取貨付款)
企業&學校採購:來信[email protected]或來電07-3388511。
如果對於這篇教學有任何問題或建議,歡迎透過下列方式聯繫我們:
Email:[email protected](如對於產品有使用上的問題,建議透過Email附上照片或影片聯繫)
Facebook粉絲團:https://www.facebook.com/webduino/
Facebook技術討論社團:https://www.facebook.com/groups/webduino/
Webduino基礎教學
Webduino開發板
馬克一號(介紹)
馬克一號(初始化設定)
WebduinoFly(介紹)
WebduinoFly(初始化設定)
WebduinoSmart(介紹)
WebduinoSmart(初始化設定)
開發板擴充設定
Arduino韌體下載與燒錄
使用WebSocket操控
WebduinoBlockly
認識WebduinoBlockly
WebduinoBlockly基本操作
WebduinoBlockly特殊功能
連動多塊開發板
腳位偵測設定
發光元件
LED
三色LED
LED點矩陣
輸入輸出
繼電器
蜂鳴器
按鈕開關
震動開關
搖桿
紅外線發射接收
環境偵測
超音波偵測
溫濕度偵測
人體紅外線偵測
聲音偵測
光敏電阻
可變電阻
土壤濕度偵測
三軸加速度計
無線感應
RFID
玩具及馬達
伺服馬達
Webduino綜合應用
元件應用
LED(兩顆交互閃爍)
LED(霹靂燈)
LED(語音聲控)
LED(人臉追蹤)
LED(Google表單操控)
三色LED(調色盤)
蜂鳴器(多人協奏)
蜂鳴器(會說話的鬧鐘)
傳感器應用
超音波(改變圖片大小)
超音波(控制LED)
超音波(控制三色LED)
溫濕度(Firebase紀錄)
RFID(控制Youtube)
可變電阻(改變Youtube音量)
聲音偵測(吹點矩陣蠟燭)
玩具改造
Smart自走車(組裝步驟)
Smart自走車(網頁遙控器操控)
Smart自走車(超音波避障)
Smart自走車(溫濕度感測車)
Smart智慧路燈(組裝步驟)
Smart智慧路燈(接線教學)
Smart飛天車(組裝步驟)
Smart飛天車(接線教學)
馬克一號自走車(鍵盤操控)
馬克一號自走車(行動裝置操控)
馬克一號自走車(循跡功能)
WABot機器人(初始化設定)
WABot機器人(基礎操控)
百元玩具車大改造
智慧生活
智慧植栽(水泵)
智慧插座(組裝與操控)
智慧追蹤(伺服馬達+攝影機)
Webduino雲端平台
基本介紹
註冊與登入
Blockly程式積木
Device裝置管理(裝置認證)
Device裝置管理(雲端更新)
兌換券(領取與添加新功能)
發光元件
LCD螢幕
七段顯示器
輸入輸出
MP3播放器
環境偵測
PM2.5細懸浮微粒偵測
顏色感測器
電子羅盤
光度計
溫濕度計
資料庫
Google試算表(設定)
Google試算表(儲存)
Google試算表(讀取)
綜合應用
記錄PM2.5(Google試算表)
玩具改造
Smart智慧小屋(組裝步驟)
Blockly教學
基本功能
變數
流程
文字
數學式
列表
邏輯
迴圈
進階功能
控制台
等待
數值轉換
鍵盤行為
語音聲控
語音朗讀
行動裝置
網頁互動區
文字、點擊、圖片
顏色、按鈕、拉霸
遙控器
Youtube
影像追蹤
創意應用
抽籤並朗讀姓名
大樂透自動選號
隨機組合朗讀語句
語音朗讀逐字稿
小時鐘
語音報時
九九乘法你問我答
BlocklyGames
迷宮
鳥
烏龜
影片
池塘導師
Dr.Smart教學
開發板元件
三色LED
三色LED(色彩輪播)
光敏電阻
光敏電阻(色彩變化)
按鈕開關
按鈕開關(控制顏色)
按鈕開關(控制Youtube)
元件及傳感器
LED
蜂鳴器
震動開關
LED點矩陣
超音波偵測
溫濕度偵測
綜合應用
蜂鳴器(多人協奏)
超音波(倒車雷達)
超音波(控制Youtube)
LED點矩陣(顯示距離)
LED點矩陣(顯示溫度)
按鈕開關(控制蜂鳴器)
實戰智慧插座
基本操控
組裝智慧插座
網頁操控智慧插座
傳感器應用
超音波偵測距離
光線偵測
人體紅外線偵測
聲音偵測
電視機遙控器
按鈕開關
電流急急棒
土壤濕度偵測
RFID感應
進階應用
語音辨識
人臉、顏色追蹤
手機陀螺儀
聊天室(原理)
聊天室(前後端實作)
Google試算表(原理)
Google試算表(前後端實作)
Google地圖(原理)
Google地圖(前後端實作)
Youtube互動
Opendata實作
Node-Red(基礎操作)
Node-Red(Twitter)
Node-Red(E-mail)
日幣匯率(Node-Red爬蟲)
日幣匯率(Node-js爬蟲)
常見問題
Webduino相關
關於Webduino
購買Webduino產品
技術支援與合作
Webduino開發板
關於Webduino開發板
連線相關&初始化設定問題
Web:Bit相關問題
WebduinoSmart相關問題
其它問題
延伸文章資訊
- 1網頁操控智慧插座 - Webduino 基礎教學
JS 的原始碼可以參考:. https://github.com/webduinoio/webduino-js · https://github.com/webduinoio/webduino-...
- 2人臉、顏色追蹤- Webduino 實戰智慧插座教學
要使用tracking.js,首先必須載入相對應的JavaScript,tracking.js 預設可以追蹤顏色。 <script src="https://blockly.webduino.i...
- 3webduinoio/webduino-js - GitHub
The Webduino Javascript Core, for Browser and Node.js - GitHub - webduinoio/webduino-js: ⚙️ The W...
- 4日幣匯率( Node-js 爬蟲) - Webduino 實戰智慧插座教學
日幣匯率( Node-js 爬蟲). 前一篇透過Node-RED 即時地抓取日幣匯率,這邊要繼續介紹Node.js 的做法,輕鬆實現「抓取日幣匯率,並且在指定匯率到達的時候用Webduino 點...
- 5webduino-js - npm
The Webduino Javascript Core, for Browser and Node.js. Installation. Browser. Using bower: $ bowe...