ゲームのスコアをスプレッドシートに書き出す

はじめに

ゲームのスコアをスプレッドシートに書き出しといたらあとで振り返りとか成長が見れて面白いんじゃないかなって思ったのでやってみた

仕組みはシンプルでスプレッドシートのGASを使ってAPIを叩いてその結果をシートに書き込むだけ
GASはcronみたいに定期的に呼び出すことが出来るので一度設置したらひたすら書き出してくれる
あとはグラフを作るなりGASでAPI化して自サイトで公開するなり色々出来る LineBotも作れるしGASっょぃ

とりあえず今回はosuのスコアを保存してみる
APIさえあれば適宜取るとこと保存するとこ変えるだけ

ファイルの作成

Google Driveから新しくスプレッドシートを作成する

シートの作成

シート名をゲーム名に変えておく 今回は「osu」
1行目に適当にデータ名を入れとく

GAS

上のメニューの「ツール」→「スクリプトエディタ」を開く
スクリプトを作成する ゲーム名.gsとかで
コードはこんな感じにする

 1function getScore() {
 2  // ユーザーのスコアデータ取得
 3  var baseurl = "https://osu.ppy.sh";
 4  var getuser = "/api/get_user";  
 5  
 6  var req = [
 7    "k=" + "APIキー",
 8    "u=" + "ユーザー名",
 9  ]
10  
11  var url = baseurl + getuser + "?" + req.join("&");
12  var res = UrlFetchApp.fetch(url);
13  var data = JSON.parse(res)[0];
14  
15  // Spreadsheetに書き出し
16  var sheet = SpreadsheetApp.getActive().getSheetByName("osu");
17  var row = sheet.getLastRow();
18
19  // 出力する順番に並べる
20  var output = [
21    new Date(),
22    data["pp_rank"],
23    data["pp_country_rank"],
24    data["pp_raw"],
25    data["level"],
26    data["accuracy"],
27    data["playcount"],
28    data["ranked_score"],
29    data["total_score"],
30    data["count_rank_ss"],
31    data["count_rank_s"],
32    data["count_rank_a"],
33    data["count300"],
34    data["count100"],
35    data["count50"],
36  ]
37
38  sheet.insertRowAfter(row).getRange(row+1, 1, 1, output.length).setValues([output]);
39}

上のメニューの「実行」→「メソッド名」で実行してスプレッドシートに書き出されるか確認する
問題なければ上のメニューの「リソース」→「すべてのトリガー」から「メソッド名」を好きなタイミングで実行されるように設定する
1日1回取れば良いので

  • getScore
  • 時間主導型
  • 日タイマー
  • 午前0時~午前1時

メモ

デバッグ

GASでデバッグしたい時はLogger.log()を使えば良い
実行した後に「表示」→「ログ」から確認出来る

他にもゲーム追加したい

新しくシート追加して新しくゲーム名.gs作ってコードコピペして

1var sheet = SpreadsheetApp.getActive().getSheetByName("osu");

を新しい追加したシートにして終わり お手軽

選択出来ません的なエラー

sheet.insertRowAfterは1から始まらないとダメらしいよ(ハマった
シートが作ったままの空の状態だとエラっちゃうので1行目に適当にデータ名でも並べておく