eBookJapan用
旧eBookJapanの一覧が欲しくて、作成しました。
現行のeBookJapanにも対応しています。
ブラウザまたは、Pythonを使用して、一覧を作成します。
購入履歴が無くても、本棚に入っていれば作成できます。
旧eBookJapanはこれで作成しています。
複数の取得方法がありますが、お好みで...
- ブラウザの本棚から作成
書名しか取れません。旧eBookJapan向け - ブラウザの購入履歴からの作成
購入履歴がある、現eBookJapan用 - Pythonを使用して作成
旧eBookJapan向け
※旧eBookJapanは購入日は取れません。(購入履歴が無い為)
本棚から作成するのは、現eBookJapanも可
ブラウザからの作成
1.ブラウザで該当するページを見てください。(ログイン済み)
2. F12を押して、デベロッパーツールを立ち上げる。
3. Consoleタブに移動して、対応するコードを貼り付けて実行。ダウンロード.csvとして出力されます。
- ブラウザの本棚から作成
本棚ページを表示
背表紙表示にします(他の表示では、すべて取ることが出来ません)
スクロールして、最後の背表紙まで見てください。
コードを貼り付けて実行。
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);
ブラウザの購入履歴からの作成(現eBookJapan向け)
購入履歴ページを表示。(購入履歴のない旧eBookJapanは不可)
コードを貼り付けて実行。
- その1 購入履歴で作成
- その2 購入履歴から、商品情報を取得して、本の情報を追加
※たくさん購入している時の動作は不明(私自身が現行のeBookjapanではあまり買っていないため)
その1
//eBookJapan
let xhr = new XMLHttpRequest()
//let pHurl='https://ebookjapan.yahoo.co.jp/proxy/apis/user/purchaseHistory?results=20&start='
let csvData = ''
let orderUrl='https://ebookjapan.yahoo.co.jp/proxy/apis/user/purchaseHistory?results='
let thumbnailUrl = 'https://cache2-ebookjapan.akamaized.net/contents/thumb/s/' // + imageFileName
let shopUrl = 'https://ebookjapan.yahoo.co.jp/books/' // + titleId + '/' + publicationCd + '/'
let order_cnt = 0
let start=0
let result_cnt = 50 //一回で取得する購入番号件数
function getOrderList(start) {
let url = orderUrl + result_cnt + '&start=' + start
xhr.open('GET', url, false)
xhr.send()
if (xhr.status === 200) {
let data = xhr.responseText
data = JSON.parse(data)
order_cnt += data.results
data.items.forEach(its => {
// console.log(its.orderId)
its.orderItems.forEach(it =>{
console.log(its.orderId,it.publicationCd,it.publicationName)
## CSV出力順-> 購入番号, productCd, 書籍名, 表紙画像URL, 販売ページURL, 購入日
csvData += '"' + its.orderId + '","' + it.publicationCd+ '","' + it.publicationName + '","' + thumbnailUrl+ it.imageFileName + '","' + shopUrl + it.titleId + '/' + it.publicationCd + '/","' + its.orderDatetime + '"\n'
})
})
if (order_cnt >= data.totalResults) {
return
}
start += result_cnt
console.log('getItem', start)
getOrderList(start)
}
}
getOrderList(start)
window.location = 'data:text/csv;charset=utf8,' + encodeURIComponent(csvData)
その2
let xhr = new XMLHttpRequest()
let xhr2 = new XMLHttpRequest()
let orderUrl='https://ebookjapan.yahoo.co.jp/proxy/apis/user/purchaseHistory?results='
let productUrl = 'https://ebookjapan.yahoo.co.jp/proxy/apis/books/book/sync?publicationCd='
let csvData = ''
let thumbnailUrl = 'https://cache2-ebookjapan.akamaized.net/contents/thumb/s/' // + imageFileName
let shopUrl = 'https://ebookjapan.yahoo.co.jp/books/' // + titleId + '/' + publicationCd + '/'
let order_cnt = 0
let start=0
let result_cnt = 50 //一回で取得する購入番号件数
function getProduct(productCd) {
let purl = productUrl + productCd
xhr2.open('GET', purl, false)
xhr2.send()
if (xhr2.status === 200) {
let pdata = xhr2.responseText
pdata = JSON.parse(pdata)
return pdata
}
}
function getOrderList(start) {
let url = orderUrl + result_cnt + '&start=' + start
xhr.open('GET', url, false)
xhr.send()
if (xhr.status === 200) {
let data = xhr.responseText
data = JSON.parse(data)
order_cnt += data.results
data.items.forEach(its => {
// console.log(its.orderId)
its.orderItems.forEach(it =>{
pdata=getProduct(it.publicationCd)
if (pdata.publication != null){
bookName = pdata.publication.name //書籍名
author = pdata.publication.author //作者
saleDate = pdata.publication.saleDate //発売日
summary= pdata.publication.summary //概要
category= pdata.publication.unificationMiddleGenre.name //ジャンル
publisher =pdata.publication.publisher.name //出版社
bookCd = pdata.publication.goods.bookCd //bookCd
viewUrl = 'https://ebookjapan.yahoo.co.jp/viewer/purchased/' + bookCd //ViewUrl
}else{
//商品コード(販売ページ)がない場合 viewUrlはそれっぽいのを 正解かどうかは不明
bookName = '****'; author = '****'; saleDate = ''; summary= ''; category= '';publisher = '****'; bookCd = ''
viewUrl = 'https://ebookjapan.yahoo.co.jp/viewer/purchased/' + 'B0016' + it.publicationCd.substring(3)
if (it.publicationCd.substring(0,4) == 'A000')
viewUrl = 'https://ebookjapan.yahoo.co.jp/viewer/purchased/' + 'B00060' + it.publicationCd.substring(4)
if (it.publicationCd.substring(0,4) == 'A001'){
viewUrl = 'https://ebookjapan.yahoo.co.jp/viewer/purchased/' + 'B00160' + it.publicationCd.substring(4)
}
}
if (it.publicationName != ''){
bookName = it.publicationName
}
if (it.titleId == ''){
hanbaiUrl =shopUrl + pdata.publication.title.titleId + '/' + it.publicationCd + '/'
}else{
hanbaiUrl =shopUrl + it.titleId + '/' + it.publicationCd + '/'
}
// console.log(it.imageFileName)
if (it.imageFileName == ''){
gazouUrl =thumbnailUrl +pdata.publication.goods.imageFileName
}else{
gazouUrl =thumbnailUrl + it.imageFileName
}
// console.log(its.orderId,it.publicationCd,it.publicationName,hoge.publication.author)
console.log(its.orderId,it.publicationCd,it.publicationName,author)
// CSV出力順-> 購入番号, productCd, 書籍名, 作者, 出版社, 表紙画像URL, 販売ページURL, ビューURL, 概要, ジャンル, 発売日, 購入日
csvData += '"' +its.orderId + '","' +it.publicationCd + '","' +bookName + '","' +author + '","' + publisher + '","' +gazouUrl + '","' +hanbaiUrl + '","' +viewUrl + '","' +summary + '","' +category + '","' +saleDate + '","' + its.orderDatetime + '"\n'
})
})
if (order_cnt >= data.totalResults) {
return
}
start += result_cnt
console.log('getItem', start)
getOrderList(start)
}
}
getOrderList(start)
window.location = 'data:text/csv;charset=utf8,' + encodeURIComponent(csvData)
Pythonを使用して作成
eBookJapan PCアプリ、Pythonを利用して作成します。
Pythonが動く環境(必要なライブラリ含む)を用意してください。
手順
-
eBookJapan PCアプリを起動。
本棚の表示 (表示方法->背表紙 まとめ表示はオフ)
スクロールして、すべての背表紙を見る。
マイページー>その他 書籍フォルダを確認(フォルダ名を引数として使用) -
Pythonで実行。
CSVファイルとビューワー用htmlが出力されます。
※商品コードから該当するページを取得するので、ネットに繋がるようにしてください。
py ebjget.py "書籍フォルダ名"
#
# coding: [encoding]
#
import sys
import os
import requests
import json
import csv
import glob
#B00160xxxxxx
# A001xxxxxx
#B00060xxxxxx
# A000xxxxxx
#B00162xxxxxx
# A002xxxxxx
#B00163xxxxxx
# A003xxxxxx
url0 = "https://ebookjapan.yahoo.co.jp/proxy/apis/books/book/sync?publicationCd="
out_file="ebj0000.csv" #CSV めんどくさいから固定
out_html="ebj0000.html" #html 直リンViwer
#########################################################################################
# START
args=sys.argv
if (len(args)) == 2:
in_path=args[1]
else:
print('ERROR')
exit()
#書籍フォルダ
path=in_path + r"\Books\thumb.trunk\*.s.jpg"
items = glob.glob(path)
cnt=0
f = open(out_file, mode='w',encoding='UTF-8', newline='')
f2 = open(out_html, mode='w',encoding='UTF-8')
writer = csv.writer(f,quoting=csv.QUOTE_NONNUMERIC)
for id in items:
bCode=os.path.basename(id)[0:12]
aCode= "A00" + bCode[5:] #B00160以外 B00?6xxxxxxx ->A00xxxxxxx
if (bCode[0:6] == "B00160"): #B00160xxxxxx ->A001xxxxxx
aCode= "A001" + bCode[6:]
cnt=cnt+1
url = url0 + aCode
response = requests.get(url)
jsonData = response.json()
productCd = aCode +"**" ;bookName = "********"; #販売ページがない本
author = "";saleDate = "";summary= "";category= "";publisher = ""
thumbnail = "";titleId = "";shopUrl = "";thumbnailUrl ="";viewUrl = ""
viewUrl = "https://ebookjapan.yahoo.co.jp/viewer/purchased/" + bCode
if ('publication' in jsonData):
if (jsonData["publication"] is not None): #キーにデータあり(販売ページあり)
productCd = jsonData["publication"]["publicationCd"] #productCd
bookName = jsonData["publication"]["name"] #書籍名
author = jsonData["publication"]["author"] #作者
saleDate = jsonData["publication"]["saleDate"] #発売日
summary= jsonData["publication"]["summary"] #概要
if ("unificationMiddleGenre" in jsonData["publication"]):
category= jsonData["publication"]["unificationMiddleGenre"]["name"] #ジャンル
else:
category= jsonData["publication"]["unificationTopGenre"]["name"] #ジャンル 親
publisher =jsonData["publication"]["publisher"]["name"] #出版社
thumbnail = jsonData["publication"]["goods"]["imageFileName"] #表紙画像
titleId = jsonData["publication"]["title"]["titleId"] #
shopUrl = "https://ebookjapan.yahoo.co.jp/books/" + titleId + "/" + productCd + "/" #販売ページ
# shopUrl = "https://ebookjapan.yahoo.co.jp/books/" + titleId + "/" #販売ページ最新巻(最終巻)
thumbnailUrl = "https://cache2-ebookjapan.akamaized.net/contents/thumb/s/" + thumbnail #表紙画像
else:
print(jsonData["error"])
print(cnt, bCode, productCd, bookName, author)
##------------------------------------------------------------------------------------------------------------------##
### CSV出力順-> bCode, productCd, 書籍名, 作者, 出版社, 表紙画像URL, 販売ページURL, ビューURL, 概要, ジャンル, 発売日
writer.writerow([bCode, productCd, bookName, author, publisher, thumbnailUrl, shopUrl, viewUrl, summary, category, saleDate])
html='<a href="' + viewUrl + '" target="_blank"><img src="' + thumbnailUrl + '"></a>\n'
f2.write(html)
f.close
f2.close
※ 保存フォルダにある、背表紙のファイル名を、商品コードに加工して、それで該当する情報を取ってきています。
不要な項目は、削除してください.