【openBD API】書誌情報取得ブックマークレット

 openBDプロジェクト(※1)のAPIが公開されたので、簡単なブックマークレット(※2)をいくつか作ってみました。
 まだこれからAPIが追加されるかもしれませんが、とりあえず(今はISBNからの検索しかできないみたい)。
 APIの仕様を見ると著者詳細や定価情報なども取れそうなのですが、まだ対応できていないのか、なぜか取得できませんでした。

 プログラム(ソース)を公開しますので、興味のある方はご自由に参照して下さい。ソースの改造もご自由にどうぞ。JavaScriptです。ただし、使用に関しての責任は負いかねますのでご了承お願い致します。

※1) openBDプロジェクト : SNSやブログで本を紹介する際などに、特定のネット書店等ではなく、安心して誰でも自由に使える書誌情報・書影を提供しようというプロジェクト。https://openbd.jp/
※2)ブックマークレット: ウェブブラウザのブックマークなどに設置してクリックひとつで起動する簡易プログラム。詳しくはネット検索などして下さい。

I. 作成したブックマークレット一覧
 (A) ISBNから書誌情報を取得し、ポップアップ画面を開いて表示する
 (B) ISBNから書誌情報を取得し、現在のWEB画面内に表示する
 (C) ISBNから書誌情報を取得し、現在のWEB画面内にリスト表示する
 (D) ISBNから書影のURLを取得し、クリップボードにコピーする
        ※そのままメモ帳等にペーストして使う
 (E) ISBNから書誌情報を取得し、CSV形式でクリップボードにコピーする
        ※そのままメモ帳等にペーストしてCSVで保存して使う
        ※区切り文字は、タブ区切り
 (F) ISBNから書誌情報を取得し、CSV形式でファイル保存(ダウンロード)する
        ※区切り文字は、タブ区切り
        ※文字コードは、UTF-8

II. 使い方
 ①登録したブックマークレット(*3)をクリックする
      *3) 登録方法はあとに記載

 ②入力ボックスが開くので、ISBNを入力する
   ※複数のISBNを調べたいときは、カンマ[,]で区切る
    例:978-4-7601-4644-4,978-4892571138,978-4087610345,9784122048621
   ※ISBNのハイフン[-]は、有っても無くてもOK

 ③OKボタンを押下する

※ OSやブラウザーによって正しく動かない可能性はあります(特に④⑤のコピーはWindows & IEでしか動かないかもしれません)。

III. 実行後結果のイメージ(参考)
 (A) ISBNから書誌情報を取得し、ポップアップ画面を開いて表示する

 (B) ISBNから書誌情報を取得し、現在のWEB画面内に表示する
   表示後、もう一度、クリックすると消える

 (C) ISBNから書誌情報を取得し、現在のWEB画面内にリスト表示する
   表示後、もう一度、クリックすると消える

 (D) ISBNから書影のURLを取得し、クリップボードにコピーする
    ※メモ帳にペーストした状態が以下画面

 (E) ISBNから書誌情報を取得し、CSV形式でクリップボードにコピーする
    ※メモ帳にペーストした状態が以下画面

    このCSVファイルを、たとえばExcelにインポートすると以下のようになる

 (F) ISBNから書誌情報を取得し、CSV形式でファイル保存(ダウンロード)する
   ※状態は、(E)のパターンと同じ(直接、ファイルが作成できるという違い)

 IV. ブックマークレットの作り方(登録方法)
   
一応書いておきますが、わかりにくかったらネット検索して下さい。

   ①ブラウザのブックマーク(お気に入りバーなど)に、適当なブックマークを作る(Googleをブックマークするとか)

  ②作成したブックマークを右クリックなどして「プロパティ」を開く

  ③開いたプロパティの「URL」欄にプログラムを書く(この記事の下に載せているプログラムを丸ごとコピーで貼り付ける)。

  ④使いやすいように名前を変えておく(右クリック→名前の変更)。


V. ソース
   
それぞれのプログラムです。下のプログラムを、ブックマークレットにそっくりそのままコピーして下さい。
  改行が入らないように注意して下さい。当然ですが、一文字でも変わると動かなくなります。

 (A) ISBNから書誌情報を取得し、ポップアップ画面を開いて表示する

javascript:(function(){var p=prompt("ISBN%3A","978-4-");if(p.split(",").length>1000){alert("Over! 1000!");return;};var req;if(XMLHttpRequest){req=new XMLHttpRequest();}else{try{req=new ActiveXObject('MSXML2.XMLHTTP.6.0');}catch(e){try{req=new ActiveXObject('MSXML2.XMLHTTP.3.0');}catch(e){try {req=new ActiveXObject('MSXML2.XMLHTTP');}catch(e){alert("ActiveX NG");}}}}req.onreadystatechange=function(){if(req.readyState==4){req.onreadystatechange=null;if(req.status==200){var d=JSON.parse(req.responseText);var t="";var b="<BR>";for(var i=0;i<d.length;i++){if(t!=""){t+=b+"<HR>";}if(d[i]==null){t+=b+"Cover:"+b+"Title:"+b+"Author:"+b+"Publisher:"+b+"Date:"+b+"ISBN:"+p.split(",")[i];}else{var s=d[i].summary;t+=b+"<img src=\""+s.cover+"\" width=\"150\" height=\"auto\" />";t+=b+"Cover:<a href=\""+s.cover+"\" target=\"_blank\"><u>"+s.cover+"</u></a>";t+=b+"Title:"+s.title;t+=b+"Author:"+s.author;t+=b+"Publisher:"+s.publisher;t+=b+"Date:"+s.pubdate;t+=b+"ISBN:"+s.isbn;t+=b+"<a href=\"http://www.amazon.co.jp/exec/obidos/external-search/?keyword="+s.isbn+"\" target=\"_blank\"><u>Amazon</u></a>";t+=b+"<a href=\"https://honto.jp/netstore/search_"+s.isbn+".html?srchf=1&tbty=0\" target=\"_blank\"><u>honto</u></a>";t+=b+"<a href=\"https://www.kinokuniya.co.jp/disp/CSfDispListPage_001.jsp?qsd=true&ptk=01&gtin="+s.isbn+"\" target=\"_blank\"><u>紀伊國屋</u></a>";}}var hs=window.open("", "Newwindow","width=350,height=400,resizable=yes,scrollbars=yes");var hd=hs.document;hd.open();hd.write("<HTML>");hd.write(t);hd.write("</BODY></HTML>");hd.close();}}};req.open("GET","https://api.openbd.jp/v1/get?isbn="+p+"&pretty",true);req.responseType='';req.send();})();

 (B) ISBNから書誌情報を取得し、現在のWEB画面内に表示する

javascript:(function(){var wid="wBDsyo";var wE=document.getElementById(wid);if(wE!=null){document.body.removeChild(wE);}else{var p=prompt("ISBN%3A","978-4-");if(p.split(",").length>1000){alert("Over! 1000!");return;};var req;if(XMLHttpRequest){req=new XMLHttpRequest();}else{try{req=new ActiveXObject('MSXML2.XMLHTTP.6.0');}catch(e){try{req=new ActiveXObject('MSXML2.XMLHTTP.3.0');}catch(e){try {req=new ActiveXObject('MSXML2.XMLHTTP');}catch(e){alert("ActiveX NG");}}}}req.onreadystatechange=function(){if(req.readyState==4){req.onreadystatechange=null;if(req.status==200){var d=JSON.parse(req.responseText);var t="";var b="<BR>";for(var i=0;i<d.length;i++){if(t!=""){t+=b+"<HR>";}if(d[i]==null){t+=b+"Cover:"+b+"Title:"+b+"Author:"+b+"Publisher:"+b+"Date:"+b+"ISBN:"+p.split(",")[i];}else{var s=d[i].summary;t+=b+"<img src=\""+s.cover+"\" width=\"120px\" height=\"auto\" />";t+=b+"Cover:<a href=\""+s.cover+"\" target=\"_blank\"><u>"+s.cover+"</u></a>";t+=b+"Title:"+s.title;t+=b+"Author:"+s.author;t+=b+"Publisher:"+s.publisher;t+=b+"Date:"+s.pubdate;t+=b+"ISBN:"+s.isbn;t+=b+"<a href=\"http://www.amazon.co.jp/exec/obidos/external-search/?keyword="+s.isbn+"\" target=\"_blank\"><u>Amazon</u></a>";t+=b+"<a href=\"https://honto.jp/netstore/search_"+s.isbn+".html?srchf=1&tbty=0\" target=\"_blank\"><u>honto</u></a>";t+=b+"<a href=\"https://www.kinokuniya.co.jp/disp/CSfDispListPage_001.jsp?qsd=true&ptk=01&gtin="+s.isbn+"\" target=\"_blank\"><u>紀伊國屋</u></a>";}}wE=document.createElement("div");wE.setAttribute("id",wid);wE.style.cssText="position:absolute;left:20px;top:10px;width:200px;height:400px;background:#F8ECE0;border:5px #A9BCF5 solid;overflow:scroll;";wE.innerHTML=t;document.body.appendChild(wE);}}}};req.open("GET","https://api.openbd.jp/v1/get?isbn="+p+"&pretty",true);req.responseType='';req.send();})();

 (C) ISBNから書誌情報を取得し、現在のWEB画面内にリスト表示する

javascript:(function(){var wid="wBDsyo";var wE=document.getElementById(wid);if(wE!=null){document.body.removeChild(wE);}else{var p=prompt("ISBN%3A","978-4-");if(p.split(",").length>1000){alert("Over! 1000!");return;};var req;if(XMLHttpRequest){req=new XMLHttpRequest();}else{try{req=new ActiveXObject('MSXML2.XMLHTTP.6.0');}catch(e){try{req=new ActiveXObject('MSXML2.XMLHTTP.3.0');}catch(e){try {req=new ActiveXObject('MSXML2.XMLHTTP');}catch(e){alert("ActiveX NG");}}}}req.onreadystatechange=function(){if(req.readyState==4){req.onreadystatechange=null;if(req.status==200){var d=JSON.parse(req.responseText);var t="";var b="<BR>";for(var i=0;i<d.length;i++){if(i==0){wE=document.createElement("div");wE.setAttribute("id",wid);wE.style.cssText="position:absolute;left:20px;top:10px;overflow:scroll;";wE.innerHTML=t;document.body.appendChild(wE);}if(d[i]==null){t="Cover:"+b+"Title:"+b+"Author:"+b+"Publisher:"+b+"Date:"+b+"ISBN:"+p.split(",")[i];}else{var s=d[i].summary;t="<img src=\""+s.cover+"\" width=\"80px\" height=\"auto\" />";t+=b+"Cover:<a href=\""+s.cover+"\" target=\"_blank\"><u>"+s.cover+"</u></a>";t+=b+"Title:"+s.title;t+=b+"Author:"+s.author;t+=b+"Publisher:"+s.publisher;t+=b+"Date:"+s.pubdate;t+=b+"ISBN:"+s.isbn;t+=b+"<a href=\"http://www.amazon.co.jp/exec/obidos/external-search/?keyword="+s.isbn+"\" target=\"_blank\"><u>Amazon</u></a>";t+=b+"<a href=\"https://honto.jp/netstore/search_"+s.isbn+".html?srchf=1&tbty=0\" target=\"_blank\"><u>honto</u></a>";t+=b+"<a href=\"https://www.kinokuniya.co.jp/disp/CSfDispListPage_001.jsp?qsd=true&ptk=01&gtin="+s.isbn+"\" target=\"_blank\"><u>紀伊國屋</u></a>";}var wEi=document.createElement("div");wEi.style.cssText="width:200px;height:400px;background:#F8ECE0;border:5px #A9BCF5 solid;overflow:scroll;float:left;";wEi.innerHTML=t;wE.appendChild(wEi);}}}}};req.open("GET","https://api.openbd.jp/v1/get?isbn="+p+"&pretty",true);req.responseType='';req.send();})();

 (D) ISBNから書影のURLを取得し、クリップボードにコピーする

javascript:(function(){var p=prompt("ISBN%3A","978-4-");if(p.split(",").length>1000){alert("Over! 1000!");return;};var req;if(XMLHttpRequest){req=new XMLHttpRequest();}else{try{req=new ActiveXObject('MSXML2.XMLHTTP.6.0');}catch(e){try{req=new ActiveXObject('MSXML2.XMLHTTP.3.0');}catch(e){try {req=new ActiveXObject('MSXML2.XMLHTTP');}catch(e){alert("ActiveX NG");}}}}req.onreadystatechange=function(){if (req.readyState==4){req.onreadystatechange=null;if(req.status==200){var d=JSON.parse(req.responseText);var t="";for(var i=0;i<d.length;i++){if(t!=""){t+=", ";};if(d[i]==null){t+=", ";}else{t+=d[i].summary.cover;}}var wf=document.createElement("textarea");wf.textContent=t;var bE = document.getElementsByTagName("body")[0];bE.appendChild(wf);wf.select();document.execCommand('copy');bE.removeChild(wf);alert("Copy OK");}}};req.open("GET",url="https://api.openbd.jp/v1/get?isbn="+p+"&pretty",true);req.responseType='';req.send();})();

 (E) ISBNから書誌情報を取得し、CSV形式でクリップボードにコピーする

javascript:(function(){var p=prompt("ISBN%3A","978-4-");if(p.split(",").length>1000){alert("Over! 1000!");return;};var req;if(XMLHttpRequest){req=new XMLHttpRequest();}else{try{req=new ActiveXObject('MSXML2.XMLHTTP.6.0');}catch(e){try{req=new ActiveXObject('MSXML2.XMLHTTP.3.0');}catch(e){try {req=new ActiveXObject('MSXML2.XMLHTTP');}catch(e){alert("ActiveX NG");}}}}req.onreadystatechange=function(){if(req.readyState==4){req.onreadystatechange=null;if(req.status==200){var d=JSON.parse(req.responseText);var t="";var k="\t";for(var i=0;i<d.length;i++){if(i==0){t+="ISBN"+k+"Title"+k+"Author"+k+"Publisher"+k+"Date"+k+"Cover\n";}else{t+="\n";}if(d[i]==null){t+=p.split(",")[i]+k+k+k+k+k;}else{var s=d[i].summary;t+=s.isbn;t+=k+s.title;t+=k+s.author;t+=k+s.publisher;t+=k+s.pubdate;t+=k+s.cover;}}var wf=document.createElement("textarea");wf.textContent=t;var bE = document.getElementsByTagName("body")[0];bE.appendChild(wf);wf.select();document.execCommand('copy');bE.removeChild(wf);alert("Copy OK");}}};req.open("GET","https://api.openbd.jp/v1/get?isbn="+p+"&pretty",true);req.responseType='';req.send();})();

 (F) ISBNから書誌情報を取得し、CSV形式でファイル保存(ダウンロード)する

javascript:(function(){var p=prompt("ISBN%3A","978-4-");if(p.split(",").length>1000){alert("Over! 1000!");return;};var req;if(XMLHttpRequest){req=new XMLHttpRequest();}else{try{req=new ActiveXObject('MSXML2.XMLHTTP.6.0');}catch(e){try{req=new ActiveXObject('MSXML2.XMLHTTP.3.0');}catch(e){try {req=new ActiveXObject('MSXML2.XMLHTTP');}catch(e){alert("ActiveX NG");}}}}req.onreadystatechange=function(){if(req.readyState==4){req.onreadystatechange=null;if(req.status==200){var d=JSON.parse(req.responseText);var t="";var k="\t";for(var i=0;i<d.length;i++){if(i==0){t+="ISBN"+k+"Title"+k+"Author"+k+"Publisher"+k+"Date"+k+"Cover\n";}else{t+="\n";}if(d[i]==null){t+=p.split(",")[i]+k+k+k+k+k;}else{var s=d[i].summary;t+=s.isbn;t+=k+s.title;t+=k+s.author;t+=k+s.publisher;t+=k+s.pubdate;t+=k+s.cover;}}var FileName='bibinfo.csv';if(window.navigator.msSaveBlob){window.navigator.msSaveBlob(new Blob([t],{type: "text/plain"}),FileName);}else{var a=document.createElement("a");a.href=URL.createObjectURL(new Blob([t],{type:"text/plain"}));a.download=FileName;document.body.appendChild(a);a.click();document.body.removeChild(a);}}}};req.open("GET","https://api.openbd.jp/v1/get?isbn="+p+"&pretty",true);req.responseType='';req.send();})();

サポートしてええねんで(遠慮しないで!)🥺