私はここでこれに関するかなりの数の投稿を調べ、それをグーグルで調べました。私は他の言語を使用しましたが、まだPythonを学んでおり、クラスにもあまり詳しくないので、クラスの動作について理解していないことに気付いていると思います。
私はePub読書アプリで作業したかったのですが、integrateというroberto alasinaのプロジェクトを見つけました。これは良い出発点でしたが、メタデータが収集されず、ePub処理ライブラリが他のいくつかのことに対して十分に抽出されていません。 。そこで、ePubの読書クラスであるダストジャケットを見つけました。
これをさらに抽出する必要がある理由は、リーダー自体だけでなく、アプリの複数の部分からのデータの読み取りを処理する必要があるためです。検索を可能にするためにwhooshを追加する予定です。インデックスを作成するには、章を読んでからファイルにインデックスを作成する必要があります。私は本のインポート中にこれを行うことができ、実際のインデックス作成部分のGUIは実際には必要ありません。
とにかくdistジャケットでロギングを追加しましたが、私のメソッドがePubから目次を正しく取得していることがわかります。
def __parse_oebps(self, epub):
'''Construct the chapter list assuming that the ePub has files in OEBPS/.'''
# Parse the chapters
npoints = self.__toc.findall("//{%(tocns)s}navPoint" % {'tocns': self.__namespaces['ncx']})
for p in npoints:
#rt = p.getroottree()
#title = p.findtext("{%(tocns)s}text" % {'tocns': self.__namespaces['ncx']}) # Label text
title = p.find(
'{http://www.daisy.org/z3986/2005/ncx/}navLabel').find(
'{http://www.daisy.org/z3986/2005/ncx/}text').text
contentfile = p.find("{%(tocns)s}content[@src]" % {'tocns':self.__namespaces['ncx']}).attrib['src'] # Contentfile name
#if self.__has_oebps:
# #contentfile = "OEBPS/" + contentfile
# contentfile = "OEBPS/" + contentfile
# log.info("content file: %s", contentfile)
#return contentfile
#self.chapters.append(EpubChapter(epub, p.attrib['id'], p.attrib['playOrder'], contentfile, title))
if title and contentfile:
log.debug("Title: %s", title)
log.debug("content file: %s", contentfile)
self.chapters.append([title, contentfile])
return self.chapters
デバッグログを挿入すると、インスタンスがクラスから適切に呼び出され、タイトルとコンテンツファイルがそこにあることが簡単にわかります。これはebubtocクラスからのものであり、epubクラスのこのメソッドから呼び出されます。
def __read_toc(self):
'''Construct the table of contents for this epub'''
self.__toc = EpubToc(self)
for l, c in self.__toc:
log.debug("Title: %s", l)
log.debug("content file: %s", c)
このメソッドがそのデータを取得するのは、次のエラーが発生するときです。
for l, c in self.__toc:
TypeError: iteration over non-sequence
現時点では、何が間違っているのか、なぜこれが機能しないのかわかりません。これで十分でない場合は、使用している残りのクラスを投稿できます。
ありがとう