見逃し防止!GASで作るW杯の放送日程リマインダー

いよいよ2014ワールドカップブラジル大会が迫ってきました。

時差の大きい地域でのワールドカップ開催で毎回困るのが、
明日の朝何時からどこの試合があるんだっけ?ということです。

そこで、最近遊んでいるGoogle Apps Scriptで、試合前日に翌日の放送予定を

メール送信してくれるリマインダ―の仕組みを作ってみました。

 

1.Googleスプレッドシートにデータを準備する

新規にスプレッドシートを作成し、1列目に放送日時、2列目に対戦カード・放送局のデータを入力します。

f:id:tkawanaka:20140528141151p:plain

スプレッドシート名を「放送日程」としました。
放送日程のデータは、

2014年W杯ブラジル大会のNHK、民放の全放送スケジュールが決定 – サッカーキング

より、日付の形式を変えて入力しています。

 

2.スクリプトエディタでコードを書く

上記スプレッドシート上で「ツール」→「スクリプトエディタ」から新規にスクリプトを作成します。エディタ上で下記のようにコードを書きます。

コード.gs
/**
  * 「放送日程」スプレッドシートを開いて、翌日の放送予定をメールで知らせます
  */
function reminder() {
  // シートの取得
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadSheet.getSheets()[0]; // 1枚目のシートにデータがあることを想定
  
  // データの行数をチェックして、日時の部分だけまとめて取得します
  var rowCount = sheet.getLastRow(); 
  var scheduleCols = sheet.getRange(1, 1, rowCount).getValues(); //1列目のrowcountの分だけ
  
  var first = new Date(); // スクリプト実行時の日時
  var last = new Date(first); // スクリプト実行時の翌日の日付取得
  last.setDate(last.getDate() +1);
  
  var games = [];
  
  // 各行をチェックしていく
  for(var i=0; i<rowCount; ++i) {
    var date = new Date(scheduleCols[i][0]);
   // 翌日の試合のみ抽出
    if(first.getTime() <= date.getTime() && last >= date.getTime()) {
      var game = {};
      game.time = sheet.getRange(i+1, 1).getValue();
      game.name = sheet.getRange(i+1, 2).getValue();
      games.push(game);
    }
  }
  
  if(games.length > 0) {
    sendGmail(last, games);
  }
}

function sendGmail(scheduled, games) {
  var titleDate = formatDate(scheduled);
  var email = 'YOUR_EMAIL'; // あなたのメールアドレスをここに
  var title = '【2014年W杯】' + formatDate(scheduled) + ' の放送日程';
  var body = titleDate + '\n';
  for(var i = 0; i < games.length; ++i) {
    var date = new Date(games[i].time);
    var time = formatHours(date.getHours()) + ':' + formatHours(date.getMinutes());
    body += time + ' ' + games[i].name + '\n';
  }
  GmailApp.sendEmail(email, title, body);
}

// 日付のフォーマット
function formatDate(str) {
  
  var date = new Date(str);
  var week = ["日","月","火","水","木","金","土"];
    return [
      date.getFullYear(),
      date.getMonth() + 1,
      date.getDate()
    ].join( '/' )+'(' + week[date.getDay()] + ')';
}

// 時・分のフォーマット
function formatHours(str) {
  return ('0' + str).slice(-2);
}

デバッグボタンか実行ボタンを押して一度実行してください。スプレッドシートの操作やメール送信の権限をこのスクリプトに与えるかどうかのダイアログが出てきますので「承認」を押してください。

 

3.トリガーを設定して、毎日決まった時間にスクリプトを実行させる

エディタ上で「リソース」→「現在のプロジェクト」を選択して、

実行したい関数、イベントの種類やタイミングを選択します。

f:id:tkawanaka:20140528143109p:plain

この場合は、毎日午後7時から8時の間にreminder関数を実行するように設定しています。

 

以上1~3のステップを踏むことで、翌日の放送予定をメールで送るための設定完了です。

f:id:tkawanaka:20140528143758p:plain

無事にスクリプトが実行されれば、指定時間くらいに上記のようなメールが届きます。

ということで、これで見逃し防止になったかも。プログラムにバグがあるかないかは、ワールドカップが実際に始まってから確認します。

 

 Google Apps Scriptの参考リンク

Spreadsheet Service - Google Apps Script — Google Developers

ASCII.jp:Web制作をちょっと便利にするGoogle Apps Script入門