…生活與工作…個人的生活雜記….

使用IFTTT的Webhooks服務傳送LINE Notify

現代人每天都有很多事要做,看看股票點數、追追匯率。每天每天翻網頁也是會累。

那就寫個爬蟲吧,定時偵測並傳LINE通知你,很方便吧。

需要:

LINE帳號

IFTTT帳號

IFEEE服務申請方式如下:

沒申請過選”Sign up”,有帳號就跳過這一步吧。
選 My Applets
選擇 New Applet
+this 與 that

需要設定的地方有+thisthat

+this 觸發的條件

that 執行的目標

也就是 如果 “什麼被觸發了” 就 “執行哪個程式”。

+this 搜尋 webhooks
按下 Connect連結服務
服務只有一個(用紅圈框起來的)

Event Name 是用來辨別服務的,所以是唯一名稱。

命名上不能使用特殊字元、不能用連線符號-、不能空白,只能使用底線_。

完成後按下 Create trigger即可進入that的設定。

搜尋 LINE服務
一樣只有一個可以選

接收對象選 透過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);