#!/usr/bin/python
|
#
|
# archive_tivo is a quick example of a program to selectively copy some
|
# video's off your tivo
|
|
import sys
|
import os
|
import time
|
import TivoAccess
|
import progrun
|
|
|
DOWNLOAD = os.path.expanduser('~/Downloads')
|
|
|
def EntryFilename(entry):
|
if entry.episode:
|
fn = '%s - %s.tivo' % (entry.title, entry.episode)
|
else:
|
fn = '%s.tivo' % (entry.title)
|
fn = fn.replace("'", '')
|
fn = fn.replace(":", ' -')
|
fn = fn.replace("/", ' - ')
|
return os.path.join(DOWNLOAD, fn)
|
|
|
def main(argv):
|
try:
|
progrun.do_lock('/tmp/archive_tivo.lock')
|
except progrun.LockFailed:
|
return
|
|
media_key = TivoAccess.LoadMak()
|
hosts = TivoAccess.FindTivos()
|
for host in hosts:
|
tf = TivoAccess.TivoFetcher(host, media_key)
|
entries = tf.FetchPlayList()
|
matching = []
|
for entry in entries:
|
if entry.inprogress: continue
|
for dl in ['South Park', 'Robot Chicken', 'Venture', 'NHL']:
|
if entry.title.find(dl) != -1:
|
if os.path.exists(EntryFilename(entry)): continue
|
matching.append(entry)
|
|
if len(matching):
|
print "Tivo %s has %d shows, %d to download" % (host, len(entries),
|
len(matching))
|
for entry in matching:
|
print "Downloading %s" % EntryFilename(entry)
|
tf.Download(entry, EntryFilename(entry))
|
# wait 15s between downloads to let the tivo recover
|
time.sleep(15)
|
|
|
if __name__ == "__main__":
|
main(sys.argv)
|