Der Roamio gibt max. 50 Items per Aufruf aus, iterativ alle Seiten der TOC laden, vgl. http://www.tivocommunity.com/tivo-vb/showthread.php?t=515766

This commit is contained in:
Stefan Bethke 2014-06-24 16:41:00 +00:00
parent f8715d1ea8
commit a78cb432f2

View file

@ -1,6 +1,6 @@
#!/usr/local/bin/python
# $Schlepperbande: src/tivomirror/tivomirror,v 1.53 2014/05/30 20:53:01 stb Exp $
# $Schlepperbande: src/tivomirror/tivomirror,v 1.54 2014/05/31 11:42:06 stb Exp $
#
# Stefans Script, um die Sendungen vom Tivo runterzuladen und in MPEG4
# zu transkodieren.
@ -45,7 +45,7 @@ includes['Castle'] = 1
includes['Cosmos: A Spacetime Odyssey'] = 1
includes['Family Guy'] = 1
includes['Hot in Cleveland'] = 1
includes['Late Show With David Letterman'] = 1
#includes['Late Show With David Letterman'] = 1
includes['Louie'] = 1
includes['Mad Men'] = 1
includes['Modern Family'] = 1
@ -55,10 +55,10 @@ includes['NFL Football'] = 1
includes['Person of Interest'] = 1
includes['Sesame Street'] = 1
includes['The Big Bang Theory'] = 1
includes['The Colbert Report'] = 1
includes['The Daily Show With Jon Stewart'] = 1
includes['The Late Late Show With Craig Ferguson'] = 1
includes['The Tonight Show Starring Jimmy Fallon'] = 1
#includes['The Colbert Report'] = 1
#includes['The Daily Show With Jon Stewart'] = 1
#includes['The Late Late Show With Craig Ferguson'] = 1
#includes['The Tonight Show Starring Jimmy Fallon'] = 1
class flushfile(object):
@ -187,22 +187,43 @@ def get_cookie_by_name(cj, name):
return [cookie for cookie in cj if cookie.name == name][0]
def gettoc():
def loadtoc(offset):
global session
params = {
'Command': 'QueryContainer',
'Container': '/NowPlaying',
'Recurse': 'Yes',
'ItemCount': '50'
'ItemCount': '50',
'AnchorOffset': offset
}
url = "https://{}/TiVoConnect".format(host)
print " offset %d" % (offset)
r = session.get(url, params=params)
if r.status_code != 200:
r.raise_for_status()
return r.text
def gettoc():
offset = 0
itemCount = 1
dom = None
root = None
while itemCount > 0:
dom1 = xml.dom.minidom.parseString(loadtoc(offset))
if dom == None:
dom = dom1
root = dom.childNodes.item(0)
else:
for child in dom1.childNodes.item(0).childNodes:
if child.nodeName == "Item":
root.appendChild(child.cloneNode(True))
itemCount = int(getElementText(dom1.documentElement.childNodes, "ItemCount"))
offset += itemCount
return dom
def getText(nodelist):
rc = ""
for node in nodelist:
@ -216,6 +237,12 @@ def getTagText(element, tagname):
except IndexError:
return ""
def getElementText(nodes, name):
for node in nodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.nodeName == name:
return getText(node.childNodes)
return None
def getAvail(dir):
s = os.statvfs(dir)
return s.f_bsize * s.f_bavail
@ -299,9 +326,9 @@ def download_decode(item, mak):
print "Problem setting timestamp: ", e
def savetoc(toc):
def savetoc(dom):
fd=open("toc.xml", "w")
fd.write(toc)
fd.write(dom.toprettyxml())
fd.close()
@ -379,9 +406,8 @@ def main():
ignoreepisodetitle = True
downloaddb = anydbm.open(os.path.expanduser("~") + "/.tivo-downloads", "c")
print "*** Getting listing"
toc = gettoc()
savetoc(toc)
dom = xml.dom.minidom.parseString(toc)
dom = gettoc()
savetoc(dom)
if len(remainder) == 1:
if remainder[0] == "list":