The branch, dharma has been updated
via ef83aae3db75ba9e48e0bef8ff8761ee0780932d (commit)
from 8616497037efeb63f787e82c9996e95be3419c6e (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=ef83aae3db75ba9e48e0bef8ff8761ee0780932d
commit ef83aae3db75ba9e48e0bef8ff8761ee0780932d
Author: spiff <[email protected]>
Date: Sun Mar 25 11:01:08 2012 +0200
[plugin.video.mediathek] updated to version 0.2.9
diff --git a/plugin.video.mediathek/addon.xml b/plugin.video.mediathek/addon.xml
index 4e1111b..408f7be 100644
--- a/plugin.video.mediathek/addon.xml
+++ b/plugin.video.mediathek/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="plugin.video.mediathek"
- version="0.2.8"
+ version="0.2.9"
name="Mediathek"
provider-name="Raptor 2101 [[email protected]]">
<requires>
@@ -17,11 +17,11 @@
<summary lang="en">Gives acces to the most video-platforms from german
public service broadcaster</summary>
<description lang="de">Ermöglicht den zugriff auf alle deutschen
Mediatheken der öffentlich Rechtlichen.
Aktuell implementiert sind:
- 3Sat, ARD, ZDF, ARTE, Bayrisches Fernsehen, ORF, WDR, NDR (experimentel),
KiKa (ohne Kikaninchen)
+ 3Sat, ARD, ZDF, ARTE, Bayrisches Fernsehen, ORF, WDR, NDR, KiKa (ohne
Kikaninchen)
</description>
<description lang="en">Gives acces to the most video-platforms from german
public service broadcaster.
Currently implemented:
- 3Sat, ARD, ZDF, ARTE, Bayrisches Fernsehen, ORF, WDR, NDR (experimental),
KiKa (without Kikaninchen)
+ 3Sat, ARD, ZDF, ARTE, Bayrisches Fernsehen, ORF, WDR, NDR, KiKa (without
Kikaninchen)
</description>
<platform>all</platform>
</extension>
diff --git a/plugin.video.mediathek/changelog.txt
b/plugin.video.mediathek/changelog.txt
index 5d3a723..d40803c 100644
--- a/plugin.video.mediathek/changelog.txt
+++ b/plugin.video.mediathek/changelog.txt
@@ -1,3 +1,4 @@
+0.2.9 - ADD: Apply patches from soern to Dharma/XBox version
0.2.8 - ADD: KIKA (Without Kikaninchen)
FIX: 3SAT Broken Link
ADD: NDR
diff --git a/plugin.video.mediathek/mediathek/__init__.py
b/plugin.video.mediathek/mediathek/__init__.py
index d3c9710..8a9af1d 100644
--- a/plugin.video.mediathek/mediathek/__init__.py
+++ b/plugin.video.mediathek/mediathek/__init__.py
@@ -39,7 +39,7 @@ class TreeNode(object):
self.childNodes = childNodes;
class DisplayObject(object):
- def __init__(self,title,subTitle,picture,description,link=[],isPlayable =
True, date = None):
+ def __init__(self,title,subTitle,picture,description,link=[],isPlayable =
True, date = None, duration = None):
self.title = title
self.subTitle = subTitle
self.link = link
@@ -47,6 +47,7 @@ class DisplayObject(object):
self.isPlayable = isPlayable
self.description = description
self.date = date;
+ self.duration = duration;
class Mediathek(object):
diff --git a/plugin.video.mediathek/mediathek/bayerisches.py
b/plugin.video.mediathek/mediathek/bayerisches.py
index 425ad04..78f4ad1 100644
--- a/plugin.video.mediathek/mediathek/bayerisches.py
+++ b/plugin.video.mediathek/mediathek/bayerisches.py
@@ -29,7 +29,7 @@ class BayerischesFSMediathek(Mediathek):
def name(self):
return "BayernFS";
def isSearchable(self):
- return False;
+ return True;
def __init__(self, simpleXbmcGui):
self.gui = simpleXbmcGui;
@@ -38,19 +38,20 @@ class BayerischesFSMediathek(Mediathek):
else:
self.baseType = "rtsp_mov_http"
+ self.channel = "bfs"
+ #self.channel = "bfsalpha"
+
self.root_url="http://mediathek-video.br.de/js/config.js";
self.regexp_findArchive=re.compile("http://.*/archive/archive\.xml\.zip\.adler32");
- self.menuTree = (
- TreeNode("0","Alle","http://LoadAll",True),
- );
-
-
- def buildPageMenu(self, link, initCount):
- self.gui.log("buildPageMenu: "+link);
-
+ self.menuTree = [
+ TreeNode("0","Alle","LoadAll",True),
+ TreeNode("1","Alle Mitschnitte","LoadAusstrahlung",True),
+ TreeNode("2","Alle Podcasts","LoadPodcasts",True),
+ ];
+
+ #Zip Archiv einlesen
a=self.loadAndUnzip();
- print a
try:
self.xml_cont = minidom.parseString(a);
except:
@@ -58,14 +59,73 @@ class BayerischesFSMediathek(Mediathek):
TreeNode("0","Plugin Broken, Sry ;)","http://LoadAll",False,initCount),
);
return;
- displayItems=[];
+
+ #Alle Sendungen einlesen
+ self.broadcasts = {}
+ for itemNode in
self.xml_cont.getElementsByTagName("sendungen")[0].getElementsByTagName("sendung"):
+ broadcast = self.extractBroadcastInformation(itemNode);
+ self.broadcasts[broadcast['id']] = broadcast;
+
+ #Sendungen raussuchen, für die es Mitschnitte gibt
+ self.sendungen = {}
for itemNode in self.xml_cont.getElementsByTagName("ausstrahlung"):
- displayItem = self.extractVideoInformation(itemNode);
- if(displayItem is not None):
- displayItems.append(displayItem);
+ sender = itemNode.getAttribute("sender");
+ sendung = self.readText(itemNode,"sendung")
+ if not self.broadcasts[sendung]['sender']:
+ self.broadcasts[sendung]['sender'] = sender
+ if self.broadcasts[sendung]['sender'] != self.channel:
+ self.broadcasts[sendung]['display'] = False
+ else:
+ videos = itemNode.getElementsByTagName("videos")[0];
+ if videos.hasChildNodes():
+ self.broadcasts[sendung]['display'] = True
+
+ #Sendungen anzeigen
+ displayItems=[];
+ for broadcast in self.broadcasts.itervalues():
+ if broadcast['display']:
+ displayItems.append(broadcast);
+
+ x=3
+ for displayItem in sorted(displayItems, key = lambda
item:item['name'].lower(), reverse=False):
+
self.menuTree.append(TreeNode(str(x),displayItem['name'],displayItem['id'],True));
+ x = x+1
+
+ def buildPageMenu(self, link, initCount, searchText = ""):
+ self.gui.log("buildPageMenu: "+link);
+ displayItems=[];
+ if not link == "LoadPodcasts":
+ #Mitschnitte
+ for itemNode in self.xml_cont.getElementsByTagName("ausstrahlung"):
+ sendung = self.readText(itemNode,"sendung")
+ if self.broadcasts[sendung]['sender'] == self.channel:
+ if link == "LoadAusstrahlung" or link == "LoadAll" or link ==
"LoadSearch" or link == sendung:
+ picture = self.broadcasts[sendung]["node"].getAttribute("bild")
+ displayItem = self.extractVideoInformation(itemNode, picture,
searchText);
+ if(displayItem is not None):
+ displayItems.append(displayItem);
+ if not link == "LoadAusstrahlung":
+ #Podcasts
+ for itemNode in self.broadcasts.itervalues():
+ if itemNode['sender'] == self.channel:
+ if link == "LoadAll" or link == "LoadPodcasts" or link ==
"LoadSearch" or link == itemNode['id'] :
+ if
itemNode["node"].getElementsByTagName("podcasts")[0].hasChildNodes():
+ podcasts = itemNode["node"]
+ for podcastFeed in
podcasts.getElementsByTagName("podcasts")[0].getElementsByTagName("feed"):
+ picture = self.readText(podcastFeed,"image")
+ for podcastNode in podcastFeed.getElementsByTagName("podcast"):
+ displayItem =
self.extractPodcastInformation(podcastNode,picture, searchText);
+ if(displayItem is not None):
+ displayItems.append(displayItem);
+
itemCount = len(displayItems) +initCount
for displayItem in sorted(displayItems, key = lambda item:item.date,
reverse=True):
self.gui.buildVideoLink(displayItem,self,itemCount);
+
+ def searchVideo(self, searchText):
+ searchText = searchText.lower()
+ self.buildPageMenu("LoadSearch", 0, searchText)
+
def readText(self,node,textNode):
try:
node = node.getElementsByTagName(textNode)[0].firstChild;
@@ -112,41 +172,45 @@ class BayerischesFSMediathek(Mediathek):
def parseDate(self,dateString):
return time.strptime(dateString,"%Y-%m-%dT%H:%M:%S");
+
+ def extractBroadcastInformation(self,itemNode):
+ broadcast = {}
+ broadcast["id"] = itemNode.getAttribute("id")
+ broadcast["name"] = itemNode.getAttribute("name")
+ broadcast["bild"] = itemNode.getAttribute("bild")
+ broadcast["sender"] = None
+ if itemNode.getElementsByTagName("podcasts")[0].hasChildNodes() and
self.channel == "bfs":
+ broadcast["display"] = True
+ else:
+ broadcast["display"] = False
+ broadcast["node"] = itemNode
+ return broadcast
- def extractVideoInformation(self, itemNode):
+ def extractVideoInformation(self, itemNode, picture = "", searchText = ""):
title = self.readText(itemNode,"titel");
dateString = self.readText(itemNode,"beginnPlan");
pubDate = self.parseDate(dateString);
- try:
- subtitle = self.readText(itemNode,"nebentitel");
- except:
- subtitle = "";
+ subtitle = self.readText(itemNode,"nebentitel");
+
+ description = self.readText(itemNode,"beschreibung");
- try:
- description = self.readText(itemNode,"beschreibung");
- except:
- description = "";
- try:
- picture = self.readText(itemNode,"bild");
- except:
- picture="";
-
+ if not searchText == "":
+ if not searchText in title.lower() and not searchText in
description.lower():
+ return None;
+
links = {};
- links[0] = SimpleLink("broken", 0);
- links[1] = SimpleLink("broken", 0);
- links[2] = SimpleLink("broken", 0);
try:
videos = itemNode.getElementsByTagName("videos")[0];
if not videos.hasChildNodes():
- print "no videos";
+ #print "no videos";
return None;
for videotag in videos.getElementsByTagName("video"):
- print videotag.attributes;
+ #print videotag.attributes;
if (not videotag.hasAttribute("host")):
return None;
link = "rtmp://" + videotag.attributes["host"].value + "/" +
videotag.attributes["application"].value + "/";
@@ -164,6 +228,34 @@ class BayerischesFSMediathek(Mediathek):
return None;
- return DisplayObject(title,subtitle,picture,description,links,True,
pubDate)
+ startBei = (self.readText(itemNode,"startBei"));
+ endeBei = (self.readText(itemNode,"endeBei"));
+
+ duration = 0
+ if startBei.strip() and endeBei.strip():
+ duration = str((int(endeBei)+int(startBei))/1000)
+
+ return DisplayObject(title,subtitle,picture,description,links,True,
pubDate, duration)
+
+ def extractPodcastInformation(self, itemNode, picture = "", searchText = ""):
+ title = self.readText(itemNode,"title");
+
+ dateString = self.readText(itemNode,"pubdate");
+ pubDate = self.parseDate(dateString);
+
+ description = self.readText(itemNode,"description");
+
+ duration = self.readText(itemNode,"duration");
+
+ link =
itemNode.getElementsByTagName("enclosure")[0].getAttribute("streamurl");
+
+ links = {};
+ links[0] = SimpleLink(link, 0);
+
+ if not searchText == "":
+ if not searchText in title.lower() and not searchText in
description.lower():
+ return None;
+
+ return DisplayObject(title,"",picture,description,links,True, pubDate,
duration)
diff --git a/plugin.video.mediathek/mediathek/dreisat.py
b/plugin.video.mediathek/mediathek/dreisat.py
index 0e477be..2912ce7 100644
--- a/plugin.video.mediathek/mediathek/dreisat.py
+++ b/plugin.video.mediathek/mediathek/dreisat.py
@@ -85,11 +85,11 @@ class DreiSatMediathek(Mediathek):
link = "/mediathek/mediathek.php\\?obj=\\d+";
self.regex_searchResult = re.compile("href=\""+link+"\"
class=\"media_result_thumb\"");
self.regex_searchResultLink = re.compile(link)
- self.regex_searchLink = re.compile("http://wstreaming.zdf.de/.*?\\.asx")
+ self.regex_searchLink =
re.compile("http://(w|f)streaming.zdf.de/.*?(\\.asx|\\.smil)")
self.regex_searchTitle = re.compile("<h2>.*</h2>");
self.regex_searchDetail = re.compile("<span class=\"text\">.*");
self.regex_searchDate = re.compile("\\d{2}.\\d{2}.\\d{4}");
- self.regex_searchImage =
re.compile("/dynamic/mediathek/stills/\\d*_big\\.jpg");
+ self.regex_searchImage =
re.compile("(/dynamic/mediathek/stills/|/mediaplayer/stills/)\\d*_big\\.jpg");
self.replace_html = re.compile("<.*?>");
def buildPageMenu(self, link, initCount):
@@ -126,6 +126,7 @@ class DreiSatMediathek(Mediathek):
videoLink = self.rootLink+objectLink+"&mode=play";
videoPage = self.loadPage(videoLink);
video = self.regex_searchLink.search(videoPage).group();
+ video = video.replace("fstreaming","wstreaming").replace(".smil",".asx");
links = {}
links[2] = SimpleLink(video,0)
self.gui.buildVideoLink(DisplayObject(title,"",self.rootLink +
image,detail,links,True, pubDate),self,len(results));
@@ -180,5 +181,6 @@ class DreiSatMediathek(Mediathek):
links[1] = SimpleLink(url, size);
else:
links[2] = SimpleLink(url, size);
-
self.gui.buildVideoLink(DisplayObject(title,"",picture,description,links,True,
pubDate),self,nodeCount);
+ if links:
+
self.gui.buildVideoLink(DisplayObject(title,"",picture,description,links,True,
pubDate),self,nodeCount);
diff --git a/plugin.video.mediathek/mediathek/ndr.py
b/plugin.video.mediathek/mediathek/ndr.py
index 3a625f5..e240e3c 100644
--- a/plugin.video.mediathek/mediathek/ndr.py
+++ b/plugin.video.mediathek/mediathek/ndr.py
@@ -26,75 +26,66 @@ class NDRMediathek(Mediathek):
def name(self):
return "NDR";
def isSearchable(self):
- return False;
+ return True;
def __init__(self, simpleXbmcGui):
self.gui = simpleXbmcGui;
- if(self.gui.preferedStreamTyp == 0):
- self.baseType = "video/x-ms-asf";
- elif (self.gui.preferedStreamTyp == 1):
- self.baseType = "video/x-ms-asf"
- elif (self.gui.preferedStreamTyp == 2):
- self.baseType ="video/x-ms-asf";
+ if(self.gui.preferedStreamTyp == 0): #http
+ self.baseType = "http";
+ elif (self.gui.preferedStreamTyp == 1): #rtmp
+ self.baseType = "rtmp"
+ elif (self.gui.preferedStreamTyp == 2): #mms
+ self.baseType ="mms";
+# elif (self.gui.preferedStreamTyp == 3): #mov
+# self.baseType ="mov";
else:
- self.baseType ="video/quicktime";
-
- self.menuTree = (
- TreeNode("0","Die neuesten
Videos","http://www.ndr.de/mediathek/videoliste100-rss.xml",True),
- );
+ self.baseType ="rtmp";
- self.regex_extractVideoLink =
re.compile("mms://ndr\.wmod\.llnwd\.net/.*?\.wmv");
-
+ self.pageSize = "30";
+
self.rootLink = "http://www.ndr.de"
- self.searchLink = 'http://www.3sat.de/mediathek/mediathek';
- link = "/mediathek/mediathek.php\\?obj=\\d+";
- self.regex_searchResult = re.compile("href=\""+link+"\"
class=\"media_result_thumb\"");
- self.regex_searchResultLink = re.compile(link)
- self.regex_searchLink = re.compile("http://wstreaming.zdf.de/.*?\\.asx")
- self.regex_searchTitle = re.compile("<h2>.*</h2>");
- self.regex_searchDetail = re.compile("<span class=\"text\">.*");
- self.regex_searchDate = re.compile("\\d{2}.\\d{2}.\\d{4}");
- self.regex_searchImage =
re.compile("/dynamic/mediathek/stills/\\d*_big\\.jpg");
- self.replace_html = re.compile("<.*?>");
+ self.menuLink =
self.rootLink+"/mediathek/mediathek100-mediathek_medium-tv_searchtype-"
+ self.searchLink = self.menuLink+"fulltext_pageSize-"+self.pageSize+".xml?";
+
+ self.regex_extractVideoLink =
re.compile("rtmpt://ndr.fcod.llnwd.net/a3715/d1/flashmedia/streams/ndr/(.*\\.)(hi.mp4|lo.flv)");
+
+ self.rtmpBaseLink =
"rtmpt://ndr.fcod.llnwd.net/a3715/d1/flashmedia/streams/ndr/";
+ self.mmsBaseLink = "mms://ndr.wmod.llnwd.net/a3715/d1/msmedia/";
+ self.httpBaseLink = "http://media.ndr.de/progressive/";
+
+ self.menuTree = [
+ TreeNode("0","Die neuesten
Videos",self.menuLink+"teasershow_pageSize-"+self.pageSize+".xml",True),
+ ];
+
+ broadcastsLink = self.menuLink+"broadcasts.xml"
+ broadcastsLinkPage = self.loadConfigXml(broadcastsLink);
+
+ menuNodes = broadcastsLinkPage.getElementsByTagName("broadcast");
+ displayObjects = [];
+ x = 1
+ for menuNode in menuNodes:
+ menuId = menuNode.getAttribute('id')
+ menuItem = unicode(menuNode.firstChild.data)
+ menuLink =
self.rootLink+"/mediathek/mediathek100-mediathek_medium-tv_broadcast-"+menuId+"_pageSize-"+self.pageSize+".xml"
+ self.menuTree.append(TreeNode(str(x),menuItem,menuLink,True));
+ x = x+1
def buildPageMenu(self, link, initCount):
self.gui.log("buildPageMenu: "+link);
+
rssFeed = self.loadConfigXml(link);
self.extractVideoObjects(rssFeed, initCount);
def searchVideo(self, searchText):
- values ={'mode':'search',
- 'query':searchText,
- 'red': '',
- 'query_time': '',
- 'query_sort': '',
- 'query_order':''
- }
- mainPage = self.loadPage(self.searchLink,values);
- results = self.regex_searchResult.findall(mainPage);
- for result in results:
- objectLink = self.regex_searchResultLink.search(result).group();
- infoLink = self.rootLink+objectLink
- infoPage = self.loadPage(infoLink);
- title = self.regex_searchTitle.search(infoPage).group();
- detail = self.regex_searchDetail.search(infoPage).group();
-
- image = self.regex_searchImage.search(infoPage).group();
- title = self.replace_html.sub("", title);
- detail = self.replace_html.sub("", detail);
- try:
- dateString = self.regex_searchDate.search(infoPage).group();
- pubDate = time.strptime(dateString,"%d.%m.%Y");
- except:
- pubDate = time.gmtime();
-
- videoLink = self.rootLink+objectLink+"&mode=play";
- videoPage = self.loadPage(videoLink);
- video = self.regex_searchLink.search(videoPage).group();
- links = {}
- links[2] = SimpleLink(video,0)
- self.gui.buildVideoLink(DisplayObject(title,"",self.rootLink +
image,detail,links,True, pubDate),self,len(results));
-
+ searchText = searchText.replace( u'\xf6',"oe")
+ searchText = searchText.replace( u'\xe4',"ae")
+ searchText = searchText.replace( u'\xfc',"ue")
+ searchText = searchText.replace( u'\xdf',"ss")
+ searchText = searchText.encode("latin1")
+ searchText = urllib.urlencode({"searchtext" : searchText})
+ self.buildPageMenu(self.searchLink+searchText,0);
+ print searchText
+
def readText(self,node,textNode):
try:
node = node.getElementsByTagName(textNode)[0].firstChild;
@@ -105,47 +96,74 @@ class NDRMediathek(Mediathek):
def loadConfigXml(self, link):
self.gui.log("load:"+link)
xmlPage = self.loadPage(link);
- return minidom.parseString(xmlPage);
+ try:
+ xmlDom = minidom.parseString(xmlPage);
+ except:
+ xmlDom = False
+ return xmlDom;
def extractVideoObjects(self, rssFeed, initCount):
- nodes = rssFeed.getElementsByTagName("item");
+ nodes = rssFeed.getElementsByTagName("mediaItem");
nodeCount = initCount + len(nodes)
- displayObjects = [];
for itemNode in nodes:
- displayObjects.append(self.extractVideoInformation(itemNode,nodeCount));
- sorted(displayObjects, key = lambda item:item.date, reverse=True);
- for displayObject in displayObjects:
- self.gui.buildVideoLink(displayObject,self,nodeCount);
+ self.extractVideoInformation(itemNode,nodeCount);
+
def parseDate(self,dateString):
dateString = regex_dateString.search(dateString).group();
return time.strptime(dateString,"%Y-%m-%d");
- def loadVideoLinks(self, link):
- videoPage = self.loadPage(link);
- links = {};
- for link in self.regex_extractVideoLink.finditer(videoPage):
- link = link.group();
- if link.find("wm.lo"):
- links[0] = SimpleLink(link, 0);
- if link.find("wm.hi"):
- links[1] = SimpleLink(link, 0);
- if link.find("wm.hq"):
- links[2] = SimpleLink(link, 0);
- return links;
+ def loadVideoLinks(self, videoNode):
+ videoSources = videoNode.getElementsByTagName("sources")[0]
+ videoSource = self.readText(videoSources, "source")
+
+ videoInfo = self.regex_extractVideoLink.match(videoSource).group(1)
- def extractVideoInformation(self, itemNode, nodeCount):
- title = self.readText(itemNode,"title");
- dateString = self.readText(itemNode,"dc:date");
- pubDate = self.parseDate(dateString);
+ link = {}
+ if self.baseType == "http":
+ link[0] = self.httpBaseLink+videoInfo+"lo.mp4";
+ link[1] = self.httpBaseLink+videoInfo+"hi.mp4";
+ link[2] = self.httpBaseLink+videoInfo+"hq.mp4";
+ elif self.baseType == "mms":
+ link[0] = self.mmsBaseLink+videoInfo+"wm.lo.wmv";
+ link[1] = self.mmsBaseLink+videoInfo+"wm.hi.wmv";
+ link[2] = self.mmsBaseLink+videoInfo+"wm.hq.wmv";
+ else:
+ link[0] = self.rtmpBaseLink+videoInfo+"lo.mp4";
+ link[1] = self.rtmpBaseLink+videoInfo+"hi.mp4";
+ link[2] = self.rtmpBaseLink+videoInfo+"hq.mp4";
- descriptionNode = self.readText(itemNode,"description");
- description = unicode(descriptionNode);
+ links = {};
+ links[0] = SimpleLink(link[0], 0);
+ links[1] = SimpleLink(link[1], 0);
+ links[2] = SimpleLink(link[2], 0);
- picture = self.readText(itemNode,"mp:data");
- videoPageLink = self.readText(itemNode,"link");
+ return links;
- links = self.loadVideoLinks(videoPageLink);
- return DisplayObject(title,"",picture,description,links,True, None);
+ def extractVideoInformation(self, itemNode, nodeCount):
+ videoId = itemNode.getAttribute("id")
+ dateString = self.readText(itemNode,"date");
+ pubDate = self.parseDate(dateString);
+
+ videoPage =
self.rootLink+"/fernsehen/sendungen/media/"+videoId+"-avmeta.xml"
+ videoNode = self.loadConfigXml(videoPage)
+
+ if videoNode:
+ videoNode = videoNode.getElementsByTagName("video")[0]
+ title = self.readText(videoNode,"headline");
+ description = self.readText(videoNode,"teaser");
+ duration = self.readText(videoNode,"duration");
+
+ imageNode =
videoNode.getElementsByTagName("images")[0].getElementsByTagName("image")
+ if len(imageNode):
+ imageNode =imageNode[0]
+ imageNode = imageNode.getElementsByTagName("urls")[0]
+ picture = self.readText(imageNode, "url")
+ else:
+ picture = None
+ links = self.loadVideoLinks(videoNode)
+
+
self.gui.buildVideoLink(DisplayObject(title,"",picture,description,links,True,pubDate,duration),self,nodeCount);
+
diff --git a/plugin.video.mediathek/mediathek/wdr.py
b/plugin.video.mediathek/mediathek/wdr.py
index 69e0538..6d99c53 100644
--- a/plugin.video.mediathek/mediathek/wdr.py
+++ b/plugin.video.mediathek/mediathek/wdr.py
@@ -22,6 +22,7 @@ regex_dateString = re.compile("\\d{4}-\\d{2}-\\d{2}");
class WDRMediathek(Mediathek):
def __init__(self, simpleXbmcGui):
self.gui = simpleXbmcGui;
+ self.pageSize = 20; #max 49;
self.rootLink = "http://www.wdr.de"
self.menuTree = (
TreeNode("0","Neuste
Videos",self.rootLink+"/mediathek/rdf/regional/index.xml",True),
@@ -109,10 +110,11 @@ class WDRMediathek(Mediathek):
)
- self._regex_extractTitle = re.compile("<title>.*?</title>");
+ self._regex_extractTitle = re.compile("<h1>.*?<span class=\"inv\">");
self._regex_extractDescription = re.compile("<meta name=\"description\"
content=\"(.|\\s)*?\" />");
self._regex_extractPicture = re.compile("<link rel=\"image_src\"
href=\".*?\" />");
self._regex_extractDate = re.compile("<meta name=\"DC.Date\"
content=\".*?\" />");
+ self._regex_extractDuration = re.compile("\\((.*)\\)<span class=\"inv\">");
self._regex_extractVideoPage = re.compile("<a
href=\"/mediathek/html/.*?\\.xml\" title=\".*?\".*?>");
self._regex_extractLink = re.compile("/mediathek/html/.*?\\.xml");
@@ -124,6 +126,7 @@ class WDRMediathek(Mediathek):
self.replace_html = re.compile("<.*?>");
self.replace_tag = re.compile("(<meta name=\".*?\" content=\"|<link
rel=\"image_src\" href=\"|\" />)");
+ self.searchLink =
"http://www.wdr.de/mediathek/html/regional/suche/index.xml?wsSucheAusgabe=liste&wsSucheSuchart=volltext&wsSucheMedium=av&suche_submit=Suche+starten&wsSucheBegriff="
@@ -131,14 +134,16 @@ class WDRMediathek(Mediathek):
def name(self):
return "WDR";
def isSearchable(self):
- return False;
+ return True;
def searchVideo(self, searchText):
- pass;
+ link = self.searchLink+searchText;
+ self.buildPageMenu(link, 0, False)
def buildPageMenu(self, link, initCount, subLink = False):
+ link = link+"&rankingcount="+str(self.pageSize);
self.gui.log("MenuLink: %s"%link);
mainPage = self.loadPage(link);
@@ -181,6 +186,7 @@ class WDRMediathek(Mediathek):
description =
unicode(self._regex_extractDescription.search(mainPage).group(),'ISO-8859-1');
picture =
unicode(self._regex_extractPicture.search(mainPage).group(),'ISO-8859-1');
date = self._regex_extractDate.search(mainPage).group();
+ duration = self._regex_extractDuration.search(mainPage).group(1);
title = self.replace_html.sub("", title);
description = self.replace_tag.sub("",description);
@@ -201,7 +207,7 @@ class WDRMediathek(Mediathek):
linkString = self._regex_extractAudioLink.search(mainPage).group();
links[0] = self.extractLink(linkString);
- return DisplayObject(title,"",picture,description,links,True, date)
+ return DisplayObject(title,"",picture,description,links,True, date,
duration)
def extractLink(self, linkString):
if(linkString.find("mediartmp://")>-1):
diff --git a/plugin.video.mediathek/simplexbmc.py
b/plugin.video.mediathek/simplexbmc.py
index 3c5075f..54057a4 100644
--- a/plugin.video.mediathek/simplexbmc.py
+++ b/plugin.video.mediathek/simplexbmc.py
@@ -88,7 +88,8 @@ class SimpleXbmcGui(object):
"date": time.strftime("%d.%m.%Y",displayObject.date),
"year": int(time.strftime("%Y",displayObject.date)),
"title": title,
- "plot": transformHtmlCodes(displayObject.description)
+ "plot": transformHtmlCodes(displayObject.description),
+ "duration": displayObject.duration
});
except:
pass;
-----------------------------------------------------------------------
Summary of changes:
plugin.video.mediathek/addon.xml | 6 +-
plugin.video.mediathek/changelog.txt | 1 +
plugin.video.mediathek/mediathek/__init__.py | 3 +-
plugin.video.mediathek/mediathek/bayerisches.py | 160 +++++++++++++++----
plugin.video.mediathek/mediathek/dreisat.py | 8 +-
plugin.video.mediathek/mediathek/ndr.py | 188 +++++++++++++----------
plugin.video.mediathek/mediathek/wdr.py | 14 ++-
plugin.video.mediathek/simplexbmc.py | 3 +-
8 files changed, 252 insertions(+), 131 deletions(-)
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons