Google Workspace割引クーポン無料配布中! 詳しくはこちら

Web APIを取得して『ZAICO』とスプレッドシートを連携した話

  • URLをコピーしました!

こんにちは。

ごすけです。

私が勤めている会社の経理から「製造現場が原料管理で使用しているZAICOというアプリのデータを自動でスプレッドシートに反映してほしい」と相談があり、ググりながら実装しました。

今回は実装したGoogle Apps Script(以降GAS)を使ってWeb APIを取得し、スプレッドシートに反映するコードを紹介します。

タップできる目次
スポンサー

APIとは

APIとはプログラムの機能の一部を別のプログラム上で利用できるように共有する仕組みです。

アプリAを使ってアプリBにデータを反映するリクエスト

アプリAのデータをアプリBに反映するレスポンスの2通りがあります。

これによってCSVやエクセル形式に変換してダウンロード、データをコピペして書式を整えて…etc

といった面倒な作業を自動でできる仕組みが作れるようになります。

APIに関してとてもわかりやすい解説がありましたのでリンクを載せておきます。

あわせて読みたい
Web APIとは?初心者にもわかる基本的な仕組みと活用方法 Web APIはWebを介してソフトウェアの機能を別のソフトウェアやサービスなどと共有する仕組みを指します。Web APIを活用することで、公開されているAPIの機能を自社Webサイ...

ZAICOとは?

会社で使っている原料管理アプリです。

クラウド・アプリどちらでも使用可能です。

無料で30日間使えたので試してみたところ、社内でとても好評だったため導入しました。

前職の大手メーカーで働いていたときは、外部通信とかってセキュリティ大丈夫?とか

それやる意味あんの?と後ろ向きな意見のほうが多く、

嫌味も言われてクソ野郎がと思ったり

ベンチャーはフットワーク軽めなので色々試させてもらえてありがたいです。

(もちろんやることに対しては責任を持って取り組んでます!)

クラウド在庫管理ソフトzaico
zaico|クラウド在庫管理システム(アプリ) zaicoは導入17万社、継続率90%以上でご利用いただいている在庫管理システム(在庫管理アプリ)です。スマートフォンアプリ(iOS・Android)、PC(Mac・Windows)対応し、複...
ZAICO公式サイトHP

話が脱線してしまいましたが

ZAICOもAPI連携が可能です。

ただしこちらを利用するためには月額3,000円 /人のスタンダードプランに入る必要があります。

API機能の認証にはトークン認証が用いられています。

詳細は公式HPにも記載されています。

▼ZAICO APIを使って在庫データを操作する|サポートページより

あわせて読みたい

この機能を使ってスプレッドシートにデータを反映していきます。

コード紹介

それではGASの紹介です。

function myFunction(){

  // xxxxxxxxxxxxにAPIトークンを設定する
  var requestHeaders = {
      'Authorization' : 'Bearer xxxxxxxxxxxxxxxxxxxxxxxxxx'
  }
  // リクエストオプション
  var requestOptions = {
      "method" : "GET",
      "headers" : requestHeaders
  }
  var requestUrl = "https://web.zaico.co.jp/api/v1/inventories/"
  var response = UrlFetchApp.fetch(requestUrl, requestOptions)
  var responseCode = response.getResponseCode()
  var responseText = response.getContentText()

  // JSON変換
  var inventories_data = JSON.parse(responseText)

  var inventoriesArray = [];
  
  for(i=0; i<inventories_data.length; i++){
    inventoriesArray[i]=[
      inventories_data[i]["id"],
      inventories_data[i]["title"],
      inventories_data[i]["quantity"],
      inventories_data[i]["unit"]
    ]
  }

  //スプレッドシートへデータを入力する
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  sheet.getRange(2,1,inventoriesArray.length, inventoriesArray[0].length).setValues(inventoriesArray);

}

今回はスプレッドシートの公開はできません。

会社のZAICOアカウントをさらしてしまうので…。

ご了承ください。

スプレッドシートのGASは1日1回更新するようにタイマーを設定しています。

ポイント解説

ポイントを解説していきます。

通信方法はAPIトークン認証

  // xxxxxxxxxxxxにAPIトークンを設定する
  var requestHeaders = {
      'Authorization' : 'Bearer xxxxxxxxxxxxxxxxxxxxxxxxxx'
  }
  // リクエストオプション
  var requestOptions = {
      "method" : "GET",
      "headers" : requestHeaders
  }
  var requestUrl = "https://web.zaico.co.jp/api/v1/inventories/"
  var response = UrlFetchApp.fetch(requestUrl, requestOptions)
  var responseCode = response.getResponseCode()
  var responseText = response.getContentText()

最初に書いたようにZAICOはAPIトークンを使用しているため、APIトークンを組み合わせて認証ヘッダーを生成する必要があります。

JSON.parseメソッドでJSONデータを解析

  // JSON変換
  var inventories_data = JSON.parse(responseText)

  var inventoriesArray = [];
  
  for(i=0; i<inventories_data.length; i++){
    inventoriesArray[i]=[
      inventories_data[i]["id"],
      inventories_data[i]["title"],
      inventories_data[i]["quantity"],
      inventories_data[i]["unit"]
    ]
  }

JSONとは「JavaScript Object Notation」の略称で、Javascriptでのデータオブジェクトの記述方法をベースにしたデータ形式です。

APIでデータをやり取りする際の形式として、JSONというデータフォーマットを使うケースが多いです。

そのAPIでデータをやり取りする際の形式として、JSONというデータフォーマットを使うケースが多いです。

GASはJSON形式で書かれた文字列を解析出来ないので、JSON.parseメソッドでJSONオブジェクトに変換する必要があります。

詳しいことは以下のサイトに記載されていました。

AutoWorker〜Google Apps Script(G...
GASでJSON形式データを読み込み、処理可能なオブジェクトや配列に変換する方法 | AutoWorker〜Google Apps ... Google Apps Script(GAS)では、APIによるサービスとの通信でJSONデータをやり取りします。 ただ、JSONデータは読み込んだだけでは処理ができません。 G...
AutoWorker〜Google Apps Script(GAS)とSikuliで始める業務改善入門さんのHP

スプレッドシートへの書き出し

最後はスプレッドシートへの書き出しです。

データ数が増えても良いようにlengthを使用してデータの行列数を取得しています。

  //スプレッドシートへデータを入力する
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  sheet.getRange(2,1,inventoriesArray.length, inventoriesArray[0].length).setValues(inventoriesArray);

出来なかったこと|追加項目の出力

今回のGASで出来なかったことがあります。

追加項目の出力です。

ZAICOの単価項目は手動で追加入力します。

データを抜き取った直後のログには「単価」があるのですが

この追加項目をJSON変換するとなくなってしまいます。

JSON変換前
JSON変換後

なかなかスマートには行きませんでした。

無念…。

2次元配列にするためにforループなどにする必要がりそうですが、そもそも出力できていない。

こちらは分かり次第次の記事にしたいと思います。

まとめ

今回は実装したGoogle Apps Script(以降GAS)を使ってWeb APIを取得し、スプレッドシートに反映するコードを紹介しました。

スプレッドシートに反映する記事で自分に該当するものがなかったので読み解くのに苦労しましたが勉強になりました。

ただ追加項目の出力ができなかったのが残念です。

また調べて分かり次第記事にできればと思います。

【小言】

今まで朝ヨーグルトばかり食べていましたが、乳糖不耐症と発覚…

納豆ご飯に切り替えたら快便になりました💩

以上、ごすけでした!!

ごすけ|生産技術者

1989年生まれの30代。妻と娘の3人家族。
大手メーカーからスタートアップ企業に転職。工程設計の仕事の傍ら、Google Workspaceを使って社内DXを推進中。
Google Workspaceの使い方・DX活用事例をブログで発信しています。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
タップできる目次