25

PythonでiBookへのePubアップローダーを作成しようとしています。本の情報を抽出するには、Pythonライブラリが必要です。これを自分で実装する前に、それを実行する既に作成されたpythonlibを誰かが知っているかどうか疑問に思います。

4

4 に答える 4

46

.epubファイルは、META-INFディレクトリを含むzipエンコードファイルであり、container.xmlという名前のファイルが含まれます。このファイルは、通常Content.opfという名前の別のファイルを指し、電子書籍を構成する他のすべてのファイルにインデックスを付けます。 (要約はhttp://www.jedisaber.com/eBooks/tutorial.aspに基づいています。完全な仕様はhttp://www.idpf.org/2007/opf/opf2.0/download/にあります)

次のPythonコードは、.epubファイルから基本的なメタ情報を抽出し、それをdictとして返します。

import zipfile
from lxml import etree

def get_epub_info(fname):
    ns = {
        'n':'urn:oasis:names:tc:opendocument:xmlns:container',
        'pkg':'http://www.idpf.org/2007/opf',
        'dc':'http://purl.org/dc/elements/1.1/'
    }

    # prepare to read from the .epub file
    zip = zipfile.ZipFile(fname)

    # find the contents metafile
    txt = zip.read('META-INF/container.xml')
    tree = etree.fromstring(txt)
    cfname = tree.xpath('n:rootfiles/n:rootfile/@full-path',namespaces=ns)[0]

    # grab the metadata block from the contents metafile
    cf = zip.read(cfname)
    tree = etree.fromstring(cf)
    p = tree.xpath('/pkg:package/pkg:metadata',namespaces=ns)[0]

    # repackage the data
    res = {}
    for s in ['title','language','creator','date','identifier']:
        res[s] = p.xpath('dc:%s/text()'%(s),namespaces=ns)[0]

    return res

サンプル出力:

{
    'date': '2009-12-26T17:03:31',
    'identifier': '25f96ff0-7004-4bb0-b1f2-d511ca4b2756',
    'creator': 'John Grisham',
    'language': 'UND',
    'title': 'Ford County'
}
于 2010-06-25T01:07:06.793 に答える
3

たとえば、epub-toolsのようなものですか?しかし、それは主に、 epubtools(同様のスペル、異なるプロジェクト)と同様に、(さまざまな可能なソースからの)フォーマットの記述に関するものです。 それを読むために、私はブラウザでePubの本を表示するためのDjangoアプリであるコンパニオンプロジェクトthreepressを試してみます-そのコードを見ていませんが、本を表示するには、最初に確実に最初にできる必要があると思いますそれを読んで;-)。epub

于 2010-06-25T01:03:43.990 に答える
1

ePubモジュールをチェックしてください。簡単なオプションのようです。

于 2012-06-05T12:09:23.640 に答える
0

似たようなものを探してここにたどり着き、Bothwell氏のコードスニペットに触発されて自分のプロジェクトを開始しました。興味のある方は... http://epubzilla.odeegan.com/

于 2013-02-09T03:37:11.827 に答える