GoogleAppScriptを使用して一定時間毎にFirebaseにレコードを追加する

※この記事は2017年06月07日にqiitaに投稿した内容です。

環境

FirebaseAppライブラリ Ver24

概要

GoogleAppScriptを使用すると時間をトリガーにして、何らかの処理を実行することができます この仕組みを使用して一定時間毎にFirebaseにレコードを追加するテストをしてみました

Firebaseコンソールの設定

https://console.firebase.google.com/

プロジェクトの作成

・「プロジェクトの追加」を押し、プロジェクトを作成する  ・プロジェクト名と国を設定(例:TestGAS, 日本)  ・testgas-afa72となった

データベースのシークレットの確認

・左側メニューの「Overview」の隣の歯車アイコンを押し、プロジェクトの選択を押す ・上部メニューの「サービスアカウント」を押す ・「データベースのシークレット」を押す ・「シークレット」と書かれている下の●●●●●を選択し、表示を押す

GoogleAppScriptの作成

・以下にアクセスし「StartScripting」を押す  https://www.google.com/script/start/  エディタ画面になり、作成できるようになる  「myFunction」という空の関数が表示される ・実行ボタンを押し、プロジェクトの保存、プロジェクト名の入力をする(例:TestFirebase)  GoogleDriveに保存される  実行されるが空関数なので何にもならない

GoogleAppScriptを開く

・エディタ画面で「ファイル」>「開く」を押すと保存先のGoogleDriveが開く ・作成したプロジェクトを選択し、上部右側の●が縦に3つ並んだボタンを押し、「アプリで開く」>「GoogleAppScript」を押す

FirebaseAppライブラリの追加

https://sites.google.com/site/scriptsexamples/new-connectors-to-google-services/firebase

・エディタ画面で「リソース」>「ライブラリ」を押す ・「ライブラリの追加」に「MYeP8ZEEt1ylVDxS7uyg9plDOcoke7-2l」を入力し、「追加」を押す ・「FirebaseApp」と表示されるので「バージョン」を選択する(例:24)

プログラム

このプログラムでは10分毎にレコードを2つ追加しています

function setTrigger()
{
  //十分毎に処理を実行
  var executeFuncName = "createDatas";
  deleteTriggers( executeFuncName );
  ScriptApp.newTrigger( executeFuncName ).timeBased().everyMinutes( 10 ).create();
}

function deleteTriggers( executeFuncName )
{
  //登録されているトリガーを削除
  var triggers = ScriptApp.getProjectTriggers();
  for( var i = 0; i < triggers.length; i++ )
  {
    if ( triggers[ i ].getHandlerFunction() == executeFuncName )
      ScriptApp.deleteTrigger( triggers[ i ] );
  }
}

function createDatas()
{
  var nowDate = new Date();
  var formattedNowDate = Utilities.formatDate( nowDate, "Asia/Tokyo", "yyyyMMddHHmmss");
  Logger.log( formattedNowDate );

  var firebaseUrl = "https://testgas-afa72.firebaseio.com/";
  var secret = "P1155P0zGvA8NMFVVEM25hcHdXNvZWELGTsa8SBx";
  var firebase = FirebaseApp.getDatabaseByUrl( firebaseUrl, secret );

  var userDatas = [];
  for( var i = 0; i < 2; i++ )
  {
    var id = randomId( 8 );
    userDatas.push( 
    {
      id:id,
      score:100+i,
      date:formattedNowDate
    });
  }
  for( var i = 0; i < userDatas.length; i++ )
  {
    var id = userDatas[ i ].id;
    firebase.setData( "users/" + id, userDatas[ i ] );
  }
}

function randomId( length )
{
  //適当にランダムで返す
  var chars = "abcdefghijklmnopqrstuvwxyz0123456789";
  var charLength = chars.length;
  var str = "";
  for( var i = 0; i < length; i++ )
    str += chars[ Math.floor( Math.random() * charLength ) ];
  return str;
}