summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorraptor2101 <raptor2101@mykolab.com>2017-11-01 13:26:56 +0100
committerraptor2101 <raptor2101@mykolab.com>2017-11-01 13:26:56 +0100
commit632c7193dda85ac5d1f2d5714f8cb47e2c4f352f (patch)
tree8f31b4ca9589e50f46af3d63d033a490c2f5717c
parent828401887d9813b6f161f8a5c6f4890b3ed93994 (diff)
[plugin.video.mediathek] 0.8.5
-rw-r--r--plugin.video.mediathek/addon.xml2
-rw-r--r--plugin.video.mediathek/changelog.txt1
-rw-r--r--plugin.video.mediathek/mediathek/ard.py27
-rw-r--r--plugin.video.mediathek/mediathek/kika.py74
-rw-r--r--plugin.video.mediathek/simplexbmc.py2
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 @@
<addon
id="plugin.video.mediathek"
name="Mediathek"
- version="0.8.4"
+ version="0.8.5"
provider-name="Raptor 2101">
<requires>
<import addon="xbmc.python" version="2.25.0"/>
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("<br/>","");
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("<a href=\"(.*?/videos/video\\d+?)\\.html\"");
- self.regex_configLinks=re.compile("{dataURL:'http://www.kika.de(/.*?-avCustom.xml)'}");
+ self.regex_allVideosLinks=re.compile("<a href=\"(.*?/sendungen/allevideos.*?\\.html)\"");
+ self.regex_configLinks=re.compile("\\{dataURL:'https{0,1}:\\/\\/www\\.kika\\.de(\\/.*?-avCustom.*\\.xml)'\\}");
+ self.selector_allVideoPage = "div.mod > div.boxCon > div.box > div.teaser > a.linkAll";
self.selector_videoPages = "div.mod > div.box > div.teaser > a.linkAll";
self.selector_seriesPages = "div.modCon > div.mod > div.boxCon > div.boxBroadcastSeries > div.teaser > a.linkAll";
self.regex_xml_channel=re.compile("<channelName>(.*?)</channelName>");
self.regex_xml_title=re.compile("<title>(.*?)</title>");
+ self.regex_xml_time=re.compile("<webTime>(.*?)</webTime>");
self.regex_xml_image=re.compile("<teaserimage>\\s*?<url>(.*?)</url>");
self.regex_xml_videoLink=re.compile("<asset>\\s*?<profileName>(.*?)</profileName>.*?<progressiveDownloadUrl>(.*?)</progressiveDownloadUrl>\\s*?</asset>",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;