# -*- coding: utf-8 -*-
#-------------LicenseHeader--------------
# plugin.video.Mediathek - Gives access to most video-platforms from German public service broadcasters
# Copyright (C) 2010 Raptor 2101 [raptor2101@gmx.de]
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
import re, time;
from bs4 import BeautifulSoup;
from mediathek import *
class KIKA(Mediathek):
def __init__(self, simpleXbmcGui):
self.gui = simpleXbmcGui;
self.rootLink = "http://www.kika.de";
self.menuTree = (
TreeNode("0","Videos",self.rootLink+"/videos/index.html",True),
TreeNode("1","Sendungen von A-Z","",False,
(
TreeNode("1.0","A",self.rootLink+"/sendungen/sendungenabisz100_page-A_zc-05fb1331.html",True),
TreeNode("1.1","B",self.rootLink+"/sendungen/sendungenabisz100_page-B_zc-1775e6d8.html",True),
TreeNode("1.2","C",self.rootLink+"/sendungen/sendungenabisz100_page-C_zc-6248eba0.html",True),
TreeNode("1.3","D",self.rootLink+"/sendungen/sendungenabisz100_page-D_zc-e090a8fb.html",True),
TreeNode("1.4","E",self.rootLink+"/sendungen/sendungenabisz100_page-E_zc-ec2376ed.html",True),
TreeNode("1.5","F",self.rootLink+"/sendungen/sendungenabisz100_page-F_zc-f76734a0.html",True),
TreeNode("1.6","G",self.rootLink+"/sendungen/sendungenabisz100_page-G_zc-34bda7c3.html",True),
TreeNode("1.7","H",self.rootLink+"/sendungen/sendungenabisz100_page-H_zc-7e25e70a.html",True),
TreeNode("1.8","I",self.rootLink+"/sendungen/sendungenabisz100_page-I_zc-b7f774f5.html",True),
TreeNode("1.9","J",self.rootLink+"/sendungen/sendungenabisz100_page-J_zc-3130680a.html",True),
TreeNode("1.10","K",self.rootLink+"/sendungen/sendungenabisz100_page-K_zc-c8f76ba1.html",True),
TreeNode("1.11","L",self.rootLink+"/sendungen/sendungenabisz100_page-L_zc-bbebc1a7.html",True),
TreeNode("1.12","M",self.rootLink+"/sendungen/sendungenabisz100_page-M_zc-00574a43.html",True),
TreeNode("1.13","N",self.rootLink+"/sendungen/sendungenabisz100_page-N_zc-b079366f.html",True),
TreeNode("1.14","O",self.rootLink+"/sendungen/sendungenabisz100_page-O_zc-febc55f5.html",True),
TreeNode("1.15","P",self.rootLink+"/sendungen/sendungenabisz100_page-P_zc-2c1a492f.html",True),
TreeNode("1.16","Q",self.rootLink+"/sendungen/sendungenabisz100_page-Q_zc-2cb019d6.html",True),
TreeNode("1.17","R",self.rootLink+"/sendungen/sendungenabisz100_page-R_zc-cab3e22b.html",True),
TreeNode("1.18","S",self.rootLink+"/sendungen/sendungenabisz100_page-S_zc-e7f420d0.html",True),
TreeNode("1.19","T",self.rootLink+"/sendungen/sendungenabisz100_page-T_zc-84a2709f.html",True),
TreeNode("1.20","U",self.rootLink+"/sendungen/sendungenabisz100_page-U_zc-a26c1157.html",True),
TreeNode("1.21","V",self.rootLink+"/sendungen/sendungenabisz100_page-V_zc-1fc26dc3.html",True),
TreeNode("1.22","W",self.rootLink+"/sendungen/sendungenabisz100_page-W_zc-25c5c777.html",True),
TreeNode("1.23","Y",self.rootLink+"/sendungen/sendungenabisz100_page-Y_zc-388beba7.html",True),
TreeNode("1.24","Z",self.rootLink+"/sendungen/sendungenabisz100_page-Z_zc-e744950d.html",True),
TreeNode("1.25","...",self.rootLink+"/sendungen/sendungenabisz100_page-1_zc-43c28d56.html",True)
)
)
)
self.regex_videoLinks=re.compile("(.*?)");
self.regex_xml_title=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");
@classmethod
def name(self):
return "KI.KA";
def isSearchable(self):
return False;
def searchVideo(self, searchText):
return;
def buildVideoLink(self,pageLink):
xmlPage = self.loadPage(self.rootLink+pageLink);
channel = self.regex_xml_channel.search(xmlPage);
if(channel is not None):
channel = unicode(channel.group(1),"UTF-8");
title = unicode(self.regex_xml_title.search(xmlPage).group(1),"UTF-8");
image = self.regex_xml_image.search(xmlPage).group(1).replace("**aspectRatio**","tlarge169").replace("**width**","1472");
self.gui.log("%s %s"%(title,image));
links = {};
for match in self.regex_xml_videoLink.finditer(xmlPage):
profile = match.group(1);
directLink = match.group(2);
self.gui.log("%s %s"%(profile,directLink));
if("MP4 Web S" in profile):
links[0] = SimpleLink(directLink, 0);
if("MP4 Web L" in profile):
links[1] = SimpleLink(directLink, 0);
if("MP4 Web L+" in profile):
links[2] = SimpleLink(directLink, 0);
if("MP4 Web XL" in profile):
links[3] = SimpleLink(directLink, 0);
if(channel is not None):
return DisplayObject(channel,title,image,"",links,True, None);
else:
return DisplayObject(title,"",image,"",links,True, None);
def buildPageMenu(self, link, initCount):
pageContent = self.loadPage(link);
htmlPage = BeautifulSoup(pageContent, 'html.parser')
htmlElements = htmlPage.select(self.selector_videoPages)
videoLinks = set()
for item in htmlElements:
link = self.rootLink+item['href'];
videoPage = self.loadPage(link);
for match in self.regex_videoLinks.finditer(videoPage):
link=match.group(1)+"-avCustom.xml";
if(link not in videoLinks):
videoLinks.add(link)
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)
self.gui.log("found %d page links"%len(htmlElements))
for item in htmlElements:
self.gui.log(item.prettify());
link = self.rootLink+item['href'];
title = item['title'];
displayObject = DisplayObject(title,"",None,"",link,False, None);
self.gui.buildVideoLink(displayObject,self, count);