【openBD API】書籍データを取得する例|GASを利用してスプレッドシートに出力

openBDプロジェクト(カーリル・版元ドットコム)は、書誌情報を取得できるAPIを提供するサービスとなります。

今回は、そのopenBDのAPIを、Google Apps Script (GAS)で利用して、書籍データをスプレッドシートに出力する簡単な例となります。

また、GASの基本的な利用方法については、以下のリンク先参考にしてみてください。

【openBD API】書籍データを取得する例|GASでスプレッドシートに出力

openBDのAPIでは、ISBN(国際標準図書番号)から書籍データを取得できます。

例では次の流れで、APIで取得したデータから、書籍の「タイトル」「著者」をスプレッドシートに出力します。

  1. A2:A5のセル毎に取得したい書籍データのISBNを入力します
  2. GASのエディタ画面に以下のコードを記述して実行します
  3. 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を実行する方法は、プロジェクト内の「実行」ボタン以外にも、次のような方法もあります。

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

また、多忙によりコメントには返信できない場合があります。

Twitterで返信する場合はこちらから。