-#! /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 getopt import getopt
+__author__ = "Oleg Broytman <phd@phdru.name>"
+__copyright__ = "Copyright (C) 1997-2012 PhiloSoft Design"
+__license__ = "GNU GPL"
-import bkmk_parser
-from formatter import AbstractFormatter, NullWriter
+import sys, os
+from getopt import getopt
+from bkmk_parser import BkmkParser
def run():
- optlist, args = getopt(sys.argv[1:], "gits")
+ optlist, args = getopt(sys.argv[1:], "is")
- show_pbar = 1
- to_text = 0
- to_gf = 0
+ show_pbar = True
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:
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 tty_pbar import ttyProgressBar
+ from m_lib.pbar.tty_pbar import ttyProgressBar
except ImportError:
show_pbar = 0
if show_pbar:
try:
- size = os.stat(filename)[stat.ST_SIZE]
+ size = os.path.getsize(filename)
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
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
+ infile = open(filename, 'r')
+ parser = BkmkParser()
- while 1:
- line = f.readline()
- if not line:
- break
+ line_no = 0
+ lng = 0
+ ok = 1
+ for line in infile:
if show_pbar:
lng = lng + len(line) + dos_add
pbar.display(lng)
- line = string.strip(line)
+ #line = line.strip()
line_no = line_no + 1
try:
parser.feed(line)
+ except:
+ ok = 0
+ break
- if parser.outfile: # Write header until HTML parser start writing outfile
- if header:
- header.close()
- header = None
- else:
- header.write(line + '\n')
+ try:
+ parser.close()
+ except:
+ ok = 0
- except:
- break # I need total number of lines; interpreter will print traceback on exit
+ infile.close()
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"
+ print parser.urls, "urls found"
+ print parser.objects, "objects created"
- parser.close()
- f.close()
+ 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__':