From 632c7193dda85ac5d1f2d5714f8cb47e2c4f352f Mon Sep 17 00:00:00 2001 From: raptor2101 Date: Wed, 1 Nov 2017 13:26:56 +0100 Subject: [plugin.video.mediathek] 0.8.5 --- plugin.video.mediathek/addon.xml | 2 +- plugin.video.mediathek/changelog.txt | 1 + plugin.video.mediathek/mediathek/ard.py | 27 ++++++------ plugin.video.mediathek/mediathek/kika.py | 74 ++++++++++++++++++++++++-------- plugin.video.mediathek/simplexbmc.py | 2 - 5 files changed, 72 insertions(+), 34 deletions(-) diff --git a/plugin.video.mediathek/addon.xml b/plugin.video.mediathek/addon.xml index 0f8d28d..cd6b021 100644 --- a/plugin.video.mediathek/addon.xml +++ b/plugin.video.mediathek/addon.xml @@ -2,7 +2,7 @@ diff --git a/plugin.video.mediathek/changelog.txt b/plugin.video.mediathek/changelog.txt index bdef090..91df365 100644 --- a/plugin.video.mediathek/changelog.txt +++ b/plugin.video.mediathek/changelog.txt @@ -1,3 +1,4 @@ +0.8.5 - FIX: KIKA and ARD 0.8.4 - CHG: ARTE JSON link changed 0.8.3 - CHG: Reimplement ARTE 0.8.2 - CHG: Reimplement ORF diff --git a/plugin.video.mediathek/mediathek/ard.py b/plugin.video.mediathek/mediathek/ard.py index 6c66ce2..658ac87 100644 --- a/plugin.video.mediathek/mediathek/ard.py +++ b/plugin.video.mediathek/mediathek/ard.py @@ -55,19 +55,19 @@ class ARDMediathek(Mediathek): )), TreeNode("2","Ausgewählte Dokus".decode("utf-8"),self.rootLink+"/tv/Ausgew%C3%A4hlte-Dokus/mehr?documentId=33649086",True), TreeNode("3","Ausgewählte Filme".decode("utf-8"),self.rootLink+"/tv/Ausgew%C3%A4hlte-Filme/mehr?documentId=33649088",True), - TreeNode("4","Alle Reportagen und Dokus",self.rootLink+"/tv/Alle-Dokus-Reportagen/mehr?documentId=29897596",True), - TreeNode("5","Alle Filme",self.rootLink+"/tv/Alle-Filme/mehr?documentId=33594630",True), - TreeNode("6","Alle Serien",self.rootLink+"/tv/Serien/mehr?documentId=26402940",True), + TreeNode("4","Alle Reportagen und Dokus",self.rootLink+"/tv/dokus",True), + TreeNode("5","Alle Filme",self.rootLink+"/tv/filme",True), + TreeNode("6","Nachrichten",self.rootLink+"/tv/nachrichten",True), TreeNode("7","Themen",self.rootLink+"/tv/Themen/mehr?documentId=21301810",True), TreeNode("8","Rubriken","",False,( TreeNode("8.0","Kinder",self.rootLink+"/tv/Kinder/Tipps?documentId=21282542",True), - TreeNode("8.1","Unterhaltung & Comedy",self.rootLink+"/tv/Unterhaltung-Comedy/mehr?documentId=21282544",True), - TreeNode("8.2","Kultur",self.rootLink+"/tv/Kultur/mehr?documentId=21282546",True), - TreeNode("8.3","Wissen",self.rootLink+"/tv/Wissen/mehr?documentId=21282530",True), - TreeNode("8.4","Politik",self.rootLink+"/tv/Politik/mehr?documentId=29684598",True), - TreeNode("8.5","Ratgeber",self.rootLink+"/tv/Ratgeber/mehr?documentId=27112994",True), - TreeNode("8.6","Krimi",self.rootLink+"/tv/Krimi/mehr?documentId=27258656",True), - TreeNode("8.7","Reise",self.rootLink+"/tv/Reise/mehr?documentId=29769608",True), + TreeNode("8.1","Unterhaltung & Comedy",self.rootLink+"/tv/unterhaltung",True), + TreeNode("8.2","Kultur",self.rootLink+"/tv/kultur",True), + TreeNode("8.3","Wissen",self.rootLink+"/tv/wissen",True), + TreeNode("8.4","Politik",self.rootLink+"/tv/politik",True), + TreeNode("8.5","Ratgeber",self.rootLink+"/tv/ratgeber",True), + TreeNode("8.6","Sport",self.rootLink+"/tv/sport",True), + TreeNode("8.7","Reise",self.rootLink+"/tv/reise",True), )), ) self.configLink = self.rootLink+"/play/media/%s?devicetype=pc&feature=flash" @@ -136,7 +136,7 @@ class ARDMediathek(Mediathek): self.gui.buildVideoLink(DisplayObject(title,subTitle,"","",link,False),self,counter); for element in videoElements: videoId = element.group(1); - title = element.group(2).decode('utf-8'); + title = element.group(2).decode('utf-8').replace("
",""); subTitle = element.group(3).decode('utf-8'); if element.group(4): datestring = element.group(4).decode('utf-8'); @@ -155,7 +155,10 @@ class ARDMediathek(Mediathek): videoLinks = {} for match in self.regex_videoLinks.finditer(videoPage): quality = int(match.group(1)); - link = SimpleLink(match.group(2),0); + link = match.group(2); + if(link.startswith("//")): + link = "http:"+link; + link = SimpleLink(link,0); if(quality > 0): quality -= 1 diff --git a/plugin.video.mediathek/mediathek/kika.py b/plugin.video.mediathek/mediathek/kika.py index 238ba9d..e17a1dc 100644 --- a/plugin.video.mediathek/mediathek/kika.py +++ b/plugin.video.mediathek/mediathek/kika.py @@ -58,11 +58,14 @@ class KIKA(Mediathek): ) self.regex_videoLinks=re.compile("(.*?)"); self.regex_xml_title=re.compile("(.*?)"); + self.regex_xml_time=re.compile("(.*?)"); self.regex_xml_image=re.compile("\\s*?(.*?)"); self.regex_xml_videoLink=re.compile("\\s*?(.*?).*?(.*?)\\s*?",re.DOTALL) self.regex_videoLink=re.compile("rtmp://.*?\.mp4"); @@ -70,10 +73,12 @@ class KIKA(Mediathek): def name(self): return "KI.KA"; + @classmethod def isSearchable(self): return False; - def searchVideo(self, searchText): + @classmethod + def searchVideo(self,searchText): return; def buildVideoLink(self,pageLink): @@ -89,7 +94,7 @@ class KIKA(Mediathek): for match in self.regex_xml_videoLink.finditer(xmlPage): profile = match.group(1); directLink = match.group(2); - self.gui.log("%s %s"%(profile,directLink)); + #self.gui.log("%s %s"%(profile,directLink)); if("MP4 Web S" in profile): links[0] = SimpleLink(directLink, 0); if("MP4 Web L" in profile): @@ -99,17 +104,39 @@ class KIKA(Mediathek): if("MP4 Web XL" in profile): links[3] = SimpleLink(directLink, 0); + date = None + date = time.strptime(unicode(self.regex_xml_time.search(xmlPage).group(1),"UTF-8"),u"%d.%m.%Y %H:%M"); if(channel is not None): - return DisplayObject(channel,title,image,"",links,True, None); + return DisplayObject(channel,title,image,"",links,True, date); else: - return DisplayObject(title,"",image,"",links,True, None); + return DisplayObject(title,"",image,"",links,True, date); def buildPageMenu(self, link, initCount): + videoLinks = set() pageContent = self.loadPage(link); htmlPage = BeautifulSoup(pageContent, 'html.parser') + htmlElements = htmlPage.select(self.selector_videoPages) - videoLinks = set() + self.gui.log("found %d htmlElements"%len(htmlElements)); + self.extractConfigLinks(videoLinks,pageContent); + self.extractVideoLinks(videoLinks,htmlElements); + if(len(videoLinks) == 0): + htmlElements = htmlPage.select(self.selector_allVideoPage) + self.extractVideoLinks(videoLinks,htmlElements); + count = initCount + len(videoLinks) + + self.extractSubFolders(htmlPage,count); + displayObects = set() + for link in videoLinks: + displayObject = self.buildVideoLink(link); + displayObects.add(displayObject); + displayObects_sorted = sorted(displayObects, key=lambda displayObject: displayObject.date) + self.gui.log("found %d display obj "%len(displayObects)) + for displayObject in displayObects_sorted: + self.gui.buildVideoLink(displayObject,self, count); + + def extractVideoLinks(self,videoLinks,htmlElements): for item in htmlElements: link = self.rootLink+item['href']; videoPage = self.loadPage(link); @@ -117,24 +144,33 @@ class KIKA(Mediathek): link=match.group(1)+"-avCustom.xml"; if(link not in videoLinks): videoLinks.add(link) - directLinks = list(self.regex_configLinks.finditer(pageContent)); + self.gui.log("found %d video links"%len(videoLinks)) + + def extractConfigLinks(self,videoLinks,pageContent): + directLinks = list(self.regex_configLinks.finditer(pageContent)); for match in directLinks: link = match.group(1); if(link not in videoLinks): - videoLinks.add(link) - self.gui.log("found %d video links"%len(videoLinks)) - count = initCount + len(videoLinks) - for link in videoLinks: - displayObject = self.buildVideoLink(link); - self.gui.buildVideoLink(displayObject,self, count); - if(len(videoLinks) > 0): - return; - htmlElements = htmlPage.select(self.selector_seriesPages); - count = count + len(htmlElements) + videoLinks.add(link) + self.gui.log("found %d config links"%len(videoLinks)) + + def extractSubFolders(self, htmlPage,initCount): + htmlElements = htmlPage.select(self.selector_seriesPages) + htmlPage.select(self.selector_allVideoPage); self.gui.log("found %d page links"%len(htmlElements)) + count = initCount + len(htmlElements) + displayObects = set() for item in htmlElements: - self.gui.log(item.prettify()); link = self.rootLink+item['href']; title = item['title']; - displayObject = DisplayObject(title,"",None,"",link,False, None); + #i'am uncertain why this is needed. a.linkAll should be found by selector_allVideoPage + if(item.has_attr('onclick')): + self.gui.log("onclick detected - skip link") + continue; + if(title == ""): + continue; + displayObject = DisplayObject("Alle Videos",title,"","",link,False); + displayObects.add(displayObject); + displayObects_sorted = sorted(displayObects, key=lambda displayObject: displayObject.title) + for displayObject in displayObects_sorted: self.gui.buildVideoLink(displayObject,self, count); + return count; diff --git a/plugin.video.mediathek/simplexbmc.py b/plugin.video.mediathek/simplexbmc.py index 1529b83..b4b3cb6 100644 --- a/plugin.video.mediathek/simplexbmc.py +++ b/plugin.video.mediathek/simplexbmc.py @@ -92,8 +92,6 @@ class SimpleXbmcGui(object): metaData["duration"] = int(displayObject.duration); if(displayObject.date is not None): - self.log(time.strftime("%d.%m.%Y",displayObject.date)); - self.log(time.strftime("%Y",displayObject.date)); metaData["date"] =time.strftime("%d.%m.%Y",displayObject.date); metaData["year"] =int(time.strftime("%Y",displayObject.date)); return metaData; -- cgit v1.2.3