複数のところで買ってたらわからなくなったよ その2
という事で、一覧を作成することにしました。
BOOKWALKER、kobo、eBookJapan をブラウザからの取得します。
kobo honto dmm SQLiteでの取得は以下を参照。
手順
- ブラウザで、楽天KOBOはライブラリ、BOOKWALKER購入済みのページを表示する。
eBookJapanは本棚のページ。
ログインしていれば、とりあえずはOKです。 - F12を押して、デベロッパーツールを立ち上げる。
- Consoleタブに移動して、対応するコードを貼り付けて実行。ダウンロード.csvとして出力される。
BOOKWALKER用
//BookWalker 一覧作成
// init
let xhr = new XMLHttpRequest()
let domain = 'https://bookwalker.jp/prx/holdBooks-api/hold-book-list/'
let items = []
let csvData = ""
let csvHead = "productId, title, authorName, companyName, imageUrl, viewerUrl, detailUrl, moralTypeCode ,buyTime,isExpired\n"
//ptoductID, タイトル, 作者, 出版社, サムネイル画像, viewerUrl, 販売ページ, moralTypeCode, 購入日, 有効期限
//
let order='?holdBook-series=0&order=0&orderBy=1' // 購入日 新
//let order='?holdBook-series=0&order=0&orderBy=0' // 購入日 古
//let order='?holdBook-series=0&order=2&orderBy=0' // タイトル昇順
//let order='?holdBook-series=0&order=2&orderBy=1' // タイトル降順
//
let page = 1
// function
function getItemsList(page) {
let url = domain + order +'&page=' + page
console.log(url)
xhr.open('GET', url, false)
xhr.send()
}
// request result
xhr.onreadystatechange = function() {
switch ( xhr.readyState ) {
case 0:
console.log('uninitialized')
break
case 1:
console.log('loading...')
break
case 4:
if(xhr.status == 200) {
let data = xhr.responseText
data = JSON.parse(data)
if(data.holdBookList.entities) {
items.push(...data.holdBookList.entities)
}
console.log(data.holdBookList.totalPage)
if(data.holdBookList.totalPage==page) {
break
}
page=page+1
getItemsList(page)
} else {
console.log('Failed')
}
break
}
}
// action
getItemsList(page)
// to csv
items.forEach(item => {
csvData += '"' + item.productId + '","' + item.title + '","' + item.authors[0].authorName + '","' + item.companyName + '","' + item.imageUrl + '","' + item.viewerUrl + '","' + item.detailUrl + '","' + item.moralTypeCode + '","' + item.buyTime + '","' + item.isExpired + '"\n'
// csvData += '"' + item.productId + '","' + item.title + + '","'+ '"\n'
})
//window.location = 'data:text/csv;charset=utf8,' + encodeURIComponent(csvData)
window.location = 'data:text/csv;charset=utf8,' + encodeURIComponent(csvHead + csvData)
kobo用
//kobo一覧作成
// init
let xhr = new XMLHttpRequest()
let domain = 'https://books.rakuten.co.jp'
let deatailUrl = 'https://books.rakuten.co.jp/rk/'
let items = []
let csvData = ""
let csvHead = 'productId,isbn,adultType,title,authorName,companyName,imageUrl,detailUrl,addDate\n'
//ptoductID, ISBN, adultContents, タイトル, 作者, 出版社, サムネイル画像, 販売ページ, 購入日
let sort=4 //
//let sort=2 //更新
//let sort=4 //購入順
//let sort=5 //タイトル順
//let sort=7 //著者名
let pp=1;
// function
function getItemsList(pn) {
let url = domain + '/e-book/kobo/library/web-api?kw=&sort=' + sort + '&pn=' + pn + '&pc=100&sync=0&pv=1'
xhr.open('GET', url, false)
xhr.send()
console.log(xhr.responseText)
}
console.log('START')
// request result
xhr.onreadystatechange = function() {
switch ( xhr.readyState ) {
case 0:
console.log('uninitialized')
break
case 1:
console.log('loading...')
break
case 4:
if(xhr.status == 200) {
console.log('200')
let data = xhr.responseText
data = JSON.parse(data)
console.log(data)
if(data.result.items) {
items.push(...data.result.items)
}
if(data.result.meta.endNum == data.result.meta.sumCount) {
break
}
if(data.result.items== null) {
break
}
pp= pp+1
getItemsList(pp)
} else {
console.log('Failed')
}
break
}
}
// action
getItemsList(pp)
// to csv
items.forEach(item => {
// csvData += '"' + item.id + '","' + item.title+ '","' + item.item.authors + '"\n'
csvData += '"' + item.productId + '","' + item.isbn + '","' + item.adultType + '","' + item.title + '","' + item.contributors + '","' + item.mfrName + '","' + item.imageUrl + '","' + deatailUrl + item.productId + '","' + item.addDateTime + '"\n'
})
// console.log(csvData)
window.location = 'data:text/csv;charset=utf8,' + encodeURIComponent(csvHead + csvData)
//window.location = 'data:text/csv;charset=utf8,' + encodeURIComponent(csvData)
eBookJapan
- ebookjapan/旧ebookjapan共、取得は可能。
購入履歴が無くても、本棚に本があれば、それをもとに取得。
しかし、書籍名しか取れません - 本棚のページを表示。背表紙を表示(背表紙以外だとシリーズとかにまとめられて、すべて取ることができません)
スクロールして最後まで背表紙を見てください。
その後、貼り付け。
//ebookjapan
var aa01 = document.getElementsByClassName('book-item__image');
var out_data="";
for (var i = 0; i<aa01.length; i++) {
var img_src=aa01[i].getAttribute("src");
var title=aa01[i].getAttribute("alt");
out_data += '"' + title + '","' + img_src + '"\n';
}
window.location = 'data:text/csv;charset=utf8,' + encodeURIComponent(out_data);
その他
ちょっとしたTips
一覧で不要と思われる、サムネイル、販売ページ、viewerURLを出力しているのは、Notionに取り込むためです。
Notionで取り込めば、サムネイル付きの一覧が簡単に作成できます。(デザインはあれですが)
そこからクリックで直接本を開いたり、販売ページに飛ぶことができます。
自分でhtmlを作れば、同じようなこともできます。
(ここでは、kindle用はないですが、自分用にはviewerURLをつけたのを出力して、直接読めるようにしています。kindle用は、他の人の作成したのを参考にしてください)
Readeeでインポートすることも可能ですが別の機会に(kobo以外 ISBNなしでもインポート可能)