No images in this repository’s iceberg at this time
Download raw (1.7 KB)
import os
import json
import codecs
from xml.dom.minidom import parse
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
EPUB_DIR = os.path.join(PROJECT_PATH, 'public', 'epub_content')
obj = { "library_epubs" : [] }
def find_package(path):
"""
Inside an epub folder, find the location of the package.opf
If not found, return False
"""
for root, dirnames, filenames in os.walk(path):
for filename in filenames:
if filename.endswith('.opf'):
return os.path.join(root, filename).replace(PROJECT_PATH + '/public/', '')
return False
def parse_meta(path):
meta = {}
opf = parse(os.path.join('public', path))
ti_e = opf.getElementsByTagName('dc:title')
meta['title'] = ti_e[0].firstChild.data if len(ti_e) > 0 else u""
a_e = opf.getElementsByTagName('dc:creator')
meta['author'] = a_e[0].firstChild.data if len(a_e) > 0 else u""
d_e = opf.getElementsByTagName('dc:description')
meta['description'] = d_e[0].firstChild.data if len(d_e) > 0 else u""
return meta
for i in os.listdir(EPUB_DIR):
if os.path.isdir(os.path.join(EPUB_DIR, i)):
this_epub_path = os.path.join(EPUB_DIR, i)
if os.path.exists(os.path.join(EPUB_DIR, i, 'mimetype')):
package = find_package(this_epub_path)
if package:
meta = parse_meta(package)
if not meta['title']:
meta['title'] = i.replace('_',' ').title()
meta['epub_download'] = os.path.join('epub_content', i, '%s.epub' % i)
meta['url_to_package_doc'] = package
obj['library_epubs'].append(meta)
print json.dumps(obj, indent=2, ensure_ascii=False).encode('utf-8')