X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=bkmk2db.py;h=5cf29aed53d4abfe607fb48b56aacdf4329b75cd;hb=c88cb7a75e7caf1d67466cfa107981d95115fa0c;hp=39ddea6cc8f682e3c30810eb3345358e2b7521ed;hpb=2e82a937f80392639176d9a414b55ffb8164ebca;p=bookmarks_db.git diff --git a/bkmk2db.py b/bkmk2db.py index 39ddea6..5cf29ae 100755 --- a/bkmk2db.py +++ b/bkmk2db.py @@ -1,143 +1,128 @@ -#! /usr/local/bin/python -O -""" - Convert Netscape Navigator's bookmarks.html to FLAD database +#! /usr/bin/env python +"""Convert Netscape Navigator's or Mozilla's bookmarks.html to a database - Written by BroytMann, Jun 1997 - Mar 1999. Copyright (C) 1997-1999 PhiloSoft Design +This file is a part of Bookmarks database and Internet robot. """ -import sys, os, stat, string +from __future__ import print_function +import sys, os from getopt import getopt +from bkmk_parser import BkmkParser + -import bkmk_parser -from formatter import AbstractFormatter, NullWriter +__author__ = "Oleg Broytman " +__copyright__ = "Copyright (C) 1997-2017 PhiloSoft Design" +__license__ = "GNU GPL" def run(): - optlist, args = getopt(sys.argv[1:], "gits") - - show_pbar = 1 - to_text = 0 - to_gf = 0 - report_stats = 1 - - for _opt, _arg in optlist: - if _opt == '-g': - to_gf = 1 - if _opt == '-i': - show_pbar = 0 - if _opt == '-t': - to_text = 1 - if _opt == '-s': - report_stats = 0 - try: - del _opt, _arg - except NameError: - pass - - if args: - if len(args) > 1: - sys.stderr.write("bkmk2db: too many arguments\n") - sys.exit(1) - - filename = args[0] - - else: - filename = 'bookmarks.html' # good name both for DOS (bookmark.htm) and UNIX - - if show_pbar: - show_pbar = sys.stderr.isatty() - - if show_pbar: - try: - from tty_pbar import ttyProgressBar - except ImportError: - show_pbar = 0 - - if show_pbar: - try: - size = os.stat(filename)[stat.ST_SIZE] - except: - print filename, ": no such file" - sys.exit(1) - - - fmt = AbstractFormatter(NullWriter()) - if to_text: - parser = bkmk_parser.Bookmarks2Text(fmt) - elif to_gf: - parser = bkmk_parser.Bookmarks2Gadfly(fmt) - else: - parser = bkmk_parser.Bookmarks2Flad(fmt) - - - if report_stats: - str = "Converting " + filename + " to " - if to_text: - str = "text" - elif to_gf: - str = "GadFly database" - else: - str = "FLAD database" - - sys.stdout.write("Converting %s to %s: " % (filename, str)) - sys.stdout.flush() - - if show_pbar: - pbar = ttyProgressBar(0, size) - lng = 0 - - # This is for DOS - it counts CRLF, which len() counts as 1 char! - if os.name == 'dos' or os.name == 'nt' : - dos_add = 1 - else: - dos_add = 0 # UNIX' and Mac's len() counts CR or LF correct - - try: - f = open(filename, 'r') - except IOError, msg: - print filename, ":", msg - sys.exit(1) - - header = open("header", 'w') - line_no = 0 - - while 1: - line = f.readline() - if not line: - break - - if show_pbar: - lng = lng + len(line) + dos_add - pbar.display(lng) - - line = string.strip(line) - line_no = line_no + 1 - - try: - parser.feed(line) - - if parser.outfile: # Write header until HTML parser start writing outfile - if header: - header.close() - header = None - else: - header.write(line + '\n') - - except: - break # I need total number of lines; interpreter will print traceback on exit - - if show_pbar: - del pbar - - if report_stats: - print "Ok" - print line_no, "lines proceed" - print parser.urls_no, "urls found" - print parser.record_no, "records created" - - parser.close() - f.close() + optlist, args = getopt(sys.argv[1:], "is") + + show_pbar = True + report_stats = 1 + + for _opt, _arg in optlist: + if _opt == '-i': + show_pbar = 0 + if _opt == '-s': + report_stats = 0 + try: + del _opt, _arg + except NameError: + pass + + if args: + if len(args) > 1: + sys.stderr.write("bkmk2db: too many arguments\n") + sys.stderr.write("Usage: bkmk2db [-is] bookmarks.html\n") + sys.exit(1) + + filename = args[0] + + else: + filename = 'bookmarks.html' # good name both for DOS (bookmark.htm) and UNIX + + + if report_stats: + from storage import storage_name + sys.stdout.write("Converting %s to %s: " % (filename, storage_name)) + sys.stdout.flush() + + if show_pbar: + show_pbar = sys.stderr.isatty() + + if show_pbar: + try: + from m_lib.pbar.tty_pbar import ttyProgressBar + except ImportError: + show_pbar = 0 + + if show_pbar: + try: + size = os.path.getsize(filename) + except: + print(filename, ": no such file") + sys.exit(1) + + + if show_pbar: + pbar = ttyProgressBar(0, size) + lng = 0 + + # This is for DOS - it counts CRLF, which len() counts as 1 char! + if os.name == 'dos' or os.name == 'nt' : + dos_add = 1 + else: + dos_add = 0 # UNIX' and Mac's len() counts CR or LF correct + + + infile = open(filename, 'r') + parser = BkmkParser() + + line_no = 0 + lng = 0 + ok = 1 + + for line in infile: + if show_pbar: + lng = lng + len(line) + dos_add + pbar.display(lng) + + #line = line.strip() + line_no = line_no + 1 + + try: + parser.feed(line) + except: + ok = 0 + break + + try: + parser.close() + except: + ok = 0 + + infile.close() + + if show_pbar: + del pbar + + if report_stats: + print("Ok") + print(line_no, "lines proceed") + print(parser.urls, "urls found") + print(parser.objects, "objects created") + + if ok: + from storage import storage + storage = storage() + storage.store(parser.root_folder) + + else: + import traceback + traceback.print_exc() + sys.exit(1) if __name__ == '__main__': - run() + run()