Talk:Update bookmarks from file

From MythTV

(Difference between revisions)
Jump to: navigation, search
Wagnerrp (Talk | contribs)
(add trunk version)

Current revision as of 20:01, 30 July 2010

trunk version


Image:PythonIcon.png bookmarks.py

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#----------------------

import os
import sys
from HTMLParser import HTMLParser
try:
    from MythTV import MythDB
    from MythTV.database import DBDataWriteAI
except:
    print 'ERROR: The python bindings are not installed'
    sys.exit(-1)

class Bookmark( DBDataWriteAI ):
    _table = 'websites'
    _key = ['id']
    _defaults = {'id':None, 'category':u'', 'name':u'', 'url':u''}
    _schema_value = 'BrowserDBSchemaVer'
    _schema_local = 1002
    _schema_name = 'MythBrowser'

class Parser( HTMLParser ):
    def __init__(self):
        HTMLParser.__init__(self)
        self.stack = []
    def handle_starttag(self, tag, attrs):
        if tag == 'h3':
            # new category, push to stack
            self.stack.append('h3')
        elif not len(self.stack):
            # no categories, refuse links
            return
        elif tag == 'a':
            # new bookmark, push to stack
            d = dict(attrs)
            self.stack.append(d['href'])
            self.stack.append('a')
    def handle_endtag(self, tag):
        if not len(self.stack):
            # empty stack, do nothing
            return
        elif tag == 'dl':
            # drop out of category, pop from stack
            self.stack.pop()
    def handle_data(self, data):
        if not len(self.stack):
            # empty stack, do nothing
            return
        elif self.stack[-1] == 'h3':
            # new category name, swap on stack
            self.stack[-1] = data
        elif self.stack[-1] == 'a':
            # new link name, swap on stack
            self.stack[-1] = data
            # create new bookmark in database
            b = Bookmark(db=db)
            b.name = self.stack.pop()
            b.url = self.stack.pop()
            b.category = self.stack[-1]
            b.create()

# select file
bookmark_file = '~/bookmarks.html'
if len(sys.argv) == 2:
    bookmark_file = sys.argv[1]

# check if file exists
if not os.access(os.path.expanduser(bookmark_file), os.F_OK):
    print 'ERROR: bookmark file could not be found'
    sys.exit(-1)

# connect to database
try:
    db = MythDB()
except:
    print 'ERROR: database could not be accessed'
    sys.exit(-1)

# flush old entries and reset counter
c = db.cursor()
c.execute("""TRUNCATE TABLE websites""")
c.close()

# read in file
fp = open(os.path.expanduser(bookmark_file))
data = ''.join(fp.readlines())
fp.close()

# parse file for bookmarks
parser = Parser()
parser.feed(data)
Personal tools