KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

カクヨム目次変更への対応

 カクヨムのサイトがリニューアルして目次がだいぶ変わったので対応。目次部分を見ていくと、HTMLを見てもすべての話へのリンクがなく一部になっている。その代わりにJSONにサイトのデータが書かれている。

github.com

対応前の状態

トップページをキャッシュに保存、そこからタイトルを取得するところで止まる。 Document doc = Jsoup.parse(cacheFile, null); SERIES/TITLE : タイトルがありません

jsoupでjsonデータの取得

stackoverflow.com

Element NEXT_DATA = doc.getElementById("NEXT_DATA");

System.out.println(NEXT_DATA.data());

JAVAのリストを条件でフィルタリング www.techiedelight.com

多次元配列の作成 www.javadrive.jp

JSONオブジェクトの取り出し stackoverflow.com

サイトからJSONを取り出して、JSONをパースしてタイトル著者、イントロ、各話のURLと投稿時間を取得した。だけど今までのHTMLから取得するのとJSONから取得する方法を共存できないので。可能だけどif分がいろんなところに必要になって見づらいことこの上ない。いっそのこと今までのHTMLに変換すればいいのでは。そうすればJSONからHTMLに変換するだけでいい。 JSONからHTMLを作る時にvelocityを使おう。ファイル分割するのがめんどいのでJava複数行代入機能を使ってテンプレートを作成する。

stackoverflow.com

日付の変換 カクヨムはZonedDateTimeだった workteria.forward-soft.co.jp

https://github.com/kyukyunyorituryo/FxlEpub3/blob/main/src/main/resources/package.vm HTMLエスケープは必要かどうか gae-fan.blogspot.com

ブラウザのコンソールからデータ取得メモ。

json=document.getElementById("__NEXT_DATA__").text
const obj = JSON.parse(json);
const episode=obj.props.pageProps.__APOLLO_STATE__
const key = Object.keys(episode)
episodename=key.filter(RegExp.prototype.test.bind(/^Episode:[0-9]+/))
book=[]
for (let i = 0; i < episodename.length; i++) {
//book[i].id=episode[episodename[i]].id
//book[i].title=episode[episodename[i]].title
//book[i].date=episode[episodename[i]].publishedAt
book.push({ id: episode[episodename[i]].id, title: episode[episodename[i]].title, date: episode[episodename[i]].publishedAt })
}
cd=location.pathname.replace(/\/+$/, "").split('/').pop();
title=episode["Work:" + cd].title
introduction=episode["Work:" + cd].introduction
author=episode[episode["Work:" + cd].author.__ref].activityName

github.com