The branch, eden has been updated
       via  0ce7acea13f61a5d2128f4d7b48bfa59c6cc140e (commit)
       via  6834295ef0bbcf1c0108b418b75b5f11c3038b81 (commit)
      from  cbf677907de8625a9724c99b0661ad72458a780c (commit)

- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=0ce7acea13f61a5d2128f4d7b48bfa59c6cc140e

commit 0ce7acea13f61a5d2128f4d7b48bfa59c6cc140e
Author: spiff <[email protected]>
Date:   Mon Mar 12 10:29:56 2012 +0100

    [plugin.video.mediathek] updated to version 0.4.1

diff --git a/plugin.video.mediathek/addon.xml b/plugin.video.mediathek/addon.xml
index f32f1f9..67ff652 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.4.0"
+  version="0.4.1"
   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 8621733..5a34b97 100644
--- a/plugin.video.mediathek/changelog.txt
+++ b/plugin.video.mediathek/changelog.txt
@@ -1,3 +1,4 @@
+0.4.1 - FIX: Soern completed the NDR implementation
 0.4.0 - FIX: Commit FIX from soern 
 0.3.9 - ADD: KIKA (Without Kikaninchen)
 0.3.8 - FIX: 3SAT Broken Link
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/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/simplexbmc.py 
b/plugin.video.mediathek/simplexbmc.py
index e67b1d2..2b53b15 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;

http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=6834295ef0bbcf1c0108b418b75b5f11c3038b81

commit 6834295ef0bbcf1c0108b418b75b5f11c3038b81
Author: spiff <[email protected]>
Date:   Mon Mar 12 10:29:01 2012 +0100

    [plugin.video.spiegelonline] updated to version 1.1 thanks mad-max

diff --git a/.gitignore b/.gitignore
index e6894fe..8eb9e91 100644
--- a/.gitignore
+++ b/.gitignore
@@ -83,3 +83,4 @@ plugin.video.gamestar/.git
 plugin.video.onside.tv/.git
 plugin.video.onside.tv/.idea
 plugin.image.500px/.git
+plugin.video.spiegelonline/.git

-----------------------------------------------------------------------

Summary of changes:
 .gitignore                                         |    1 +
 plugin.video.mediathek/addon.xml                   |    6 +-
 plugin.video.mediathek/changelog.txt               |    1 +
 plugin.video.mediathek/mediathek/__init__.py       |    3 +-
 plugin.video.mediathek/mediathek/ndr.py            |  188 +++++++++++---------
 plugin.video.mediathek/simplexbmc.py               |    3 +-
 .../LICENSE.txt                                    |    0
 plugin.video.spiegelonline/addon.xml               |   16 ++
 plugin.video.spiegelonline/changelog.txt           |    8 +
 plugin.video.spiegelonline/default.py              |   91 ++++++++++
 plugin.video.spiegelonline/icon.png                |  Bin 0 -> 38072 bytes
 .../resources/language/English/strings.xml         |   14 ++
 .../resources/language/German/strings.xml          |   15 ++
 13 files changed, 256 insertions(+), 90 deletions(-)
 copy {plugin.audio.groove => plugin.video.spiegelonline}/LICENSE.txt (100%)
 create mode 100644 plugin.video.spiegelonline/addon.xml
 create mode 100644 plugin.video.spiegelonline/changelog.txt
 create mode 100644 plugin.video.spiegelonline/default.py
 create mode 100644 plugin.video.spiegelonline/icon.png
 create mode 100644 
plugin.video.spiegelonline/resources/language/English/strings.xml
 create mode 100644 
plugin.video.spiegelonline/resources/language/German/strings.xml


hooks/post-receive
-- 
Plugins

------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to