2010-06-25 14 views
23

मैं अजगर में आईबुक में एक एपब अपलोडर बनाने की कोशिश कर रहा हूं। पुस्तक की जानकारी निकालने के लिए मुझे एक पायथन lib की आवश्यकता है। अपने आप को इसे लागू करने से पहले मुझे आश्चर्य है कि अगर कोई पहले से ही बनाई गई पाइथन lib को जानता है तो यह करता है।पायथन लाइब्रेरी 'एपब' जानकारी निकालने के लिए

+2

मैं इस प्रश्न को खोलने के लिए मतदान कर रहा हूं, क्योंकि ऐसा लगता है कि पूछने के समय, आवश्यक कार्यक्षमता को लागू करने के लिए कोई पुस्तकालय नहीं था, और मुझे लगता है कि स्वीकृत उत्तर में मूल्यवान कोड है । –

+0

टिप्पणी आपके लिए नहीं है, लेकिन लोगों के लिए सवाल बंद करने के लिए मतदान करने के लिए। उत्तर को अस्वीकार करने का कोई कारण नहीं है, खासकर जब यह आपकी समस्या का समाधान करता है। –

+0

समापन का मतलब हटाना नहीं है, उत्तर केवल लिंक को ही आकर्षित कर रहा है और शायद भविष्य में स्पैम को आकर्षित कर रहा है। – bummi

उत्तर

35

एक .epub फ़ाइल एक ज़िप-एन्कोडेड फ़ाइल है जिसमें मेटा-आईएनएफ निर्देशिका है, जिसमें कंटेनर.एक्सएमएल नाम की एक फ़ाइल है, जो आमतौर पर Content.opf नामक दूसरी फ़ाइल को इंगित करती है, जो अन्य सभी फ़ाइलों को अनुक्रमणित करती है जो ई-बुक (सारांश http://www.jedisaber.com/eBooks/tutorial.asp पर आधारित; http://www.idpf.org/2007/opf/opf2.0/download/ पर पूर्ण spec)

निम्न पायथन कोड मूल रूप से एक .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' 
} 
+0

धन्यवाद, यह मेरी अपेक्षा के अनुसार काम करता है। – xiamx

+0

दोनों लिंक टूटे हैं। – OliasailO

3

उदाहरण के लिए epub-tools जैसा कुछ है? लेकिन यह लगभग epub प्रारूप (विभिन्न संभावित स्रोतों से) के बारे में है, जैसा कि epubtools (समान वर्तनी, विभिन्न परियोजना) है। पढ़ने के लिए, मैं साथी परियोजना threepress, ब्राउज़र पर एपब किताबें दिखाने के लिए एक Django ऐप आज़माउंगा - उस कोड को नहीं देखा है, लेकिन मुझे कल्पना है कि पुस्तक को दिखाने के लिए यह निश्चित रूप से पहले होना चाहिए इसे पढ़ने में सक्षम ;-)।

+0

एपब-टूल्स और एपबेटोल्स एपब जनरेटर प्रतीत होते हैं। – xiamx

+0

@xiamx, हाँ, "ज्यादातर लिखने के बारे में" जैसा कि मैंने कहा - तो, ​​क्या आपने थ्रेसप्रेस कोड की कोशिश की है? –

2

बाहर epub module चेक। यह एक आसान विकल्प की तरह दिखता है।

2

मैं कुछ इसी तरह की तलाश करने के बाद यहां घायल हुआ और श्री बोथवेल के कोड स्निपेट द्वारा अपनी परियोजना शुरू करने के लिए प्रेरित था। यदि कोई दिलचस्पी लेता है ... http://epubzilla.odeegan.com/

+0

काफी उपयोगी आप लिंक करते हैं – embert