【ほぼコピペでOK】外出と同時に電車の運行情報をLINEで通知しよう！ #IFTTT

## 駅に着いたら電車が遅延してた・・・
皆さんにもそんな経験はありませんか？
**通学時や出勤時、家を出た後に電車の遅延を知り途方に暮れる....苦い思い出です。**

事前に知っていれば家で待機するなり、別の手段を使うなりの作戦を立てる事ができますが、駅に着いてから知ると家に戻るのも面倒だし、タクシー使うのは負けた感あるし・・・


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/03704422-5610-02e6-31c3-1bd6d8832db3.png)


また事前に運行情報を調べればいいのですが、朝ギリギリまで寝てたい派の私はそれがなかなかできません・・・そんな同志は多いはず！！

そこで今回は、**家を出るタイミングで電車の運行情報をLINEに通知する機能を作ります！**
みなさんの朝の平和はこの機能が守ります！！



## 作ったものはこちら！
外出と同時にGメールのボックス内に運行情報があればLINEに通知してくれます！

![スクリーンショット 2023-12-03 170325.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/b6a6de0d-fec6-501f-69e6-0deb02434fa5.png)




仕組みについて解説します！
[yahoo運行情報](https://transit.yahoo.co.jp/diainfo)から受信したメールをGoogleAppsScriptで収集して、未読のメールを全てLINEで通知する機能となっております。
通知後はメールボックスのメールを既読に変更して、以降は通知されないようになります。
**構成イメージは以下の通りです。**

![スクリーンショット 2023-12-03 123610.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/25fcc670-5cd5-eb3c-8401-382ae94990c3.png)


## 環境準備
今回利用する環境は以下の通りとなります。
・GoogleAppsScript
・IFTTT
・スマートフォンのIFTTTアプリ

## 作り方紹介！
### ①事前準備
yahoo運行情報から、任意の路線の運行情報をメールで通知するように設定します。

https://transit.yahoo.co.jp/diainfo

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/bc36d029-e826-f362-de2b-63905537dd4b.png)

### ②GoogleAppsScriptの作成

GoogleAppsScriptを作成します。コードは下記の通りです。
LINEのアクセストークンはご自身のIDをご利用ください。

```JavaScript:script.gs
var FindSubject = 'subject:(運行情報) ';


function doPost(e){
 
  //指定した件名のスレッドを検索して取得 
  var myThreads = GmailApp.search(FindSubject, 0, 10); 
  //スレッドからメールを取得し二次元配列に格納
  var myMessages = GmailApp.getMessagesForThreads(myThreads);
  
 
  for(var i in myMessages){
    for(var j in myMessages[i]){
 
      //未読メールのみ抽出   
      if(myMessages[i][j].isUnread()){ 
        
        var strDate = myMessages[i][j].getDate();
        var strSubject = myMessages[i][j].getSubject();
        var strMessage = myMessages[i][j].getPlainBody().slice(0,100);
        console.log(strDate);
        console.log(strSubject);
        console.log(strMessage);
        
        //LINEにメッセージを送信
        sendLine(strDate,strSubject,strMessage);
 
        //処理済みのメッセージを既読に変更
        myMessages[i][j].markRead(); 
      }
    }
  }
}
 
function sendLine(strDate,strSubject,strMessage){
   
  //Lineに送信するためのトークン
  var strToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  var options =
   {
     "method"  : "post",
     "payload" : "message=" + strDate + strSubject + strMessage,
     "headers" : {"Authorization" : "Bearer "+ strToken}
 
   };
 
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}
```

コーディングが完了したらコードをデプロイします。
画面右上から[デプロイ] - [新しいデプロイ]を選択して、アクセスできるユーザーを[全員]に設定してデプロイを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/04998499-a303-b0fd-7035-f414dea832de.png)


デプロイ完了後は、ウェブアプリのURLをコピーして保存します。
以降のIFTTTのアプレット作成時に使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/fc7ee114-aa5a-b05f-4a41-f93be6db1aad.png)


### ③IFTTTの作成
最後にIFTTTのアプレットを作成します。
以下のリンクよりIFTTTにログオンして、画面右上部の[Create]を選択します。

https://ifttt.com/explore

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/02754c4a-e3ea-5ea4-3067-29065e746f2d.png)



#### 実行契機を設定（If This）
● まずは実行契機を設定するため、If Thisの[Add]を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/64be9d43-d485-eb86-f1c2-31d4ec826e26.png)

● サービスの検索から[Location]を選択します。

![スクリーンショット 2023-12-03 114517.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/094b322c-9677-02d2-4513-9b40dcd22265.png)

● トリガーで[You exit an area]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/12d16f2c-8b87-029e-b66c-151133b8dc91.png)

● [Locaton an area]に自宅の場所を設定して、[Create trigger]を選択します
※サンプルのため適当な場所を設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/29ec41b7-f6ad-abd5-48cc-95352cddcbf0.png)

#### 実行内容（Then That）を設定
実行契機の設定が完了したら、次に実行内容を設定していきます。
[Then That]の[Add]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/bbeef501-4a99-7d24-9263-320e28739c7c.png)

● サービスの検索から[Webhook]を選択します。

![スクリーンショット 2023-12-03 115246.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/95759fb1-abf4-aa1e-7d5f-9fe2a8041b46.png)

● トリガーで[Make a web request]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/6db90542-ba6f-478a-7e98-ed9192feeb98.png)

● トリガーの内容を以下の通りに設定します。
URL　　　　　：　GoogleAppsScriptのデプロイで取得したウェブアプリURL
Method　　　 ：　POST
Content Type　：　application/json
※その他は空欄

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/a67af4f8-ae59-a0d4-a0d6-534296317fde.png)

設定が完了したら[Continue]を選択して、IFTTTの作成が完了となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/0d2a5aa9-ecfe-9553-f56d-b256cc052628.png)


### ④動作確認
準備が整ったので動作確認を行います。
スマートフォンを片手にお家の外へ外出！


IFTTTのアプレットが正常動作したかを確認します。
**アプレットが正常に完了しているためOKです！**


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/237b118d-9b52-4f8f-31de-406dc58656b8.png)


**同じ時間にGoogleAppsScriptも正常に動作しているためこちらもOKです！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/6625836b-9fd9-64c7-3e8a-c8abfbcac2ab.png)

**LINEにも通知が届き、送信された2通のメールも既読になっております。**
という事で無事成功しました！！！

![2IMG_E0810.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/8e626a22-ec76-da59-cab0-4b2394215a38.jpeg)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567275/3d25363c-15d8-90d3-8561-8272c5289ba0.png)

## 作ってみた感想！
**想像以上に便利である！！！！**

メールは埋もれがちなので毎回チェックするのも時間がかかりますが、本機能でそんな面倒な時間も解消する事ができました。
また、GoogleAppsScriptのスケジュール機能を使えば、常にメールボックスを確認してLINE通知を送る事もできるため、外出時だけでなく帰宅時などにも使う事もできます！

しかも！ほぼコピペで実装可能であり、
**本機能の構想から実装までの所要時間はわずか20分でした！iPaaS便利過ぎるー！！**

簡単に作れるのでよかったらぜひ真似してみてください！！
**これを使う事で駅で呆然と立ち尽くす人が一人でも経る事を祈っております^^**