はじめに
家にある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メソッドが呼ばれるように設定しています。
スプレットシート
まとめ
スマホのカメラでバーコードを読みとる機能は精度が悪くて挫折しました。