Help us understand the problem. What is going on with this article?

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

目的

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

用意するもの

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

やったこと

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

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

2.データの用意

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

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

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

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

3.コード

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

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

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

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

//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アプリとして公開

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

image.png

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

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

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

image.png

できたー。

一応できたやつはこちら

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away