現代人每天都有很多事要做,看看股票點數、追追匯率。每天每天翻網頁也是會累。
那就寫個爬蟲吧,定時偵測並傳LINE通知你,很方便吧。
需要:
LINE帳號
IFTTT帳號
IFEEE服務申請方式如下:
需要設定的地方有+this與 that
+this 觸發的條件
that 執行的目標
也就是 如果 “什麼被觸發了” 就 “執行哪個程式”。
Event Name 是用來辨別服務的,所以是唯一名稱。
命名上不能使用特殊字元、不能用連線符號-、不能空白,只能使用底線_。
完成後按下 Create trigger即可進入that的設定。
接收對象選 透過1對1聊天接收LINE Notify的通知,訊息就看自己需不需要修改了。
Photo URL 只有支援jpg,所以如果要使用圖片請記得要先轉檔。
完成之後按下 Creat action 就可以建立新的服務了。
APP KEY在Setting裡面可以查到,有這個才能從網頁發訊息給LINE。
碼起來的地方就是你的APP KEY,這組號碼可以隨時更換,只需按下 Edit connection即可。
使用php連結IFTTT Webhooks
<?php $TRIGGER_NAME= 'TEST_to_LINE'; $KEY='VDRgFBVSAW354_345gDFG'; $msg_data = array( 'value1' => 'Hello', 'value2' => 'World', 'value3' => '!' ); $URL = "http://maker.ifttt.com/trigger/$TRIGGER_NAME/with/key/$KEY"; $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => json_encode($msg_data), ) ); file_get_contents($URL, false, stream_context_create($options)); ?>
你也可以直接使用LINE 產生personal access token,然後直接呼叫curl執行。
產生personal access tokens
你可以瀏覽「個人頁面」(必須要登入LINE帳號)來產生你自己的personal tokens。
當你按下「發行權杖(Generate token)」按鈕時,會跳出一個設定畫面。在此畫面你可設定你的Token名稱,並指定要接收通知的目標。
請將你的Token取一個容易辨識的名稱。當要決定接收通知的聊天室時,選擇「透過1對1聊天接收LINE Notify的通知」就可以讓LINE Notify官方帳號向你發送訊息;而選擇某個群組則會使LINE Notify官方帳號向該群組發送訊息。
你可以針對每個Token選擇各自接收通知的聊天室。因此,為了要將訊息發送至各個聊天室,你需要針對每個聊天室產生對應的Token。
請注意,當您關掉視窗後下次開啟時系統不會再顯示你所產生的Token。因此你必須自己記錄此Token,否則只能將此Token刪除並重新產生一組新的Token。
發送通知
讓我們來試著用你在前面步驟中所拿到的personal access token發送一則訊息給自己。你可以使用下列的cURL指令來發送一則訊息。將[access_token]字串替換成你的personal access token。
curl -X POST -H 'Authorization: Bearer [access_token]' -F 'message=foobar' https://notify-api.line.me/api/notify
- -X 是指定發出HTTP請求,例如: POST的方法
- -H 是指定發出請求的標頭資訊
- -F 是指定傳送表單資料
最後一個參數便是發送LINE Notify通知時所使用的網址。
也可以使用php curl
$url = 'https://notify-api.line.me/api/notify'; $querydata = http_build_query($val); $httphead = array('Authorization: Bearer '.$key); $curl = curl_init($url); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_POST,true); curl_setopt($curl,CURLOPT_HTTPHEADER,$httphead); curl_setopt($curl,CURLOPT_POSTFIELDS,$querydata); $result = curl_exec($curl); curl_close($curl);
或是 php file_get_contents等方法
$data = array("message" => $message); $data = http_build_query($data, "", "&"); $options = array( 'http'=>array( 'method'=>'POST', 'header'=>"Authorization: Bearer " . LINE_API_TOKEN . "\r\n" . "Content-Type: application/x-www-form-urlencoded\r\n" . "Content-Length: ".strlen($data) . "\r\n" , 'content' => $data ) ); $context = stream_context_create($options); $resultJson = file_get_contents(LINE_API_URL,FALSE,$context ); $resutlArray = json_decode($resultJson,TRUE); if( $resutlArray['status'] != 200) { return false; } return true;
但是在QNAP上面會變成天書,中文支援不了。
使用以下方法在LXC平台(ubuntu+PHP7)可以正確顯示中文。
$url = 'https://notify-api.line.me/api/notify'; $token = $LINE_API_TOKEN; $data = array('message' => $message); $data = http_build_query($data); $header = array( 'Content-Type: application/x-www-form-urlencoded', 'Authorization: Bearer ' . $token, 'Content-Length: ' .strlen($data), ); $ch = curl_init($url); $options = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => $header, CURLOPT_POSTFIELDS => $data, ); curl_setopt_array($ch, $options); $response = curl_exec($ch); curl_close($ch);