🦆

【GAS】gBiZ INFO APIで企業情報を取得してみる

2025/03/24に公開
1

なぜ作成したのか

  • 何かと目にする企業の情報を都度調べてフォーマットにまとめるのが面倒なのでAPIで楽をしたい気持ち

技術スタック

参考

  • APIトークンの取得や基本的な使い方についてはこちらのサイトを基に学習

https://qiita.com/jfk20tktk04/items/36586833dddc39b13a6c

やりたいこと

  • Appsheetで法人番号を受け付け、requestシートに番号を追加(本書では割愛)
  • シートへの追加をトリガーに、gBiz INFO APIで法人番号をキーにして企業情報を取得、取得可能な情報をreportシートに追加する
  • reportシートへの追加に成功したらrequestシートの該当行のstatusをsuccessで更新
  • 企業情報が取得できなかった場合はrequestシートの該当行のstatusをfailedで更新
  • Appsheetからreportシートの情報を確認する(本書では割愛)

GAS

// スクリプトプロパティの取得
const SPREADSHEET_ID = PropertiesService.getScriptProperties().getProperty("SPREADSHEET_ID");
const GBIZINFO_API_URL = "https://info.gbiz.go.jp/api/v1/hojin/"; // gBizINFO APIのエンドポイント
const API_KEY = PropertiesService.getScriptProperties().getProperty("GBIZINFO_API_KEY"); // APIキー

/**
 * requestシートにデータが追加されたときのトリガー関数
 */
function onEdit(e) {
  const sheet = e.source.getSheetByName("request");
  const range = e.range;
  const column = range.getColumn();
  const row = range.getRow();
  
  if (column === 1 && row > 1) {  // 1列目(法人番号列)が更新された場合
    const corpNo = sheet.getRange(row, 1).getValue();
    if (corpNo) {
      fetchCompanyInfo(corpNo, row);
    }
  }
}

/**
 * gBizINFO APIを使用して企業情報を取得
 * @param {string} corpNumber 法人番号
 * @param {number} row 行番号 (requestシート)
 */
function fetchCompanyInfo(corpNumber, row) {
  const options = {
    method: 'get',
    // headers: { 'Authorization': `Bearer ${API_KEY}` }
    headers: {
            "Accept": "application/json",
            "X-hojinInfo-api-token": API_KEY
    }
  };

  //const url = `${GBIZINFO_API_URL}?corporateNumber=${corpNumber}`;
  const url = `${GBIZINFO_API_URL}${corpNumber}`;

  try {
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    
    // if (data && data.corporate_number) {
    if (data && data.id) {
      addReportData(data);
      updateRequestStatus(row, 'success');
    } else {
      updateRequestStatus(row, 'failed');
    }
  } catch (error) {
    console.error(`Error fetching company info: ${error}`);
    updateRequestStatus(row, 'failed');
  }
}

/**
 * reportシートにデータを追加
 * @param {Object} data 企業情報データ
 */
function addReportData(data) {
  const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName("report");
  
  const values = [
    data["hojin-infos"][0].corporate_number || '',
    data["hojin-infos"][0].name || '',
    data["hojin-infos"][0].location || '',
    data["hojin-infos"][0].representative_name || '',
    data["hojin-infos"][0].capital_stock || '',
    data["hojin-infos"][0].company_url|| '',
    new Date().toLocaleString()
  ];

  sheet.appendRow(values);
}

/**
 * requestシートのstatusを更新
 * @param {number} row 行番号
 * @param {string} status ステータス ('success' または 'failed')
 */
function updateRequestStatus(row, status) {
  const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName("request");
  sheet.getRange(row, 2).setValue(status);
}

所感

  • APIの返り値のJSONのキー値にハイフンが含まれていることが原因で値が取れだせないことになかなか気づけず、余計な時間を労してしまった

https://web-dev.hatenablog.com/entry/web/js/lang/access-to-json-hyphen-key

GitHubで編集を提案
1

Discussion