1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

電子書籍購入一覧作成(BOOKWALKER kobo ebookjapan)

Last updated at Posted at 2023-11-08

複数のところで買ってたらわからなくなったよ その2

という事で、一覧を作成することにしました。
BOOKWALKER、kobo、eBookJapan をブラウザからの取得します。

kobo honto dmm SQLiteでの取得は以下を参照。

手順

  1. ブラウザで、楽天KOBOはライブラリ、BOOKWALKER購入済みのページを表示する。
    eBookJapanは本棚のページ。
    ログインしていれば、とりあえずはOKです。
  2. F12を押して、デベロッパーツールを立ち上げる。
  3. 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共、取得は可能。
    購入履歴が無くても、本棚に本があれば、それをもとに取得。
    しかし、書籍名しか取れません:disappointed_relieved:
  • 本棚のページを表示。背表紙を表示(背表紙以外だとシリーズとかにまとめられて、すべて取ることができません)
    スクロールして最後まで背表紙を見てください。
    その後、貼り付け。
//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なしでもインポート可能)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?