1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-01-23

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

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

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

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

Google App Scriptで作ります。

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

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

トリガーを追加をクリック
image.png

下記のように設定。(時間間隔はお好みで)
image.png

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?