スマレジプラットフォームAPIをGASで実行する
こんにちは!株式会社スマレジ、開発部のmasaです!
お盆シーズンですが、コロナのせいで帰省しづらいし、どう過ごそうかな・・・と考える今日この頃ですが、 皆様はどうお過ごしでしょうか?
今日は、前回の続きで正式版のプラットフォームAPIでアプリを実行してみようと思います。
取引一覧取得APIを実行する
ソースコード
import Spreadsheet = GoogleAppsScript.Spreadsheet; export class TransactionService { static execute(spreadsheet: Spreadsheet.Spreadsheet) { const contractId = PropertiesService.getScriptProperties().getProperty("SMAREGI_CONTRACT_ID_DEVELOPMENT"); const accessToken = PropertiesService.getScriptProperties().getProperty("SMAREGI_APP_ACCESS_TOKEN"); let url = 'https://api.smaregi.dev/' + contractId + '/pos/transactions?'; const headers = { 'Authorization' : 'Bearer ' + accessToken }; interface GetRequest { from: string; to: string; } const getParams: GetRequest = { from : TransactionService.getDate("from"), to : TransactionService.getDate("to") }; url += 'transaction_date_time-from' + '=' + getParams.from + "&"; url += 'transaction_date_time-to' + '=' + getParams.to; url = encodeURI(url); // urlfetchappのオプション情報 const options: any = { 'method' : 'get', 'headers' : headers // header情報を追加 }; try { //外部へアクセスさせる let resStr = UrlFetchApp.fetch(url, options).getContentText(); if (resStr.length === 0) { throw new Error("受信データがありませんでした。"); } let resJson = JSON.parse(resStr); Logger.log(resStr); } catch(e) { Logger.log("エラー:" + e); throw new Error(e); } } /** * 時刻を取得 * @param division fromなら現在時刻の1時間前、toなら現在時刻を取得(分と秒は00) * @return string yyyy-mm-dd hh:00:00 */ static getDate (division: string) { let date = new Date(); let format = "YYYY-MM-ddTHH:mm:ss+09:00"; let hour = date.getUTCHours(); if (division === "from") { hour--; } else if (division !== "to") { throw new Error("fromかtoを指定してください"); } format = format.replace(/YYYY/g, "" + date.getFullYear()); format = format.replace(/MM/g, ('0' + (date.getMonth() + 1)).slice(-2)); format = format.replace(/dd/g, ('0' + date.getDate()).slice(-2)); format = format.replace(/HH/g, ('0' + hour).slice(-2)); format = format.replace(/mm/g, ('00')); format = format.replace(/ss/g, ('00')); // : -> %3A format = format.replace(/:/g, ('%3A')); format = format.replace(/\+/g, ('%2B')); return format; }; }
※ ローカル開発のため、webpackを使っています。
やっていること
前回のブログで取得したアクセストークンと契約IDを呼び出し、
UrlFetchApp.fetch(url, options).getContentText();
でリクエストを取得しています。
売り上げ通知アプリの仕様に基づいて、今は実行された時間の1時間前(11時台に実行されたら、10時から11時)の取引を全て取ってくるようにしてあります。 今回はログに出力していますが、次回はこれをセルに出力し、見た目を整えていきます。 (ほとんどの人はこのソースがあれば事足りるかなと思い、取り急ぎで記載しました)
もし実行して、頓珍漢な時間の取り引きが取れる場合は、タイムゾーンの設定を見直してください。
こちらの記事が参考になりました! (特にclaspで開発している人は要注意!appscript.jsonのデフォルトがアメリカ仕様になっているため!)