【GAS】JANコードからCD情報を取得してスプレットシートに書き込む


はじめに

家にあるCDが増えてきたので一覧を作りたいと思ったものの、手入力するのは面倒だったのでJANコードからCD情報を取得してタイトルやアーティスト名などを自動でスプレットシートに書き込めるようにしました。

楽天ブックスCD検索API

CD情報を取得には楽天ブックスCD検索APIを使いました。
参照:https://webservice.rakuten.co.jp/api/bookscdsearch/

スクリプト

const APPLICATION_ID = "アプリIDを記載";
const SEARCH_URL = "https://app.rakuten.co.jp/services/api/BooksCD/Search/20170404";

function writeActiveCellCdAttribute(){
  const sheet = SpreadsheetApp.getActiveSheet(); 
  const activeRange = sheet.getActiveRange();

  if(!activeRange){
    return;
  }

  if(activeRange.getNumRows() != 1 || activeRange.getNumColumns() != 1){
    return;
  }

  const col = activeRange.getColumn();
  const row = activeRange.getRow();
  // JANコード列か判定
  if(col == 2 && !sheet.getRange(row, 1).getValue()){
    const jan = sheet.getRange(row, col).getValue();
    const result = getCdAttribute(jan);
    if(result){
     writeCdAttribute(sheet, row, result);
   }
  }
}

function writeCdAttribute(sheet, row, info){
  var col = 3;
  sheet.getRange(row, col++).setValue(info.title);
  sheet.getRange(row, col++).setValue(info.titleKana);
  sheet.getRange(row, col++).setValue(info.artistName);
  sheet.getRange(row, col++).setValue(info.artistNameKana);
  sheet.getRange(row, col++).setValue(info.label);
  sheet.getRange(row, col++).setValue(info.makerCode);
  sheet.getRange(row, col++).setValue(info.salesDate);
}

function getCdAttribute(jan) {

  const url = SEARCH_URL
      + "?" + "format" + "=" + "json"
      + "&" + "applicationId" + "=" + APPLICATION_ID
      + "&" + "jan" + "=" + jan;

  const response = UrlFetchApp.fetch(url).getContentText();
  const resultJson = JSON.parse(response);

  const item = resultJson.Items[0].Item;
  if (item) {
    const result = {
        title: item.title,
        titleKana: item.titleKana,
        artistName: item.artistName,
        artistNameKana: item.artistNameKana,
        label: item.label,
        makerCode: item.makerCode,
        salesDate: item.salesDate,
    };    
    return result;
  }
  return null;
}

トリガーの設定

スプレットシートに何かしら入力するとwriteActiveCellCdAttributeメソッドが呼ばれるように設定しています。

スプレットシート

まとめ

スマホのカメラでバーコードを読みとる機能は精度が悪くて挫折しました。