【openBD API】書籍データを取得する例|GASを利用してスプレッドシートに出力
openBDプロジェクト(カーリル・版元ドットコム)は、書誌情報を取得できるAPIを提供するサービスとなります。
今回は、そのopenBDのAPIを、Google Apps Script (GAS)で利用して、書籍データをスプレッドシートに出力する簡単な例となります。
また、GASの基本的な利用方法については、以下のリンク先参考にしてみてください。
【openBD API】書籍データを取得する例|GASでスプレッドシートに出力
openBDのAPIでは、ISBN(国際標準図書番号)から書籍データを取得できます。
例では次の流れで、APIで取得したデータから、書籍の「タイトル」「著者」をスプレッドシートに出力します。
- A2:A5のセル毎に取得したい書籍データのISBNを入力します
- GASのエディタ画面に以下のコードを記述して実行します
- B2:B5のセル毎に「タイトル」、C2:C5のセル毎に「著者」が出力されます
function myFunction(){
// シートを取得
const sheet = SpreadsheetApp.getActiveSheet();
// A2:A5の範囲を取得
const values = sheet.getRange(2, 1, 4, 1).getValues();
// openBDのAPIから書籍データを取得
const isbns = values.flat().join(',');
const url = 'https://api.openbd.jp/v1/get?isbn=' + isbns;
const res = UrlFetchApp.fetch(url);
const data = JSON.parse(res.getContentText());
// 書籍データから「タイトル」「著者」を取得
let output =[];
for(let i = 0; i < data.length; i++) {
if(data[i]){
const summary = data[i].summary;
output[i] = [summary.title, summary.author];
}else{
output[i] = ['', ''];
}
}
// B2:C5の範囲に「タイトル」「著者」を入力
sheet.getRange(2, 2, output.length, output[0].length).setValues(output);
}
GASの説明
以下、例で利用したGASのコードの簡単な説明となります。
スプレッドシートの範囲を取得
コード5行目からの次の箇所では、シートのA2:A5の範囲に入力したISBNを取得しています。また、取得されるデータは2次元配列となります。
// A2:A5の範囲を取得
const values = sheet.getRange(2, 1, 4, 1).getValues();
範囲を取得する方法の詳細は、以下のリンク先を参考にしてみてください。
openBDのAPIから書籍データを取得
コード8行目からの次の箇所では、HTTP通信を行えるUrlFetchApp.fetchメソッドを利用して、openBDのAPIで書籍データを取得しています。
また、取得するデータはJSONの文字列となるため、JSON.parseメソッドでJavaScriptで操作できるデータ型に変換しています。
// openBDのAPIから書籍データを取得
const isbns = values.flat().join(',');
const url = 'https://api.openbd.jp/v1/get?isbn=' + isbns;
const res = UrlFetchApp.fetch(url);
const data = JSON.parse(res.getContentText());
APIのエンドポイントは https://api.openbd.jp/v1/get となり、クエリパラメータisbnの値に「ISBN」を指定します。複数の書籍データを取得する場合は、「ISBN」をカンマで区切って指定します。
書籍データから「タイトル」「著者」を取得
コード14行目からの次の箇所では、APIで取得した書籍データから「タイトル」「著者」を取り出し、2次元配列のデータにしています。
// 書籍データから「タイトル」「著者」を取得
let output =[];
for(let i = 0; i < data.length; i++) {
if(data[i]){
const summary = data[i].summary;
output[i] = [summary.title, summary.author];
}else{
output[i] = ['', ''];
}
}
スプレッドシートの範囲にデータを入力
コード25行目からの次の箇所では、シートのB2:C5の範囲に「タイトル」「著者」のデータを入力しています。
// B2:C5の範囲に「タイトル」「著者」を入力
sheet.getRange(2, 2, output.length, output[0].length).setValues(output);
範囲にデータを入力する方法の詳細は、以下のリンク先を参考にしてみてください。
スクリプトの実行について
GASを実行する方法は、プロジェクト内の「実行」ボタン以外にも、次のような方法もあります。