これまで、cronがなかったり、指定できるcronの数が制限されているWebサーバーがあると、一体全体どうしようかな、と頭を悩ませていましたが、GAS(Google Apps Script)を使えば解決できるます。

cronで実行したい処理を、外部からアクセスしないような複雑なURLの場所に配置しておきます。そして、GASで以下のようなコードを書きます。

function getURL() {
  var apiURL = "http://example.com/hidden/url/hogehogehoge/api.php";
  var r = UrlFetchApp.fetch(apiURL);
  if (r.getResponseCode() == 200) {
    var body = r.getContentText();
    Logger.log(body);
  }
}

その後、GASのエディタ上部のメニューから「リソース > 現在のプロジェクトのトリガー」をクリック。そして、実行したい日や間隔を指定します。

gas-cron.png

これだけです。APIの実行結果を知る必要がある場合には、実行結果をメールするようにすれば良いでしょう。

メール送信処理を足してものが、以下のプログラムです。

function getURL() {
  var apiURL = "http://oto.chu.jp";
  var body = "(empty)";
  // URLにアクセス
  var r = UrlFetchApp.fetch(apiURL);
  var code = r.getResponseCode();
  if (code == 200) {
    body = r.getContentText();
  }
  // 自身のメルアドを取得
  var email = Session.getActiveUser().getEmail();
  body = "ResponseCode:" + code + "\n" + body;
  // 結果をメールする
  MailApp.sendEmail(email, email, "API Result", body);
}

いやはや、簡単で、びっくりです。