Sers Leute!
_Jin hat mir im kodinerds IRC schon den ganzen Nachmittag echt geholfen mich langsam in die Materie python reinzubringen, aber leider steh ich immer noch mit einem Problem am Schlauch.
Wir haben das Plugin chefkoch ( https://github.com/kodinerds/repo…ch_de-2.0.7.zip ) als Vorlage genommen und so umgebaut, dass es von der Seite "http://www.multimedia.ethz.ch/speakers/d_arch" eine Liste mit den Child-Pages "class = "sub-lev3" " ausgibt und in der Unterliste def Listvideos kommt es nun zu einem kleinen Problem.
Anscheinend macht dieser Teil Probleme, ich kriege nämlich von Kodie die ganze Zeit "list exceeds" im [definition='1','0']log[/definition] ausgespuckt. Da ich in der Materie Neuling bin komm ich leider nicht drauf was der Fehler genau ist, aber ich glaube der Hund liegt hier begraben:
content = getUrl(url)
tbody = re.search('<tbody>(.*?)</tbody>', content, re.DOTALL).group(1)
spl = tbody.split('<tr>')
danach kommt:
for i in range(1, len(spl), 1):
entry = spl[i]
match = re.compile('<li class=\'video\'><a href=\'(.+?)\'', re.DOTALL).findall(entry)
url = match[0]
match = re.compile('<span>(.+?)<', re.DOTALL).findall(entry)
title = cleanTitle(match[0])
addLink(title, url, 'playVideo', '', '')
Der ganze default.py-Code.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib
import urllib2
import socket
import sys
import re
import xbmcplugin
import xbmcgui
import xbmcaddon
socket.setdefaulttimeout(30)
pluginhandle = int(sys.argv[1])
settings = xbmcaddon.Addon(id='plugin.video.architektur')
translation = settings.getLocalizedString
forceViewMode = settings.getSetting("forceViewMode") == "true"
viewMode = str(settings.getSetting("viewMode"))
baseUrl = "http://www.multimedia.ethz.ch/speakers/d_arch/"
def index():
content = getUrl(baseUrl)
spl = content.split('class="subnav-lev3"')
for i in range(1, len(spl), 1):
entry = spl[i]
match = re.compile('href="(.+?)"', re.DOTALL).findall(entry)
url = match[0]
match = re.compile('title=".+?">(.+?)<', re.DOTALL).findall(entry)
title = cleanTitle(match[0])
addDir(title, url, 'listVideos', '')
xbmcplugin.endOfDirectory(pluginhandle)
if forceViewMode:
xbmc.executebuiltin('Container.SetViewMode('+viewMode+')')
def listVideos(url):
content = getUrl(url)
tbody = re.search('<tbody>(.*?)</tbody>', content, re.DOTALL).group(1)
spl = tbody.split('<tr>')
for i in range(1, len(spl), 1):
entry = spl[i]
match = re.compile('<li class=\'video\'><a href=\'(.+?)\'', re.DOTALL).findall(entry)
url = match[0]
match = re.compile('<span>(.+?)<', re.DOTALL).findall(entry)
title = cleanTitle(match[0])
addLink(title, url, 'playVideo', '', '')
xbmcplugin.endOfDirectory(pluginhandle)
if forceViewMode:
xbmc.executebuiltin('Container.SetViewMode('+viewMode+')')
def playVideo(url):
listitem = xbmcgui.ListItem(path=url)
xbmcplugin.setResolvedUrl(pluginhandle, True, listitem)
def cleanTitle(title):
title = title.replace("<", "<").replace(">", ">").replace("&", "&").replace("'", "\\").replace(""", "\"").replace("ß", "ß").replace("–", "-")
title = title.replace("Ä", "Ä").replace("Ü", "Ü").replace("Ö", "Ö").replace("ä", "ä").replace("ü", "ü").replace("ö", "ö")
title = title.strip()
return title
def getUrl(url):
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0')
response = urllib2.urlopen(req)
link = response.read()
response.close()
return link
def parameters_string_to_dict(parameters):
''' Convert parameters encoded in a URL to a dict. '''
paramDict = {}
if parameters:
paramPairs = parameters[1:].split("&")
for paramsPair in paramPairs:
paramSplits = paramsPair.split('=')
if (len(paramSplits)) == 2:
paramDict[paramSplits[0]] = paramSplits[1]
return paramDict
def addLink(name, url, mode, iconimage, desc=""):
u = sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)
ok = True
liz = xbmcgui.ListItem(name, iconImage="DefaultVideo.png", thumbnailImage=iconimage)
liz.setInfo(type="Video", infoLabels={"Title": name, "Plot": desc})
liz.setProperty('IsPlayable', 'true')
ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz)
return ok
def addDir(name, url, mode, iconimage):
u = sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)
ok = True
liz = xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)
liz.setInfo(type="Video", infoLabels={"Title": name})
ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz, isFolder=True)
return ok
params = parameters_string_to_dict(sys.argv[2])
mode = urllib.unquote_plus(params.get('mode', ''))
url = urllib.unquote_plus(params.get('url', ''))
if mode == 'listVideos':
listVideos(url)
elif mode == 'playVideo':
playVideo(url)
else:
index()
Alles anzeigen
----------------------
Und wenn ich das hinkriege als erste Übung, kann mich jemand vielleicht in die richtige Richtung leiten wie ich von hier die Videos bekommen könnte?
https://tube.tugraz.at/engage/ui/brow…=courses&page=2
Mit Quelltext geht da nämlich gar nix...
lg