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

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

epub parserを調べてみた

 作ったEPUBのソースがないときに、EPUBから原稿に戻すepub parserがあればいいのではと思ったので調べてみた。

 javaで調べてみるとアンドロイド向けのが見つかり、jsを調べるとepub2向けのが見つかってepub3向けのがないなという感想を覚えた。調べたらあるのかもしれないが、あまり活発に更新されているわけではなさそう。jsのを見ていくとjszipで展開して中身を見ていく感じであった。凡庸的にepub parserを作るのは大変そうなので、aozoraepub3で作ったものをパースして青空文庫形式にできればいい。epub parserでパースしたものをマークダウンに変換したりなどというものはいくつかあるようだ。

パーサーで何を読み取りたいかというと、下のもの。

  • タイトル
  • 著者
  • カバー画像
  • 目次
  • 順番
  • 本文

jszipでzipファイルを展開するのに、async awaitの書き方に直した。filedataにzipファイルの中身が入る形になる。きれいな書き方ではないが、とりあえず動けば。

var filedata= [];
(async function(){
const fileContent = fs.readFileSync(sample, null).buffer;
const zip = new JSZip();
await zip.loadAsync(fileContent);
for (const fileName in zip.files) {
  const file = zip.files[fileName];
  if (!file.dir) {
    const content = await file.async('text');
    filedata.push({ "FileName" : fileName , "Content" :content})
  }
 }
})();

jsdomでxmlのパースで本のタイトルを取得するのにnamespaceが必要になる。xmlをjsonに変換してから読み取るやり方をしているのも見た。DOM操作のほうが慣れているのでnode.jsのjsdomを使っている。

//<dc:title id="title">表題</dc:title>
const dc="http://purl.org/dc/elements/1.1/"
document.getElementsByTagNameNS(dc,'title')

 

github.com

github.com

html markdown converter github.com

github.com

qiita.com

webpack,react,browserifyなどnode.jsをウェブページ向けに変換するのはどれがいいのやら。

zipファイルからファイル名が.opfのものを検索して、domparserに読み込む。

github.com

Node.jsでDOMを触る
torimemoblog.wordpress.com

developer.mozilla.org How To Create Html Nested Lists In JavaScript techindetail.com

How to parse nested elements using DOM stackoverflow.com

EPUB制作: 目次Navigation Documentのよくある間違い techracho.bpsinc.jp

再起処理でdom

magazine.techacademy.jp

qiita.com

DOMを再帰関数で深さを取得 stackoverflow.com

Node.jsからVOICEVOXを使ってみる。 qiita.com

VOICEVOX(音声合成)をREST-APIで利用する qiita.com