1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-09-11

#目的
暇だったので、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は動作保証が無いらしい?ので、あんまり負荷かけすぎると良くないようです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?