GASでDarkSouls3のアイテム名とフレーバーテキストをJSON形式でランダムに返すAPIを作ってみた


目的

暇だったので、GASとWebAPIの復習がてら作ってみた。

用意するもの

  • Googleアカウント(Google Driveの機能を使ってサーバを立てるので)

やったこと

1.まずはGoogle Driveにログイン

ログインするだけなので手順は省きます。

2.データの用意


ログイン後、上の画像の新規ボタンからGoogleスプレッドシートを選択。
テンプレートとかは特に決めず、空白のスプレッドシートにしました。

と、ここで困った...。
こんなこと誰もやってないので、まとまったデータが存在しないのであった...。

しょうがない、作りますか。
というわけでゲームを起動してから、とりあえず目についたアイテムとフレーバーテキストを丸写し。

とりあえずこんなもんでいいでしょう。
列名はシンプルにアイテム名として"itemname"、フレーバーテキストとして"description"としてみました。

3.コード

さて、データは揃ったのであとはサーバ側の話です。
サーバ立てる?いやいや、Google DriveにはGoogle Apps Scriptという超絶便利なものがあってですね。簡易FaaSみたいなもんです。


今度は、上の画像の新規→その他→Google Apps Scriptを選択。
はじめての場合は、新規→その他→アプリの追加から「Google Apps Script」と検索し、「接続」をすると使えるようになります。もちろん無料。


こんな感じになりますが、最初から書いてあるこの関数は不要なので消します。

書いたコードはこんな感じ。


//doGet関数が、GETでリクエストを受けとったときの挙動
function doGet() {
  /*
  getDataとgetRandomに渡している引数は、GoogleスプレッドシートのID
  IDは、スプレッドシートを開いてるときのURL部分にある
  例:https://docs.google.com/spreadsheets/d/ココ/edit#gid=0
  */
  var data = getData('1dKUUM_lHZxaPNcZi0zdnzF1O7Yq9iXL9_GWb7cvUKyk');
  var random = getRandom('1dKUUM_lHZxaPNcZi0zdnzF1O7Yq9iXL9_GWb7cvUKyk');

  return ContentService.createTextOutput(JSON.stringify(data[random], null, 2)).setMimeType(ContentService.MimeType.JSON);
}

//とりあえず、スプレッドシートから一括でデータをとってくる関数
function getData(sheetId) {

  var sheet = SpreadsheetApp.openById(sheetId);
  var rows = sheet.getDataRange().getValues();
  var keys = rows.splice(0, 1)[0];
  return rows.map(function(row) {
    var obj = {};
    row.map(function(item, index) {
      obj[String(keys[index])] = String(item);
    });
    return obj;
  });
}

//シートの末尾までの行数をカウントし、そこまでの乱数を生成して返す関数
function getRandom(sheetId){

  var sheet = SpreadsheetApp.openById(sheetId);

  var columnBVals = sheet.getRange('B:B').getValues();
  var lastRow = columnBVals.filter(String).length;

  random = Math.floor(Math.random() * (lastRow - 1));
  return random;
}

設計もへったくれもありませんが、とりあえずこんな感じでできました。

4.Webアプリとして公開


あとは公開からウェブアプリケーションとして導入をクリック。

出ているURLが、APIのエンドポイントになります。
あとで使うのでコピーしておきます。

コードを変えたときは、「プロジェクトバージョン」をNewにする必要があります。
「次のユーザとしてアプリケーションを実行」は「自分(メールアドレス)」を選択。
「アクセスできるユーザ」は「全員(匿名ユーザを含む)」を選択。
ここも、初めての場合は同意等を求められる場合があるようです。

おわったら、更新ボタンを押して終わりです。

できたー。

一応できたやつはこちら

GASは動作保証が無いらしい?ので、あんまり負荷かけすぎると良くないようです。