0
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?

More than 5 years have passed since last update.

備忘録:epubcheckが何をやっているのか解読してみた

Posted at

#前回までのあらすじ
pythonでepubcheckなるモジュールを取り込んだはいいがexe化すると動かなかった。
https://qiita.com/blue_red_violet/items/af32f2f2caa5551aa350

##今回の施策:printで可視化だ!
人の書いたコードは何をやっているかが分からないので、まずエラーが出る箇所で何のデータを受け渡ししているのかを、先達の助言に従いprintで可視化してみた。

###そもそも何と格闘しているの?
epubcheckフォルダ内のchecker.py line 41にエラーが!
→上記が参照している同ファイル内line58にエラーが!
→上記が参照しているjsonフォルダ内の__init__.py line 348にエラーが!
→上記が参照している同フォルダ内のdecoder.py line 337にエラーが!
→上記が参照している同ファイル内line355にエラーが!

ということで、epubcheckモジュールとjsonモジュールにまたがってエラーが出ている。(そもそもepubcheckのchecker.pyを参照している元のファイル周りで出てるエラーは記載省略した)

##今回やってみたこと
init.py line348は

return _default_decoder.decode(s)

なので、その直前に

print(_default_decoder.decode(s))

を突っ込んでみた。

###結果
出てきた出てきたjsonの中身が!
初っ端のmessagesに既に空のリストがあるんだが、これがそもそも「出せ!」とこちらで要求しているresult.messagesに該当しているのでは……?(仮にそうなら、そりゃ空だとエラー出すわ)

###副産物
epubcheckさんの働きぶりが細々分かった。

どうやらファイルごとに
・epubのopfファイル内で割り振ってあるid
・ディレクトリ+ファイル名
・圧縮関係(圧縮時ファイル容量、非圧縮時ファイル容量、圧縮方式)※epubは一部ファイルを除きzipと同じように圧縮されている
・pythonで生成したリスト内で割り振られたid
・epubの表示周り(SpineだのLinearだのNavigationOrderだのfix型時のRendtionLayoutだのOrientationだのSpreadだの)
・他のファイルを参照しているかどうか(referencedItemsというリストを生成して、ファイル内から他ファイルを参照していたらリンク先がリストに吐き出される)

他にも、opfだけの処理も細々行っていた。省略可能なDCMES要素も混じっているので、空のリストもここで生じている。
・epubのファイル名
・epubcheckerのバージョン
・チェックした日時
・更新日
・epubcheckerの結果(チェックに要した時間含む)
・出版社
・タイトル
・クリエーター
・subject(ここが空だった)
・spine内要素の数
・リフローかフィックスか
・宣言してある使用言語は
・OrientationやSpreadは
・epubのバージョンは
・その他epubで使える要素を使っているかどうかあれこれ(列挙に疲れたので以下記載。伏せたい箇所はほにゃらら化しました)

{'messages': [], 'customMessageFileName': None, 'checker'
: {'path': 'ほにゃらら',
 'filename': 'ほにゃらら',
 'checkerVersion': '4.2.0-rc',
 'checkDate': '04-23-2019 09:57:22',
 'elapsedTime': 4341, 'nFatal': 0, 'nError': 0, 'nWarning': 0, 'nUsage': 0}, 'publication'
: {'publisher': 'ほにゃらら',
 'title': 'ほにゃらら',
 'creator': ['ほにゃらら'], 'date': '2019-04-23T00:00:00Z',
 'subject': [], 'description': None, 'rights': None, 'identifier': 'urn:uuid:ほにゃらら',
 'language': 'ja',
 'nSpines': 63, 'checkSum': 0, 'renditionLayout': 'reflowable',
 'renditionOrientation': 'auto',
 'renditionSpread': 'auto',
 'ePubVersion': '3.2',
 'isScripted': False, 'hasFixedFormat': False, 'isBackwardCompatible': False, 'hasAudio': False, 'hasVideo': False, 'charsCount': 63893, 'embeddedFonts': [], 'refFonts': ['serif-ja',
 'sans-serif-ja',
 'serif-ja-v',
 'sans-serif-ja-v'], 'hasEncryption': False, 'hasSignatures': False, 'contributors': []}, 

'items': [{'id': 'book-style',
 'fileName': 'item/style/book-style.css',
 'media_type': 'text/css',
 'compressedSize': 1378, 'uncompressedSize': 6207, 'compressionMethod': 'Deflated',
 'checkSum': '7594817bcbb9ba19f81dc4e68dddb203791691a4b36948985302a8f46247d',
 'isSpineItem': False, 'spineIndex': None, 'isLinear': False, 'navigationOrder': None, 'isHTML5': False, 'isFixedFormat': None, 'isScripted': False, 'scriptSrc': False, 'scriptTag': False, 'scriptInline': False, 'renditionLayout': None, 'renditionOrientation': None, 'renditionSpread': None, 'referencedItems': ['item/style/style-advance.css',
 'item/style/style-reset.css',
 'item/style/style-standard.css']},

##次はどうしよう
とりあえず冒頭のmessagesがどうやったら空にならなくなるのか調べるところからですね。

0
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
0
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?