TOHOシネマズの予約情報をGoogleカレンダーに登録

TOHOシネマズで予約した際、手動で自分のGoogleカレンダーに予約情報を登録している。
そこを自動化したい！
そこで、Gmailに送られた予約情報をGmailに登録する方法があるのではないかと検索。
そしたらGASを使って既にやっている人がいた！

http://tomono.hatenadiary.com/entry/2016/11/19/105229

基本的にこちらを参考にすればできます。
私もしばらくはずっとそれで運用していました。
ただ、最近、メールの内容が少し変わって通知がこなくなった。
そこで2020/01/23時点のメールに対応したバージョンを作りました！

変更点としては、以前は映画の終了時間が書いてなくて、
上映時間を2時間で固定していましたが、
最近のメール内容には記載されているため、
正確な上映時間を登録できる、やったね！

また、私のバージョンはよく一緒に観に行く人にも通知が来るように設定しています。
会員番号と通知先メールアドレスは適宜おきかえてください！

Google App Scriptで作ります。

https://script.google.com/home

ソースコードは以下の通り。

```javascript
function createTohoEventFromGmail(){
  var calendar = CalendarApp.getDefaultCalendar();
  var start = 0;
  var max = 1;
  // メールタイトルを検索
  var threads = GmailApp.search('Notice of Internet Ticket',start,max);
  
  for(var i in threads){
    var thread = threads[i];
    var msgs = thread.getMessages();
    
    for(var j in msgs){
      var msg = msgs[j];
      var body = msg.getPlainBody();
      if (body == "") continue;
      
      // 情報を取得
      var id = body.match(/購入番号\D*(\d{4}).*/)[1];
      var date = body.match(/上映日\D*(\d+\/\d+\/\d+)/)[1];
      var time_from = body.match(/時間　(\d+:\d+)〜(\d+:\d+)/)[1];
      var time_to = body.match(/時間　(\d+:\d+)〜(\d+:\d+)/)[2];
      var theater = body.match(/映画館　(.*)(\n|\r)/)[1];
      var name = body.match(/作品名　(.*)(\n|\r)/)[1];
      var member_ids = body.match(/会員認証済(\d+)/g);
      
      Logger.log("ID: " + id);
      Logger.log("Date: " + date);
      Logger.log("Time: " + time_from + "～" + time_to);
      Logger.log("Theater: " + theater);
      Logger.log("Name: " + name);
      Logger.log("Member ID: " + member_ids);

      var start_date_time = new Date(date+" "+time_from+":00");
      var end_date_time = new Date(date+" "+time_to+":00");

      // 既存予定有無確認
      var registed_events = calendar.getEvents(start_date_time, end_date_time, {search: "["+id+"]"+name});
      if(registed_events.length == 0) {
        // Googleカレンダーへの投稿
        var options = {
          description: body,
          location: theater
        };

        // よく一緒に行く人へ通知する
        if(member_ids.indexOf("会員認証済<会員番号>") >= 0){
          options['guests'] = '<通知を送る人のメールアドレス>',
          options['sendInvites'] = true
        }
        
        var event = calendar.createEvent("["+id+"]"+name,
                                            start_date_time,
                                            end_date_time,
                                            options);
        Logger.log("Calendar Registered: " + event.getId());
      } else {
        Logger.log("Already registered. (count:"+registed_events.length+") ("+registed_events[0].getTitle()+")");
      }
      Logger.log("----------------------------------");
    }
  }
}
```

あとは、トリガーに設定するだけです。
私は1時間に1回実行するように設定しています。


該当のプロジェクトのトリガーを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226827/7be759e1-3377-337e-c325-9f150e067a0b.png)

トリガーを追加をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226827/bbbb8172-ca1c-79c5-f0bc-85a33cda2563.png)

下記のように設定。（時間間隔はお好みで）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226827/edf44825-a3eb-f7bc-d460-81a496ff1bb6.png)

以上、快適な映画ライフを！