# -*- coding: utf-8 -*-
import os
import sys
import ebooklib
from ebooklib import epub
import urllib.parse
import argparse
def parse_args():
parser = argparse.ArgumentParser()
#parser.add_argument(
# "--encoding",
# help="encoding code for html",
# type=str,
# default='utf-8'
# )
parser.add_argument(
"-s",
action="store_true",
help="show spine",
default=False
)
parser.add_argument(
"-d",
action="store_true",
help="show doc",
default=False
)
parser.add_argument(
"-t",
action="store_true",
help="show toc",
default=False
)
parser.add_argument(
"files",
nargs='*',
metavar='N',
type=str,
help="file list",
default=''
)
args = parser.parse_args()
return args
def show_toc(e, indent=0):
if isinstance(e, epub.Section):
print(' ' * indent, end='')
print("{}-@-{}-@-".format(e.title, urllib.parse.unquote(e.href)))
return None
if isinstance(e, list) or isinstance(e, tuple):
for d in e:
print(" " * indent, end='')
show_toc(d, indent + 1)
return None
if isinstance(e, epub.Link):
print(" " * indent, end='')
print("{}-@-{}-@-{}-@-".format(e.title, urllib.parse.unquote(e.href), e.uid))
return None
print("unknown type: {}".format(type(e)))
raise Exception("unknown type: {}".format(type(e)))
def show_file(filename, args):
book = epub.read_epub(filename)
if args.s or not any([args.s, args.t, args.d]):
print("spine ======================")
for s in book.spine:
print(s)
if args.t or not any([args.s, args.t, args.d]):
print("toc ======================")
for t in book.toc:
show_toc(t)
if args.d or not any([args.s, args.t, args.d]):
print("doc ======================")
for d in book.get_items_of_type(ebooklib.ITEM_DOCUMENT):
print(d.id, d.file_name, d)
def main(args):
for filename in args.files:
show_file(filename, args)
if "__main__" == __name__:
args = parse_args()
#filename = sys.argv[1]
main(args)