Google Apps Scriptを使うと簡単にWeb APIを作ることが出来ます。
準備
まず、Google Drive上からApps Scriptを作れるようにしましょう。
ドライブの左上の「新規」ボタンを押すとメニューが開くので、「アプリを追加」
アプリの追加画面になりますので、右上の検索ボックスで「app script」と打ちます。
本当は、Apps Scriptなんですが、まあ気にしないでください。
一番上に、「Google Apps Script」が来ますので、「接続」を押します。
そして、ドライブの新規のメニューに「Google Apps Script」が表示されるようになります。
早速作ってみよう
ドライブの新規からGoogle Apps Scriptをクリックすると、「無題のプロジェクト」が開きます。
適当に名前を付けてください。日本語でOKです。
ここでは、西暦から和暦に変換するWeb APIを作ってみましょう。
ちょっと長いです。
var $GENGOLIST = [ {name: '令和', name_short: 'R', timestamp: '2019-05-01'}, {name: '平成', name_short: 'H', timestamp: '1989-01-08'}, {name: '昭和', name_short: 'S', timestamp: '1926-12-25'}, {name: '大正', name_short: 'T', timestamp: '1912-07-30'}, {name: '明治', name_short: 'M', timestamp: '1868-01-25'} ]; function doGet(e) { if (!e.parameter.y || !e.parameter.m || !e.parameter.d) { return createContent( e.parameter.callback, {result: false, response: 'パラメーターがセットされていません。'} ); } var y = e.parameter.y; var m = e.parameter.m; var d = e.parameter.d; var n = new Date(); if (y < 1868 || y > n.getFullYear()) { return createContent( e.parameter.callback, {result: false, response: 'yの範囲が正しくありません(1868〜現在年)'} ); } if (m < 1 || m > 12) { return createContent( e.parameter.callback, {result: false, response: 'mの範囲が正しくありません(1〜12)'} ); } if (d < 1 || d > 31) { return createContent( e.parameter.callback, {result: false, response: 'dの範囲が正しくありません(1〜31)'} ); } var t = new Date(y, m-1, d); var i = 0; var r; var ry = 0; var tt; while(r = $GENGOLIST[i++]) { ra = r.timestamp.split('-'); tt = new Date(ra[0],ra[1]-1,ra[2]); if (t >= tt) { ry = t.getFullYear() - tt.getFullYear() + 1; if (ry == 1) { ry = '元'; } ry = r.name + ry; break; } } if (ry === 0) { return createContent( e.parameter.callback, {result: false, response: '範囲が正しくありません(1968-01-25〜現在)'} ); } return createContent( e.parameter.callback, {result: true, response: ry + '年' + (t.getMonth()+1) + '月' + t.getDate() + '日'} ); } //JSONまたはJSONPの文字列を返します function createContent(callback , obj ) { if(callback) { return ContentService.createTextOutput( callback + '(' + JSON.stringify(obj) + ')' ).setMimeType(ContentService.MimeType.JAVASCRIPT); } else { return ContentService.createTextOutput( JSON.stringify(obj) ).setMimeType(ContentService.MimeType.JSON); } }
doGet(e)
という関数が、Web APIのGETで実装になります。
e.parameter
というオブジェクトがURLのパラメータの値を保持しています。
aaa?y=1988&m=4&d=22
のようにアクセスされたとき、
e.parameter.y // 1998 e.parameter.m // 4 e.parameter.d // 22
という風に入ってきます。
また、JSONPにも対応するために、callback
というコールバック関数用のフィールドも持てるようになっています。
JSONなどの出力を返したいときは、
return ContentService.createTextOutput('JSON文字列').ContentService.MimeType.JSON;
doGet
のreturnをしてやれば、JSONで返します。JSONPの時はMimeTypeがJAVASCRIPTになります。
これだとデバッグがしにくいので、最初はcreateContent
は、
function createContent(callback , obj ) { Logger.log(obj); return ''; }
などとします。
テストを実行する関数を作ってこの関数を実行するようにします。
function myScript() { var e = { parameter: { y: 1988, m: 4, d: 22 } }; doGet(e); }
こうすると、実行後、Ctrl+Enterでログが確認できます。
デプロイ
「公開」メニューから「ウェブアプリケーションとして導入」を選びます。
開いたダイアログで下記のように入力します。
「次のユーザーとしてアプリケーションを実行」は必ず「自分」を選んでください。
「アプリケーションにアクセスできるユーザー」は「全員(匿名ユーザーを含む)」を選んでください。
「次のユーザーとしてアプリケーションを実行」を自分にしないと、「アプリケーションにアクセスできるユーザー」に匿名ユーザーが現れません。ご注意ください。
すると、「現在のウェブ アプリケーションのURL」というのが出ますので、これをコピーしておきます。
実際に利用する
phpですと、
$y = 1988; $m = 4; $d = 22; $json = file_get_contents('[現在のウェブ アプリケーションのURL]?y=' . $y . '&m=' . $m . '&d=' . $d; $data = json_decode($json); print_r($data); // 出力はこのようになります。 // stdClass Object // ( // [result] => 1 // [response] => 昭和63年4月22日 //)
のように使います。[現在のウェブ アプリケーションのURL]
は先ほどコピーしたURLです。
簡単にWeb APIが実装&実行できてしまいます。
お手軽な世の中ですね。