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

Reply via email to