市販のゲームって購入時に初回特典でシリアルナンバーとか付いてくるじゃないですか
プロダクトコードとか言う場合もあるけど
指定の番号を入力するとアイテムを入手できる的な。あれ作ってみたいと思ってたんですが、最近Google Apps Script(GAS)という言語を使えば、ウディタで使用できるサーバーっぽいものを作れると知りまして。
いきなり高度なものは作れそうにないけど、データサーバー程度ならできそう!って思ったので作ってみましたという話になります。
ウディタ側
ウディタでGET送信する方法は以下で解説されてたので参考にしました。
dystopia39.blog.fc2.com
ちなみにGET送信とPOST送信はダウンロードコマンドの入力に違いがあるだけで、その他、パラメータの書き方などは同じ。
※今回はパラメータとして「mode」と「code」を用意。
GET送信はURLとパラメータの間に「?」を入れ、POST送信は「POST送信」にチェックを入れればおk。
今回はPOST送信を使います。
GASがメインなので、ウディタの話はここまで。
GAS側
GAS側ではパラメータを受け取って、「mode」が"Check"なら「code」に一致するコードの実行IDを返すようにします。
「mode」が"Apply"ならコードを使用済みにして、使用日を記録します。
「mode」が"Check" |
「code」が使用可能か確認、実行ID取得 |
「mode」が"Apply" |
「code」使用許可の申請 |
ウディタ側では実行IDに対応する報酬を得るようにしておきます。
GASで簡易サーバーっぽいものを作成する方法は以下を参考にしました。
qiita.com
qiita.com
さっそくGoogle Spreadsheetを開いて管理シートを作成。
拡張機能→Apps Scriptからエディタを起動、作成したコードは以下の通り。
const COLUMN_FLAG = 2;
const COLUMN_CODE = 3;
const COLUMN_ID = 4;
const COLUMN_DATE = 5;
function doPost(e) {
//e = {parameter:{mode:"Check",code:"test1"}}; //デバッグ用コード[Check]
//e = {parameter:{mode:"Apply",code:"test1"}}; //デバッグ用コード[Apply]
let ret = "none";
if (e == undefined) {
ret = "error:param";
} else {
try {
const mode = e.parameter.mode;
const serial_code = e.parameter.code;
//1番左のシートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
for (let i = 2; i <= sheet.getLastRow(); i++) {
const val = sheet.getRange(i, COLUMN_CODE, 1, 1).getValue();
if (val == serial_code) {
if (sheet.getRange(i, COLUMN_FLAG, 1, 1).getValue()) {
//コードが使用済みなら終了
} else if (mode == "Check") {
//実行IDを取得する
ret = sheet.getRange(i, COLUMN_ID, 1, 1).getValue();
} else if (mode == "Apply") {
//取得済みにする
sheet.getRange(i, COLUMN_FLAG, 1, 1).setValue(true);
//日付を記録
sheet.getRange(i, COLUMN_DATE, 1, 1).setValue(new Date());
ret = "OK";
}
break;
}
}
}
catch (ex) {
ret = "error:exception\n" + ex.message;
}
}
//console.log("出力内容:" + ret); //デバッグ用コード[出力]
let output = ContentService.createTextOutput(ret);
output.setMimeType(ContentService.MimeType.TEXT);
return output;
}
動作確認