Myth video scan.py

From MythTV Official Wiki
Revision as of 06:03, 30 March 2010 by Wagnerrp (talk | contribs) (example script for using python bindings)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This script is part of a number of example scripts, intended to serve as a guide to using the new Python bindings rewritten for MythTV 0.23.

This script will perform a scan of all defined storage groups, delete missing videos, and adding any new videos for which it can find an exact match using MythVideo's defined metadata grabbers. Any new videos for which there are no or multiple matches will be skipped.

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

import os
import sys
from ConfigParser import SafeConfigParser
try:
    from MythTV import MythVideo, VideoGrabber, MythLog
except:
    print 'ERROR: The python bindings are not installed'
    sys.exit(-1)

LOG = MythLog('MythVideo Scanner', lstr='general')
mvid = MythVideo()

# Load TV Grabber
try:
    TVgrab = VideoGrabber('TV', db=mvid)
except:
    print 'ERROR: Cannot find MythVideo TV grabber'
    sys.exit(-1)
# if ttvdb.py, optionally add config file
if 'ttvdb.py' in TVgrab.path:
    path = os.path.expanduser('~/.mythtv/ttvdb.conf')
    if os.access(path, os.F_OK):
        # apply title overrides
        cfg = SafeConfigParser()
        cfg.read(path)
        if 'series_name_override' in cfg.sections():
            ovr = [(title, cfg.get('series_name_override',title)) \
                    for title in cfg.options('series_name_override')]
            TVgrab.setOverride(ovr)
            TVgrab.append(' -c '+path)

# Load Movie Grabber
try:
    Mgrab = VideoGrabber('Movie', db=mvid)
except:
    print 'ERROR: Cannot find MythVideo Movie grabber'
    sys.exit(-1)

# pull new/old content list
LOG(LOG.GENERAL, 'Performing scan...')
toadd, todel = mvid.scanStorageGroups(False)

if len(todel) > 0:
    print '--- Deleting Old Videos ---'
    print len(todel)+' found'
    for vid in todel:
        s = vid.title
        if vid.season:
            s += ' - %dx%d' % (vid.season, vid.episode)
        if vid.subtitle:
            s += ' - '+vid.subtitle
        print '      '+s
        vid.delete()

if len(toadd) > 0:
    print '--- Adding New Videos ---'
    print len(toadd)+' found'
    for vid in toadd:
        s = vid.title
        if vid.season:
            s += ' - %dx%02d' % (vid.season, vid.episode)
        if vid.subtitle:
            s += ' - '+vid.subtitle
        print '      '+s,

        if vid.subtitle:
            matches = TVgrab.searchTitle(vid.title)
        else:
            matches = Mgrab.searchTitle(vid.title)

        if len(matches) == 0:
            print '... no matches, skipped.'
            continue
        elif len(matches) > 1:
            print '... multiple matches, skipped.'
            continue

        vid.inetref = matches[0][0]
        if vid.subtitle:
            data, cast, genre, country = \
                    TVgrab.getData(vid.inetref, vid.season, vid.episode)
        else:
            data, cast, genre, country = Mgrab.getData(vid.inetref)

        vid.data.update(data)
        vid.create()
        for i in cast:
            vid.cast.add(i)
        for i in genre:
            vid.genre.add(i)
        for i in country:
            vid.country.add(i)
        print '... successful.'