LoginSignup
0
1

More than 1 year has passed since last update.

ネクストエンジンAPIにGAS スプレッドシートから接続する

Posted at

ネクストエンジンAPIを叩くシリーズ第3回です。
前回まではEXCEL-VBAを使っていましたが、最近はパソコンさえあれば、OSやMS OFFICEのインストール関係無しに
使用できるGoogleスプレッドシートが良さげかなと思い、今回作ってみました。

今回は商品マスタを登録更新するAPIを叩きます。
前回と同じく、スプレッドシート上に書かれた複数セルを選択し、ボタンを押すことで
それをそのままCSV化して、商品マスタにアップロードしたものと同じ結果を得ます。

まずはこんなスプレッドシートを用意。
B1とB2に有効なアクセストークンとリフレッシュトークンを入れておきます。
スクリーンショット 2021-08-09 174605.png

Uploadは図形描画でなんでもいいので作成。
スクリプトを割り当て。
スクリーンショット 2021-08-09 174759.png

スクリプトの中身です。
メイン処理(neUpload)

function neUpload() {
  let ss = SpreadsheetApp.getActiveSheet()
  //スプレッドシート選択範囲を2次元配列にセット
  let lis = ss.getActiveRange().getDisplayValues();
  //データをCSV型に変換する
  let temp = [];
  for(let i = 0; i < lis.length; i++) {
    temp.push(lis[i].join(','));
  }
  let dt = temp.join('\n');
  let endpoint = 'https://api.next-engine.org/api_v1_master_goods/upload' //エンドポイント
  //データとエンドポイントをAPI実行モジュールに投げる
  let jobj = execApiUpd(dt, endpoint);

  let rs = ss.getRange(3,2)
  //戻ってきたJSONオブジェクトからデータを取り出す
  rs.setValue(jobj['result'])
  var date = new Date();
  //実行日時をセット
  rs.offset(0, 1).setValue(Utilities.formatDate(date, 'JST', 'yyyy-MM-dd HH:mm:ss'))

  //resultが'success'のときだけアップロードキューIDとトークン関連を取得する
  if (jobj['result'] == 'success') {
    rs.offset(1, 0).setValue(jobj['que_id'])
    rs.offset(-2, 0).setValue(jobj['access_token'])
    rs.offset(-2, 1).setValue(jobj['access_token_end_date'])
    rs.offset(-1, 0).setValue(jobj['refresh_token'])
    rs.offset(-1, 1).setValue(jobj['refresh_token_end_date'])
  }
}

API実行モジュール(execApiUpd)
これを切り離したのは、エンドポイントが違う更新系APIでも叩けるようになりそうだなと思ったから。

function execApiUpd(data, endpoint) {
  let spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  let ss = spreadsheet.getActiveSheet()

  ss.getRange(3,2).clear()
  //スプレッドシートからアクセストークン・リフレッシュトークンを取得
  let acto = ss.getRange(1, 2).getValue() //アクセストークン
  let reto = ss.getRange(2, 2).getValue() //リフレッシュトークン

  //HTTPリクエストオプション
  //payloadにパラメータをセットする
  let options = {
    'method' : 'post',
    'contentType': 'application/x-www-form-urlencoded',
    'payload' : 'access_token=' + acto + '&refresh_token=' + reto + '&data_type=csv&data=' + data
  }

  //HTTPリクエスト実行
  let response = UrlFetchApp.fetch(endpoint, options)
  //戻り値をJSONパースして呼び出し元に返す
  let jobj = JSON.parse(response.getContentText())
  return jobj;
}

有効なトークンが入っているとresultにsuccessが入ります。
ネクストエンジンの商品マスタアップロードにキューが入っています。
※CSVアップロードと同様データチェックはNE側で行われるので、正しくアップロードされたかどうかは
必ずNE側で確認してください。

次回は商品データ取得もやります。
WEBAPI応用できたら楽天市場APIとかも触りたいですね。

0
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
0
1