Advertisement
Guest User

Untitled

a guest
Oct 19th, 2011
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 16.14 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. #-------------LicenseHeader--------------
  3. # plugin.video.Mediathek - Gives acces to the most video-platforms from german public service broadcaster
  4. # Copyright (C) 2010  Raptor 2101 [raptor2101@gmx.de]
  5. #
  6. # This program is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation, either version 3 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18. import re, time;
  19. from mediathek import *
  20. from xml.dom import minidom;
  21. regex_dateString = re.compile("\\d{4}-\\d{2}-\\d{2}");
  22. class WDRMediathek(Mediathek):
  23.   def __init__(self, simpleXbmcGui):
  24.     self.gui = simpleXbmcGui;
  25.     self.rootLink = "http://www.wdr.de"
  26.     self.menuTree = (
  27.                       TreeNode("0","Neuste Videos",self.rootLink+"/mediathek/rdf/regional/index.xml",True),
  28.                       TreeNode("1","Sendungen von A-Z","",False,
  29.                         (
  30.                           TreeNode("1.0",u"A40","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=A40",True),
  31.                           TreeNode("1.1",u"Aktuelle Stunde","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Aktuelle+Stunde",True),
  32.                           TreeNode("1.2",u"Am Sonntag","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+2+-+Der+Sonntag",True),
  33.                          
  34.                           TreeNode("1.3",u"Cosmo","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Funkhaus+Europa+-+Cosmo",True),
  35.                          
  36.                           TreeNode("1.4",u"daheim & unterwegs","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=daheim+%26+unterwegs",True),
  37.                           TreeNode("1.5",u"die story","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=die+story",True),
  38.                           TreeNode("1.6",u"Dittsche","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Dittsche",True),
  39.                          
  40.                           TreeNode("1.7",u"eins zu eins","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=eins+zu+eins",True),
  41.                          
  42.                           TreeNode("1.8",u"frauTV","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=frauTV",True),
  43.                          
  44.                           TreeNode("1.9",u"hier und heute","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Hier+und+Heute",True),
  45.                           TreeNode("1.10",u"Kabarett","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+2+-+Kabarett",True),
  46.                          
  47.                           TreeNode("1.11",u"Lokalzeit aus Aachen","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+aus+Aachen",True),
  48.                           TreeNode("1.12",u"Lokalzeit aus Düsseldorf","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+aus+D%FCsseldorf",True),
  49.                           TreeNode("1.13",u"Lokalzeit OWL","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+OWL+aktuell",True),
  50.                           TreeNode("1.14",u"Lokalzeit aus Bonn","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+aus+Bonn",True),
  51.                           TreeNode("1.15",u"Lokalzeit aus Köln","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+aus+K%F6ln",True),
  52.                           TreeNode("1.16",u"Lokalzeit Ruhr","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+Ruhr",True),
  53.                           TreeNode("1.17",u"Lokalzeit aus Dortmund","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+aus+Dortmund",True),
  54.                           TreeNode("1.18",u"Lokalzeit Bergisches Land","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+Bergisches+Land",True),
  55.                           TreeNode("1.19",u"Lokalzeit Südwestfalen","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+S%FCdwestfalen",True),
  56.                           TreeNode("1.20",u"Lokalzeit aus Duisburg","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+aus+Duisburg",True),
  57.                           TreeNode("1.21",u"Lokalzeit Münsterland","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Lokalzeit+M%FCnsterland",True),
  58.                          
  59.                           TreeNode("1.22",u"markt","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=markt",True),
  60.                           TreeNode("1.23",u"Menschen hautnah","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Menschen+hautnah",True),
  61.                           TreeNode("1.24",u"Mittagsecho","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+5+-+Mittagsecho",True),
  62.                           TreeNode("1.25",u"Mittagsmagazin","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+2+-+Mittagsmagazin",True),
  63.                           TreeNode("1.26",u"mittwochs live","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=mittwochs+live",True),
  64.                           TreeNode("1.27",u"Morgenecho","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+5+-+Morgenecho",True),
  65.                           TreeNode("1.28",u"Morgenmagazin","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+2+-+Morgenmagazin",True),
  66.                           TreeNode("1.29",u"Mosaik","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+3+-+Mosaik",True),
  67.                          
  68.                           TreeNode("1.30",u"Piazza","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Funkhaus+Europa+-+Piazza",True),
  69.                           TreeNode("1.31",u"Platz der Republik","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+5+-+Platz+der+Republik",True),
  70.                          
  71.                           TreeNode("1.32",u"Quarks & Co","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Quarks+%26+Co",True),
  72.                          
  73.                           TreeNode("1.33",u"Resonanzen","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+3+-+Resonanzen",True),
  74.                          
  75.                           TreeNode("1.34",u"Scala","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+5+-+Scala",True),
  76.                           TreeNode("1.35",u"schön hier","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=sch%F6n+hier",True),
  77.                           TreeNode("1.36",u"Servicezeit","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Servicezeit",True),
  78.                           TreeNode("1.37",u"sport inside","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=sport+inside",True),
  79.                           TreeNode("1.38",u"Stichtag","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+2+-+Stichtag",True),
  80.                          
  81.                          
  82.                           TreeNode("1.39",u"Thema NRW","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+5+-+Thema+NRW",True),
  83.                          
  84.                          
  85.                           TreeNode("1.40",u"WDR aktuell","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+aktuell",True),
  86.                           TreeNode("1.41",u"WDR sport aktuell","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+sport+aktuell",True),
  87.                           TreeNode("1.42",u"west.art","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=West.art",True),
  88.                           TreeNode("1.43",u"Westblick","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+5+-+Westblick",True),
  89.                           TreeNode("1.44",u"WESTPOL","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WESTPOL",True),
  90.                           TreeNode("1.45",u"Westzeit","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+2+-+Westzeit",True),
  91.                          
  92.                           TreeNode("1.46",u"Zeiglers wunderbare Welt des Fußballs","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Zeiglers+wunderbare+Welt+des+Fu%DFballs",True),
  93.                           TreeNode("1.47",u"ZeitZeichen","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+3+%2F+WDR+5+-+ZeitZeichen",True),
  94.                           TreeNode("1.48",u"Zimmer Frei!","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=Zimmer+Frei%21",True),
  95.                           TreeNode("1.49",u"Zwischen Rhein und Weser","http://www.wdr.de/mediathek/html/regional/ergebnisse/sendung.xml?rankingtype=sendung&rankingvalue=WDR+2+-+Zwischen+Rhein+und+Weser",True),
  96.                         )
  97.                       ),
  98.                       TreeNode("2","Themen","",False,
  99.                         (
  100.                           TreeNode("2.0","Politik","http://www.wdr.de/mediathek/html/regional/ergebnisse/schlagwort.xml?rankingvalue=Politik",True),
  101.                           TreeNode("2.1","Wirtschaft","http://www.wdr.de/mediathek/html/regional/ergebnisse/schlagwort.xml?rankingvalue=Wirtschaft",True),
  102.                           TreeNode("2.2","Kultur","http://www.wdr.de/mediathek/html/regional/ergebnisse/schlagwort.xml?rankingvalue=Kultur",True),
  103.                           TreeNode("2.3","Panorama","http://www.wdr.de/mediathek/html/regional/ergebnisse/schlagwort.xml?rankingvalue=Panorama",True),
  104.                           TreeNode("2.4","Service","http://www.wdr.de/mediathek/html/regional/ergebnisse/schlagwort.xml?rankingvalue=Service",True),
  105.                           TreeNode("2.5","Freizeit","http://www.wdr.de/mediathek/html/regional/ergebnisse/schlagwort.xml?rankingvalue=Freizeit",True),
  106.                           TreeNode("2.6","Sport","http://www.wdr.de/mediathek/html/regional/ergebnisse/schlagwort.xml?rankingvalue=Sport",True),
  107.                         )
  108.                       ),
  109.                     )
  110.                    
  111.                    
  112.     self._regex_extractTitle = re.compile("<title>.*?</title>");                
  113.     self._regex_extractDescription = re.compile("<meta name=\"description\" content=\"(.|\\s)*?\" />");
  114.     self._regex_extractPicture = re.compile("<link rel=\"image_src\" href=\".*?\" />");
  115.     self._regex_extractDate = re.compile("<meta name=\"DC.Date\" content=\".*?\" />");
  116.    
  117.     self._regex_extractVideoPage = re.compile("<a href=\"/mediathek/html/.*?\\.xml\" title=\".*?\".*?>");
  118.     self._regex_extractLink = re.compile("/mediathek/html/.*?\\.xml");
  119.    
  120.    
  121.     self._regex_extractAudioLink = re.compile(self.rootLink+"/mediathek/.*?\\.mp3");
  122.     self._regex_extractVideoLink = re.compile("(dsl|isdn)Src=rtmp://.*?\\.(mp4|flv)");
  123.    
  124.     self.replace_html = re.compile("<.*?>");
  125.     self.replace_tag = re.compile("(<meta name=\".*?\" content=\"|<link rel=\"image_src\" href=\"|\" />)");
  126.    
  127.    
  128.    
  129.    
  130.   @classmethod
  131.   def name(self):
  132.     return "WDR";
  133.   def isSearchable(self):
  134.     return False;
  135.    
  136.   def searchVideo(self, searchText):
  137.     pass;
  138.  
  139.    
  140.    
  141.   def buildPageMenu(self, link, initCount, subLink = False):
  142.     self.gui.log("MenuLink: %s"%link);
  143.     mainPage = self.loadPage(link);
  144.    
  145.     if(mainPage.startswith("<?xml version=\"1.0\"")):
  146.       self.parseXml(mainPage);
  147.     else:
  148.       self.parseHtml(mainPage);
  149.  
  150.   def parseHtml(self, htmlPage):
  151.     videoPageLinks  = list(self._regex_extractVideoPage.finditer(htmlPage));
  152.    
  153.     for videoPageLink in videoPageLinks:
  154.       link = self._regex_extractLink.search(videoPageLink.group()).group();
  155.       print link;
  156.       displayObject = self.generateDisplayObject(self.rootLink+link);
  157.       self.gui.buildVideoLink(displayObject,self,len(videoPageLinks));
  158.  
  159.   def readText(self,node,textNode):
  160.     try:
  161.       node = node.getElementsByTagName(textNode)[0].firstChild;
  162.       return unicode(node.data);
  163.     except:
  164.       return "";
  165.  
  166.   def parseDate(self,dateString):
  167.     dateString = regex_dateString.search(dateString).group();
  168.     return time.strptime(dateString,"%Y-%m-%d");
  169.    
  170.   def parseXml(self, xmlPage):
  171.     xmlPage = minidom.parseString(xmlPage);  
  172.     items = xmlPage.getElementsByTagName("item");
  173.     for itemNode in items:
  174.       link = self.readText(itemNode,"link");
  175.       displayObject = self.generateDisplayObject(link);
  176.       self.gui.buildVideoLink(displayObject,self,len(items));
  177.      
  178.   def generateDisplayObject(self,videoPageLink):
  179.     mainPage = self.loadPage(videoPageLink);
  180.     title = unicode(self._regex_extractTitle.search(mainPage).group(),'ISO-8859-1');
  181.     description = unicode(self._regex_extractDescription.search(mainPage).group(),'ISO-8859-1');
  182.     picture = unicode(self._regex_extractPicture.search(mainPage).group(),'ISO-8859-1');
  183.     date = self._regex_extractDate.search(mainPage).group();
  184.  
  185.     title =  self.replace_html.sub("", title);
  186.     description = self.replace_tag.sub("",description);
  187.     picture = self.replace_tag.sub("",picture);
  188.     date = self.parseDate(self.replace_tag.sub("",date));
  189.    
  190.     links = {};
  191.     for linkString in self._regex_extractVideoLink.finditer(mainPage):
  192.       linkString = linkString.group();
  193.       if linkString.startswith("dslSrc="):
  194.         linkString = linkString.replace("dslSrc=","");
  195.         links[1] = self.extractLink(linkString);
  196.       else:
  197.         linkString = linkString.replace("isdnSrc=","");
  198.         links[0] = self.extractLink(linkString);
  199.    
  200.     if len(links) == 0:
  201.       linkString = self._regex_extractAudioLink.search(mainPage).group();
  202.       links[0] = self.extractLink(linkString);
  203.      
  204.     return DisplayObject(title,"",picture,description,links,True, date)
  205.    
  206.   def extractLink(self, linkString):
  207.     if(linkString.find("mediartmp://")>-1):
  208.       linkString = linkString.split("mediartmp://")
  209.       return SimpleLink("rtmp://%s"%linkString[1], 0);
  210.     elif(linkString.find("mediahttp://")>-1):
  211.       linkString = linkString.split("mediahttp://")
  212.       return SimpleLink("http://%s"%linkString[1], 0);
  213.     else:
  214.       return SimpleLink(linkString, 0);
  215.  
  216.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement