def __addLastVersion(self, servers): mainUrl = "https://gitlab.com/iptvplayer-for-e2/iptvplayer-for-e2" sts, data = self.cm.getPage(mainUrl + '/tree/master') if sts: crcSum = CParsingHelper.getSearchGroups( data, '"/iptvplayer-for-e2/iptvplayer-for-e2/commit/([^"]+?)">')[0] if 40 == len(crcSum): finalurl = mainUrl + '/blob/%s/IPTVPlayer/version.py' % crcSum sts, data = self.cm.getPage(finalurl) if sts: newVerNum = CParsingHelper.getSearchGroups( data, '"([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"')[0] sourceUrl = mainUrl + "/repository/archive.tar.gz?ref=%s" % crcSum server = { 'name': 'gitlab.com', 'version': newVerNum, 'url': sourceUrl, 'subdir': 'iptvplayer-for-e2.git/', 'pyver': 'X.X', 'packagetype': 'sourcecode' } printDBG( "UpdateMainAppImpl.__addLastVersion server: [%s]" % str(server)) servers.append(server) else: printDBG("Wrong crcSum[%s]" % crcSum)
def getLink(self, url): printDBG("getLink url[%s]" % url) urlItem = url.split('|') if 3 == len(urlItem): url = urlItem[0] post_data = { 'action': 'getPlayer', 'id': urlItem[1], 'playerType': urlItem[2] } HEADER = dict(self.AJAX_HEADER) HEADER['Referer'] = url if 'free' == urlItem[2]: http_params = {'header': HEADER} else: http_params = {'header': HEADER, 'use_cookie': True, 'save_cookie': False, 'load_cookie': True, 'cookiefile': self.COOKIE_FILE} sts, data = self.cm.getPage( url, http_params, post_data) if not sts: return '' data = CParsingHelper.getDataBeetwenMarkers(data, '<div class="player">', '<div class="playerTypes">', False)[1] if 'free' == urlItem[2]: data = CParsingHelper.getSearchGroups(data, '<iframe [^>]*?src="([^"]+?)"')[0] sts, data = self.cm.getPage( data ) if not sts: return '' data = CParsingHelper.getSearchGroups(data, '<iframe [^>]*?src="([^"]+?)"')[0] return self.up.getVideoLink( data ) else: return CParsingHelper.getSearchGroups(data, 'url: [\'"](http[^\'"]+?)[\'"]')[0] return '' else: return url
def listItems(self, data, itemType, nextPageItem=None, getPlot=None, setRating=True, ver=''): for item in data: icon = CParsingHelper.getSearchGroups(item, 'src="([^"]+?jpg)"')[0] url = CParsingHelper.getSearchGroups(item, 'href="([^"]+?)"')[0] title = CParsingHelper.getSearchGroups(item, 'title="([^"]+?)"')[0] if '' == title: title = CParsingHelper.getSearchGroups(item, '<div class="title">([^<]+?)</div>')[0] strRating = '' if setRating: strRating = CParsingHelper.getSearchGroups(item, '<div class="rating" style="width:([0-9]+?)\%">')[0] if '' == strRating: strRating = '0' strRating = 'Ocena: %s | ' % (str(int(strRating)/10) + '/10') if None == getPlot: plot = CParsingHelper.getDataBeetwenMarkers(item, '<div class="description">', '<a', False)[1] else: plot = getPlot(item) plot = self.cleanHtmlStr(plot) # validate data if '' == url or '' == title: continue if not url.startswith('http'): url = self.MAINURL + url if len(icon) and not icon.startswith('http'): icon = self.MAINURL + icon if 'video' == itemType: params = {'title':title, 'url':url, 'icon':icon, 'plot': strRating + plot, 'ver': ver} self.addVideo(params) else: params = {'name': 'category', 'title':title, 'category': itemType, 'url':url, 'icon':icon, 'plot': strRating + plot} self.addDir(params) if None != nextPageItem: self.addDir(nextPageItem)
def getVideoUrl(self, url): #show adult content #self.cm.addCookieItem(COOKIEFILE, {'name': 'AnyF18', 'value': 'mam18', 'domain': 'video.anyfiles.pl'}, False) if not self.isLogged(): self.tryTologin() # GET VIDEO ID u = url.split('/') vidID = u[-1] match = re.search('([0-9]+?)\,', url) if match: vidID = match.group(1) # get COOKIE url = self.MAINURL + '/videos.jsp?id=' + vidID sts, data = self.cm.getPage(url, self.defaultParams) if not sts: return [] fUrl = self.MAINURL + "/w.jsp?id=%s&width=620&height=349&pos=0&skin=0" % vidID COOKIE_JSESSIONID = self.cm.getCookieItem(self.COOKIEFILE, 'JSESSIONID') HEADER = { 'Referer': url, 'Cookie': 'JSESSIONID=' + COOKIE_JSESSIONID + ';', 'User-Agent': "Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; androVM for VirtualBox ('Tablet' version with phone caps) Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30" } request_param = {'header': HEADER} sts, data = self.cm.getPage(fUrl, request_param) if not sts: return [] HEADER['Referer'] = fUrl config = CParsingHelper.getSearchGroups(data, 'src="/?(pcs\?code=[^"]+?)"', 1)[0] if '' != config: sts, data = self.cm.getPage(self.MAINURL + '/' + config, {'header': HEADER}) if sts: #var source = "<source src=\"http://50.7.220.66/video/60ExQvchsi4PbqMLr--I7A/1433518629/5e638de7a15c7a8dc7c979044cd2a953_147325.mp4\" type=\"video/mp4\" />"; #var track = "<track label=\"izombie.112...\" srclang=\"pl\" kind=\"captions\" src=\"http://video.anyfiles.pl/subtit/1433508336949.srt\"></track>\n"; data = data.replace('\\"', '"') #printDBG(data) difSourcesSrc = CParsingHelper.getSearchGroups( data, '''difSourcesSrc[^=]*?=[^"']*?["'](http[^'^"]+?)['"]''', 1)[0] url = CParsingHelper.getSearchGroups( data, '''<source[^>]+?src=["'](http[^'^"]+?)['"]''', 1)[0] subUrl = CParsingHelper.getSearchGroups( data, '''<track[^>]+?src=["'](http[^'^"]+?)['"]''', 1)[0] if 'youtube' in difSourcesSrc: return self.getYTVideoUrl(difSourcesSrc) else: return [{'name': 'AnyFiles.pl', 'url': url}] return []
def listItems(self, data, itemType, nextPageItem=None, getPlot=None, setRating=True, ver=''): for item in data: icon = CParsingHelper.getSearchGroups(item, 'src="([^"]+?jpg)"')[0] url = CParsingHelper.getSearchGroups(item, 'href="([^"]+?)"')[0] title = CParsingHelper.getSearchGroups(item, 'title="([^"]+?)"')[0] if '' == title: title = CParsingHelper.getSearchGroups( item, '<div class="title">([^<]+?)</div>')[0] strRating = '' if setRating: strRating = CParsingHelper.getSearchGroups( item, '<div class="rating" style="width:([0-9]+?)\%">')[0] if '' == strRating: strRating = '0' strRating = 'Ocena: %s | ' % (str(int(strRating) / 10) + '/10') if None == getPlot: plot = CParsingHelper.getDataBeetwenMarkers( item, '<div class="description">', '<a', False)[1] else: plot = getPlot(item) plot = self.cleanHtmlStr(plot) # validate data if '' == url or '' == title: continue if not url.startswith('http'): url = self.MAINURL + url if len(icon) and not icon.startswith('http'): icon = self.MAINURL + icon if 'video' == itemType: params = { 'title': title, 'url': url, 'icon': icon, 'plot': strRating + plot, 'ver': ver } self.addVideo(params) else: params = { 'name': 'category', 'title': title, 'category': itemType, 'url': url, 'icon': icon, 'plot': strRating + plot } self.addDir(params) if None != nextPageItem: self.addDir(nextPageItem)
def listItems(self, cItem, category): printDBG("SeansikTV.listItems") page = cItem.get('page', 1) url = self._addPage(cItem.get('url'), page) sts, data = self.cm.getPage(url) if False == sts: return # check next page netxtPage = CParsingHelper.getDataBeetwenMarkers( data, '<b class="active">%d</b>' % page, '</div>', False)[1] if 'page' in netxtPage: netxtPage = True page += 1 else: netxtPage = False sts, data = CParsingHelper.getDataBeetwenMarkers( data, '<div class="content table-sofi', '<div class="content">', False) data = data.split('<div class="content table-sofi') for item in data: icon = self._getFullUrl( CParsingHelper.getSearchGroups(item, 'src="([^"]+?jpg)"')[0]) sts, tmp = CParsingHelper.getDataBeetwenReMarkers( item, re.compile('<td colspan="2"[^>]+?>'), re.compile('</td>'), False) url = self._getFullUrl( CParsingHelper.getSearchGroups(tmp, 'href="([^"]+?)"')[0]) tmp = tmp.split('</a>') title = self.cleanHtmlStr(tmp[0]) if 0 < len(tmp): desc = self.cleanHtmlStr(tmp[-1]) # validate data if '' == url or '' == title: continue params = { 'name': 'category', 'category': category, 'title': title, 'url': url, 'icon': icon, 'desc': desc } if 'video' != category: self.addDir(params) else: self.addVideo(params) if netxtPage: params = dict(cItem) params.update({'title': 'Następna strona', 'page': page}) self.addDir(params)
def getVideoUrl(self, url): #show adult content #self.cm.addCookieItem(COOKIEFILE, {'name': 'AnyF18', 'value': 'mam18', 'domain': 'video.anyfiles.pl'}, False) if not self.isLogged(): self.tryTologin() # GET VIDEO ID u = url.split('/') vidID = u[-1] match = re.search('([0-9]+?)\,', url ) if match: vidID = match.group(1) # get COOKIE sts, data = self.cm.getPage(self.MAINURL + '/videos.jsp?id=' + vidID, self.defaultParams) if not sts: return [] fUrl = self.MAINURL + "/w.jsp?id=%s&width=620&height=349&pos=&skin=0" % vidID COOKIE_JSESSIONID = self.cm.getCookieItem(self.COOKIEFILE,'JSESSIONID') HEADER = {'Referer' : url, 'Cookie' : 'JSESSIONID=' + COOKIE_JSESSIONID, 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0'} request_param = {'header':HEADER} sts, data = self.cm.getPage(fUrl, request_param) if not sts: return [] #document.cookie = "__utdc_8a85608c7ff88b4de47cdc08107a8108=f68082abdaab664660b0c60289346552"+expires+"; path="; match = re.search('document.cookie = "([^"]+?)"',data) if match: printDBG("========================================================================== B") #printDBG(data) printDBG("========================================================================== C") HEADER['Cookie'] = HEADER['Cookie'] + '; ' + match.group(1) HEADER['Referer'] = self.MAINURL + '/flowplaer/flowplayer.commercial-3.2.16.swf' config = CParsingHelper.getSearchGroups(data, 'var flashvars = {[^"]+?config: "([^"]+?)" }', 1)[0] if '' == config: printDBG("========================================================================== D") config = CParsingHelper.getSearchGroups(data, 'src="/?(pcsevlet\?code=[^"]+?)"', 1)[0] if '' != config: printDBG("========================================================================== E") sts,data = self.cm.getPage( self.MAINURL + '/' + config, {'header': HEADER}) if sts: url = CParsingHelper.getSearchGroups(data, "'url':'(http[^']+?mp4)'", 1)[0] if '' != url: return [{ 'name': 'AnyFiles', 'url': url}] url = CParsingHelper.getSearchGroups(data, "'url':'api:([^']+?)'", 1)[0] if '' != url: return self.getYTVideoUrl('http://www.youtube.com/watch?v='+url) return []
def __init__(self, session, params={}): # params: vk_title, movie_title self.session = session Screen.__init__(self, session) self.params = params self.params['login'] = config.plugins.iptvplayer.opensuborg_login.value self.params['password'] = config.plugins.iptvplayer.opensuborg_password.value self.searchPattern = CParsingHelper.getNormalizeStr( self.params.get('movie_title', '') ) # try to guess season and episode number try: tmp = CParsingHelper.getSearchGroups(self.searchPattern + ' ', 's([0-9]+?)e([0-9]+?)[^0-9]', 2) self.episodeData = {'season': int(tmp[0]), 'episode':int(tmp[1])} except: self.episodeData = {'season':-1, 'episode':-1} self.onShown.append(self.onStart) self.onClose.append(self.__onClose) self.subProvider = OpenSubOrgProvider() self["title"] = Label(" ") self["console"] = Label(" ") self["label_red"] = Label(_("Cancel")) self["label_yellow"] = Label(_("Move group")) self["label_green"] = Label(_("Apply")) self["icon_red"] = Cover3() self["icon_yellow"] = Cover3() self["icon_green"] = Cover3() self["list"] = IPTVMainNavigatorList() self["list"].connectSelChanged(self.onSelectionChanged) self["actions"] = ActionMap(["ColorActions", "SetupActions", "WizardActions", "ListboxActions"], { "cancel": self.keyExit, "ok" : self.keyOK, "red" : self.keyRed, "yellow": self.keyYellow, "green" : self.keyGreen, }, -2) self.iconPixmap = {} for icon in ['red', 'yellow', 'green']: self.iconPixmap[icon] = LoadPixmap(GetIconDir(icon+'.png')) self.movieTitle = '' self.stackList = [] self.stackItems = [] self.defaultLanguage = GetDefaultLang() self.listMode = False self.downloadedSubFilePath = '' self.loginPassed = False self.tmpItem = None
def __addLastVersion(self, servers): mainUrl = "https://gitlab.com/iptvplayer-for-e2/iptvplayer-for-e2" sts, data = self.cm.getPage(mainUrl + '/tree/master') if sts: crcSum = CParsingHelper.getSearchGroups(data, '"/iptvplayer-for-e2/iptvplayer-for-e2/commit/([^"]+?)">')[0] if 40 == len(crcSum): finalurl = mainUrl + '/blob/%s/IPTVPlayer/version.py' % crcSum sts, data = self.cm.getPage(finalurl) if sts: newVerNum = CParsingHelper.getSearchGroups(data, '"([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"')[0] sourceUrl = mainUrl + "/repository/archive.tar.gz?ref=%s" % crcSum server = {'name':'gitlab.com', 'version':newVerNum, 'url':sourceUrl, 'subdir':'iptvplayer-for-e2.git/', 'pyver':'X.X', 'packagetype':'sourcecode'} printDBG("UpdateMainAppImpl.__addLastVersion server: [%s]" % str(server)) servers.append(server) else: printDBG("Wrong crcSum[%s]" % crcSum)
def checkVersionFile(self, newVerPath): code = 0 msg = 'Wersja poprawna.' newVerFile = os_path.join(newVerPath, 'version.py') if os_path.isfile(newVerFile): verPattern = self.VERSION_PATTERN else: newVerFile = os_path.join(newVerPath, 'version.pyo') verPattern = '([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)' try: # get new version with open(newVerFile, "r") as verFile: data = verFile.read() newVerNum = CParsingHelper.getSearchGroups(data, verPattern)[0] if newVerNum != self.serversList[self.currServIdx]['version']: code = -1 msg = _( "Wrong version. \n downloaded version [%s] is different from the requested [%s]." ) % (newVerNum, self.serversList[self.currServIdx]['version']) except: printExc() code = -1 msg = _("File [%s] reading failed.") % newVerFile return code, msg
def __addLastVersion(self, servers): mainUrl = "https://gitorious.org/iptvplayer-for-e2/iptvplayer-for-e2" sts, response = self.cm.getPage(mainUrl, {'return_data': False}) if sts: finalurl = response.geturl() printDBG("UpdateMainAppImpl.__addLastVersion finalurl[%s]" % finalurl) response.close() crcSum = finalurl.split('/')[-1].replace(':', '') if 40 == len(crcSum): sts, data = self.cm.getPage(finalurl + "IPTVPlayer/version.py") if sts: newVerNum = CParsingHelper.getSearchGroups( data, '"([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"')[0] sourceUrl = mainUrl + "/archive/%s.tar.gz" % crcSum server = { 'name': 'gitorious.org', 'version': newVerNum, 'url': sourceUrl, 'subdir': 'iptvplayer-for-e2-iptvplayer-for-e2/', 'pyver': 'X.X', 'packagetype': 'sourcecode' } printDBG( "UpdateMainAppImpl.__addLastVersion server: [%s]" % str(server)) servers.append(server) else: printDBG("Wrong crcSum[%s]" % crcSum)
def listSeasons(self, cItem, category): printDBG("SeansikTV.listSeasons") url = self._getFullUrl(cItem['url']) sts, data = self.cm.getPage(url) if False == sts: return icon = self._getFullUrl( CParsingHelper.getSearchGroups( data, 'href="([^"]+?\.jpg)" rel="image_src"')[0]) data = CParsingHelper.getDataBeetwenMarkers(data, '<div class="jump">', '</div>', False)[1] data = re.findall('<a href="#([^"]+?)">([^<]+?)</a>', data) for item in data: params = dict(cItem) params.update({ 'category': category, 'season': item[0], 'title': item[1], 'icon': icon }) self.addDir(params) if 0 == len(self.currList): cItem.update({ 'season': 'season1', 'category': category, 'icon': icon }) self.listEpisodes(cItem)
def loadSubtitles(self, filePath, encoding='utf-8', fps=0): printDBG("OpenSubOrg.loadSubtitles filePath[%s]" % filePath) # try load subtitles using C-library try: if IsSubtitlesParserExtensionCanBeUsed(): try: if fps <= 0: filename, file_extension = os_path.splitext(filePath) tmp = CParsingHelper.getSearchGroups( filename.upper() + '_', '_FPS([0-9.]+)_')[0] if '' != tmp: fps = float(tmp) except Exception: printExc() from Plugins.Extensions.IPTVPlayer.libs.iptvsubparser import _subparser as subparser with codecs.open(filePath, 'r', encoding, 'replace') as fp: subText = fp.read().encode('utf-8') # if in subtitles will be line {1}{1}f_fps # for example {1}{1}23.976 and we set microsecperframe = 0 # then microsecperframe will be calculated as follow: llroundf(1000000.f / f_fps) if fps > 0: microsecperframe = int(1000000.0 / fps) else: microsecperframe = 0 # calc end time if needed - optional, default True setEndTime = True # characters per second - optional, default 12, can not be set to 0 CPS = 12 # words per minute - optional, default 138, can not be set to 0 WPM = 138 # remove format tags, like <i> - optional, default True removeTags = True subsObj = subparser.parse(subText, microsecperframe, removeTags, setEndTime, CPS, WPM) if 'type' in subsObj: self.subAtoms = subsObj['list'] # Workaround start try: printDBG( 'Workaround for subtitles from Das Erste: %s' % self.subAtoms[0]['start']) if len(self.subAtoms ) and self.subAtoms[0]['start'] >= 36000000: for idx in range(len(self.subAtoms)): for key in ['start', 'end']: if key not in self.subAtoms[idx]: continue if self.subAtoms[idx][key] >= 36000000: self.subAtoms[idx][key] -= 36000000 except Exception: printExc() # workaround end self._fillPailsOfAtoms() return True else: return False except Exception: printExc() return self._loadSubtitles(filePath, encoding)
def discoverInfoFromTitle(self, movieTitle=None): dInfo = {'movie_title': None, 'season': None, 'episode': None} if movieTitle == None: movieTitle = self.params.get('movie_title', '') # discovered information dInfo = {'movie_title': None, 'season': None, 'episode': None} dInfo['movie_title'] = CParsingHelper.getNormalizeStr(movieTitle) # try to guess season and episode number try: tmp = CParsingHelper.getSearchGroups(' ' + dInfo['movie_title'] + ' ', 's([0-9]+?)e([0-9]+?)[^0-9]', 2) dInfo.update({'season': int(tmp[0]), 'episode': int(tmp[1])}) except Exception: try: tmp = CParsingHelper.getSearchGroups(' ' + dInfo['movie_title'] + ' ', '[^0-9]([0-9]+?)x([0-9]+?)[^0-9]', 2) dInfo.update({'season': int(tmp[0]), 'episode': int(tmp[1])}) except Exception: pass return dInfo
def listsCategoriesMenu(self, url): sts, data = self.cm.getPage( url, {'header': self.HEADER } ) if not sts: return data = CParsingHelper.getDataBeetwenMarkers(data, 'movie-kat-selection">', '</ul>', False)[1] data = data.split('</li>') for item in data: title = self.cleanHtmlStr(item) catID = CParsingHelper.getSearchGroups(item, 'data-value="([^"]+?)"', 1)[0] params = {'name': 'category', 'title': title, 'category': catID} self.addDir(params)
def getLink(self, url): printDBG("getLink url[%s]" % url) urlItem = url.split('|') if 3 == len(urlItem): url = urlItem[0] post_data = { 'action': 'getPlayer', 'id': urlItem[1], 'playerType': urlItem[2] } HEADER = dict(self.AJAX_HEADER) HEADER['Referer'] = url if 'free' == urlItem[2]: http_params = {'header': HEADER} else: http_params = { 'header': HEADER, 'use_cookie': True, 'save_cookie': False, 'load_cookie': True, 'cookiefile': self.COOKIE_FILE } sts, data = self.cm.getPage(url, http_params, post_data) if not sts: return '' data = CParsingHelper.getDataBeetwenMarkers( data, '<div class="player">', '<div class="playerTypes">', False)[1] if 'free' == urlItem[2]: data = CParsingHelper.getSearchGroups( data, '<iframe [^>]*?src="([^"]+?)"')[0] sts, data = self.cm.getPage(data) if not sts: return '' data = CParsingHelper.getSearchGroups( data, '<iframe [^>]*?src="([^"]+?)"')[0] return self.up.getVideoLink(data) else: return CParsingHelper.getSearchGroups( data, 'url: [\'"](http[^\'"]+?)[\'"]')[0] return '' else: return url
def getVideoUrl(self, url): #show adult content #self.cm.addCookieItem(COOKIEFILE, {'name': 'AnyF18', 'value': 'mam18', 'domain': 'video.anyfiles.pl'}, False) if not self.isLogged(): self.tryTologin() # GET VIDEO ID u = url.split('/') vidID = u[-1] match = re.search('([0-9]+?)\,', url ) if match: vidID = match.group(1) # get COOKIE url = self.MAINURL + '/videos.jsp?id=' + vidID sts, data = self.cm.getPage(url, self.defaultParams) if not sts: return [] fUrl = self.MAINURL + "/w.jsp?id=%s&width=620&height=349&pos=0&skin=0" % vidID COOKIE_JSESSIONID = self.cm.getCookieItem(self.COOKIEFILE,'JSESSIONID') HEADER = {'Referer' : url, 'Cookie' : 'JSESSIONID=' + COOKIE_JSESSIONID + ';', 'User-Agent': "Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; androVM for VirtualBox ('Tablet' version with phone caps) Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"} request_param = {'header':HEADER} sts, data = self.cm.getPage(fUrl, request_param) if not sts: return [] HEADER['Referer'] = fUrl config = CParsingHelper.getSearchGroups(data, 'src="/?(pcs\?code=[^"]+?)"', 1)[0] if '' != config: sts,data = self.cm.getPage( self.MAINURL + '/' + config, {'header': HEADER}) if sts: #var source = "<source src=\"http://50.7.220.66/video/60ExQvchsi4PbqMLr--I7A/1433518629/5e638de7a15c7a8dc7c979044cd2a953_147325.mp4\" type=\"video/mp4\" />"; #var track = "<track label=\"izombie.112...\" srclang=\"pl\" kind=\"captions\" src=\"http://video.anyfiles.pl/subtit/1433508336949.srt\"></track>\n"; data = data.replace('\\"', '"') #printDBG(data) difSourcesSrc = CParsingHelper.getSearchGroups(data, '''difSourcesSrc[^=]*?=[^"']*?["'](http[^'^"]+?)['"]''', 1)[0] url = CParsingHelper.getSearchGroups(data, '''<source[^>]+?src=["'](http[^'^"]+?)['"]''', 1)[0] subUrl = CParsingHelper.getSearchGroups(data, '''<track[^>]+?src=["'](http[^'^"]+?)['"]''', 1)[0] if 'youtube' in difSourcesSrc: return self.getYTVideoUrl(difSourcesSrc) else: return [{'name':'AnyFiles.pl', 'url':url}] return []
def getFilmTab(self, url, category, pager): sts, data = self.cm.getPage( url, {'header': self.HEADER } ) if not sts: return nextPage = re.search('<li><a href="/filmy?.+?" rel="next">»</a></li>', data) data = CParsingHelper.getDataBeetwenMarkers(data, '<div class="row-fluid movie-item">', '<div class="container">', False)[1] data = data.split('<div class="row-fluid movie-item">') titleA = re.compile('<a class="title"[^>]+?>') titleB = re.compile('</small>') plotA = re.compile('<p class="desc">') plotB = re.compile('</div>') for item in data: title = CParsingHelper.getDataBeetwenReMarkers(item, titleA, titleB, False)[1] page = self.MAINURL + CParsingHelper.getSearchGroups(item, 'class="title" href="([^"]+?)"', 1)[0] plot = CParsingHelper.getDataBeetwenReMarkers(item, plotA, plotB, False)[1] img = CParsingHelper.getSearchGroups(item, 'src="([^"]+?)"', 1)[0] if '' != title and '' != page: params = {'title': title, 'page': page, 'icon': img, 'plot': plot} self.addVideo(params) if nextPage: params = {'name': 'nextpage', 'category': category, 'title': 'Następna strona', 'page': str(int(pager) + 1)} self.addDir(params)
def __addLastVersion(self, servers): mainUrl = "https://gitorious.org/iptvplayer-for-e2/iptvplayer-for-e2" sts, response = self.cm.getPage(mainUrl, {'return_data':False}) if sts: finalurl = response.geturl() printDBG("UpdateMainAppImpl.__addLastVersion finalurl[%s]" % finalurl) response.close() crcSum = finalurl.split('/')[-1].replace(':', '') if 40 == len(crcSum): sts, data = self.cm.getPage(finalurl + "IPTVPlayer/version.py") if sts: newVerNum = CParsingHelper.getSearchGroups(data, '"([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"')[0] sourceUrl = mainUrl + "/archive/%s.tar.gz" % crcSum server = {'name':'gitorious.org', 'version':newVerNum, 'url':sourceUrl, 'subdir':'iptvplayer-for-e2-iptvplayer-for-e2/', 'pyver':'X.X', 'packagetype':'sourcecode'} printDBG("UpdateMainAppImpl.__addLastVersion server: [%s]" % str(server)) servers.append(server) else: printDBG("Wrong crcSum[%s]" % crcSum)
def getVideoUrl(self, url): #show adult content #self.cm.addCookieItem(COOKIEFILE, {'name': 'AnyF18', 'value': 'mam18', 'domain': 'video.anyfiles.pl'}, False) if not self.isLogged(): self.tryTologin() # GET VIDEO ID u = url.split('/') vidID = u[-1] match = re.search('([0-9]+?)\,', url ) if match: vidID = match.group(1) # get COOKIE url = self.MAINURL + '/videos.jsp?id=' + vidID sts, data = self.cm.getPage(url, self.defaultParams) if not sts: return [] fUrl = self.MAINURL + "/w.jsp?id=%s&width=640&height=360&start=0&skin=0&label=false&autostart=false" % vidID COOKIE_JSESSIONID = self.cm.getCookieItem(self.COOKIEFILE,'JSESSIONID') HEADER = {'Referer' : url, 'Cookie' : 'JSESSIONID=' + COOKIE_JSESSIONID + ';', 'User-Agent': self.defaultParams['header']['User-Agent']} request_param = {'header':HEADER} sts, data = self.cm.getPage(fUrl, request_param) if not sts: return [] HEADER['Referer'] = fUrl tmp = re.compile('''['"](/video-js[^'^"]+?\.js)['"]''').findall(data) for item in tmp: sts, item = self.cm.getPage( self.MAINURL + item, {'header': HEADER}) linksTab = [] config = CParsingHelper.getSearchGroups(data, '''['"](/AutocompleteData[^'^"]+?)['"]''', 1)[0] if '' != config: sts, data = self.cm.getPage( self.MAINURL + config.replace('&', '&'), {'header': HEADER}) printDBG(data) if sts: source = self.cm.ph.getSearchGroups(data, '''source\s*=\s*['"]([^'^"]+?)['"]''', 1)[0] extlink = self.cm.ph.getSearchGroups(data, '''extlink\s*=\s*['"]([^'^"]+?)['"]''', 1)[0] if self.cm.isValidUrl(extlink): linksTab.extend(self.up.getVideoLinkExt(extlink)) if self.cm.isValidUrl(source): return [{'name':'AnyFiles.pl', 'url':source}] return linksTab
def listItems2(self, cItem, category): printDBG("SeansikTV.listItems2") self.listItems(cItem, category) return page = cItem.get('page', 1) url = self._addPage(cItem.get('url'), page) sts, data = self.cm.getPage(url) if False == sts: return netxtPage = False if ">»</a>" in data: page = page + 1 netxtPage = True marker = '<tr class="tdb_' data = CParsingHelper.getDataBeetwenMarkers(data, marker, '<div class="content">', False)[1] data = data.split(marker) for item in data: url = self._getFullUrl( CParsingHelper.getSearchGroups(item, 'href="([^"]+?)"')[0]) title = self.cleanHtmlStr( CParsingHelper.getDataBeetwenMarkers(item, 'title">', '</td>', False)[1]) desc = self.cleanHtmlStr(marker + item) # validate data if '' == url or '' == title: continue params = { 'name': 'category', 'category': category, 'title': title, 'url': url, 'desc': desc } self.addDir(params) if netxtPage: params = dict(cItem) params.update({'title': 'Następna strona', 'page': page}) self.addDir(params)
def listEpisodes(self, cItem): printDBG("SeansikTV.listEpisodes") url = self._getFullUrl(cItem['url']) sts, data = self.cm.getPage(url) if False == sts: return data = CParsingHelper.getDataBeetwenMarkers( data, 'id="%s"' % cItem['season'], '</table>', False)[1] marker = '<tr itemprop="episode"' data = data.split(marker) if len(data): del data[0] for item in data: if 'cross_add gray' in item: url = self._getFullUrl( CParsingHelper.getSearchGroups(item, 'href="([^"]+?)"')[0]) title = self.cleanHtmlStr( CParsingHelper.getDataBeetwenMarkers( item, '</td>', '</td>', False)[1]) desc = self.cleanHtmlStr(item.split('</b>')[1]) # validate data if '' == url or '' == title: continue params = dict(cItem) params.update({'title': title, 'url': url, 'desc': desc}) self.addVideo(params)
def checkVersionFile(self, newVerPath): code = 0 msg = 'Wersja poprawna.' newVerFile = os_path.join(newVerPath, 'version.py') if os_path.isfile(newVerFile): verPattern = self.VERSION_PATTERN else: newVerFile = os_path.join(newVerPath, 'version.pyo') verPattern = '([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)' try: # get new version with open (newVerFile, "r") as verFile: data = verFile.read() newVerNum = CParsingHelper.getSearchGroups(data, verPattern)[0] if newVerNum != self.serversList[self.currServIdx]['version']: code = -1 msg = _("Wrong version. \n downloaded version [%s] is different from the requested [%s].") % (newVerNum, self.serversList[self.currServIdx]['version']) except: printExc() code = -1 msg = _("File [%s] reading failed.") % newVerFile return code, msg
def getLinks(self, url, lang, playerType): printDBG("getLinks lang[%r], playerType[%r]" % (lang, playerType) ) hostingTab = [] HEADER = dict(self.AJAX_HEADER) HEADER['Referer'] = url if 'free' == playerType['val']: http_params = {'header': HEADER} else: http_params = {'header': HEADER, 'use_cookie': True, 'save_cookie': False, 'load_cookie': True, 'cookiefile': self.COOKIE_FILE} #post_data = { 'action': 'getPlayer', 'lang': lang['val'], 'playerType': playerType['val'] } post_data = { 'action': 'getPlayer', 'id': lang['val'], 'setHosting': '1' } sts, data = self.cm.getPage( url, http_params, post_data) if not sts or 'Player premium jest dostępny tylko dla' in data: return hostingTab # get players ID playersData = CParsingHelper.getDataBeetwenMarkers(data, '<div class="services">', '</div>', False)[1] playersData = re.compile('data-id="([0-9]+?)" data-playertype="([^"]+?)"[^>]*?>([^<]+?)</a>').findall(data) for item in playersData: tmp = {'need_resolve':1, 'name': '%s|%s|%s' % (lang['title'].ljust(16), playerType['title'].center(12), item[2].strip().rjust(14)), 'url': '%s|%s|%s' % (url, item[0], playerType['val']) } hostingTab.append(tmp) # new method to get premium links if 0 == len(hostingTab): sts, tmp = CParsingHelper.getDataBeetwenMarkers(data, 'newPlayer.init("', '")', False) try: tmp = CParsingHelper.getSearchGroups(data, 'id="%s" data-key="([^"]+?)"' % tmp)[0] tmp = base64.b64decode(tmp[2:]) tmp = byteify( json.loads(tmp)['url'] ) title = '%s | premium' % lang['title'].ljust(16) tmp = {'need_resolve':1, 'name': title, 'url': tmp} hostingTab.append(tmp) printDBG("||||||||||||||||||||||||||||||||||||%s|||||||||||||||||||||||||||||||" % tmp) except: printExc() return hostingTab
def getHostingTable(self, urlItem): printDBG("SeansikTV.getHostingTable") # use cache if possible if 0 < len(self.linksCacheCache.get('tab', [])) and ( urlItem['url'] + urlItem.get('ver', '')) == self.linksCacheCache.get( 'marker', None): return self.linksCacheCache['tab'] hostingTab = [] sts, data = self.cm.getPage(self._getFullUrl(urlItem['url'])) if not sts: return hostingTab long_hashes = CParsingHelper.getSearchGroups( data, '_sasa[ ]*?=[ ]*?{([^}]+?)}')[0] short_hashes = CParsingHelper.getDataBeetwenMarkers( data, '<div id="translation_', '<div class="content"', False)[1] #printDBG("long_hashes[%s]" % long_hashes) #printDBG("short_hashes[%s]" % short_hashes) marker = '<h3 class="brb"' data = CParsingHelper.getDataBeetwenMarkers(data, marker, '<div id="boxShow">', False)[1] data = data.split(marker) for item in data: embed_id = CParsingHelper.getSearchGroups( item, 'id="embedTitle_([0-9]+?)">')[0] if '' == embed_id: continue quality = CParsingHelper.getDataBeetwenMarkers( item, '<span class="f-left">', '</span>', False)[1] hosting = CParsingHelper.getDataBeetwenMarkers( item, '<b>', '</b>', False)[1].strip() translation = CParsingHelper.getDataBeetwenMarkers( item, 'align="rigth">', '</span>', False)[1].strip() title = CParsingHelper.removeDoubles( translation + ': ' + hosting + ' ' + quality, ' ') if len(embed_id): # get embed hash short_hash = CParsingHelper.getSearchGroups( short_hashes, '''<div onclick="frame\('([^']+?)', this, event\);" data-id="%s"''' % embed_id)[0] if '' == short_hash: short_hash = CParsingHelper.getSearchGroups( short_hashes, '<div data-vid_key="([^"]+?)".+?data-id="%s"' % embed_id)[0] #printDBG("embed_id[%s] short_hash[%s]" % (embed_id, short_hash)) if '' == short_hash: continue long_hash = CParsingHelper.getSearchGroups( long_hashes, '"%s":"([^"]+?)"' % short_hash)[0] if '' == long_hash: continue try: url = base64.b64decode(long_hash) if 'src=' in url: url = CParsingHelper.getSearchGroups( url, 'src="([^"]+?)"')[0] printDBG("======================================= [%s]" % url) #if 1 != self.up.checkHostSupport('http://' + hosting + '/'): # continue except: continue #if url.startswith('http'): hostingTab.append({ 'name': title, 'url': strwithmeta(self.cleanHtmlStr(url), {'hosting': hosting}), 'need_resolve': 1 }) self.linksCacheCache = {'marker': urlItem['url'], 'tab': hostingTab} return hostingTab
def __init__(self, session, params={}): # params: vk_title, movie_title self.session = session Screen.__init__(self, session) self.params = params self.params['login'] = config.plugins.iptvplayer.opensuborg_login.value self.params[ 'password'] = config.plugins.iptvplayer.opensuborg_password.value self.searchPattern = CParsingHelper.getNormalizeStr( self.params.get('movie_title', '')) # try to guess season and episode number try: tmp = CParsingHelper.getSearchGroups(self.searchPattern + ' ', 's([0-9]+?)e([0-9]+?)[^0-9]', 2) self.episodeData = {'season': int(tmp[0]), 'episode': int(tmp[1])} except: self.episodeData = {'season': -1, 'episode': -1} self.onShown.append(self.onStart) self.onClose.append(self.__onClose) self.subProvider = OpenSubOrgProvider() self["title"] = Label(" ") self["console"] = Label(" ") self["label_red"] = Label(_("Cancel")) self["label_yellow"] = Label(_("Move group")) self["label_green"] = Label(_("Apply")) self["icon_red"] = Cover3() self["icon_yellow"] = Cover3() self["icon_green"] = Cover3() self["list"] = IPTVMainNavigatorList() self["list"].connectSelChanged(self.onSelectionChanged) self["actions"] = ActionMap( [ "ColorActions", "SetupActions", "WizardActions", "ListboxActions" ], { "cancel": self.keyExit, "ok": self.keyOK, "red": self.keyRed, "yellow": self.keyYellow, "green": self.keyGreen, }, -2) self.iconPixmap = {} for icon in ['red', 'yellow', 'green']: self.iconPixmap[icon] = LoadPixmap(GetIconDir(icon + '.png')) self.movieTitle = '' self.stackList = [] self.stackItems = [] self.defaultLanguage = GetDefaultLang() self.listMode = False self.downloadedSubFilePath = '' self.loginPassed = False self.tmpItem = None
def getVideoUrl(self, url): #show adult content #self.cm.addCookieItem(COOKIEFILE, {'name': 'AnyF18', 'value': 'mam18', 'domain': 'video.anyfiles.pl'}, False) if not self.isLogged(): self.tryTologin() # GET VIDEO ID u = url.split('/') vidID = u[-1] match = re.search('([0-9]+?)\,', url) if match: vidID = match.group(1) # get COOKIE sts, data = self.cm.getPage(self.MAINURL + '/videos.jsp?id=' + vidID, self.defaultParams) if not sts: return [] fUrl = self.MAINURL + "/w.jsp?id=%s&width=620&height=349&pos=&skin=0" % vidID COOKIE_JSESSIONID = self.cm.getCookieItem(self.COOKIEFILE, 'JSESSIONID') HEADER = { 'Referer': url, 'Cookie': 'JSESSIONID=' + COOKIE_JSESSIONID, 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0' } request_param = {'header': HEADER} sts, data = self.cm.getPage(fUrl, request_param) if not sts: return [] #document.cookie = "__utdc_8a85608c7ff88b4de47cdc08107a8108=f68082abdaab664660b0c60289346552"+expires+"; path="; match = re.search('document.cookie = "([^"]+?)"', data) if match: printDBG( "========================================================================== B" ) #printDBG(data) printDBG( "========================================================================== C" ) HEADER['Cookie'] = HEADER['Cookie'] + '; ' + match.group(1) HEADER[ 'Referer'] = self.MAINURL + '/flowplaer/flowplayer.commercial-3.2.16.swf' config = CParsingHelper.getSearchGroups( data, 'var flashvars = {[^"]+?config: "([^"]+?)" }', 1)[0] if '' == config: printDBG( "========================================================================== D" ) config = CParsingHelper.getSearchGroups( data, 'src="/?(pcsevlet\?code=[^"]+?)"', 1)[0] if '' != config: printDBG( "========================================================================== E" ) sts, data = self.cm.getPage(self.MAINURL + '/' + config, {'header': HEADER}) if sts: url = CParsingHelper.getSearchGroups( data, "'url':'(http[^']+?mp4)'", 1)[0] if '' != url: return [{'name': 'AnyFiles', 'url': url}] url = CParsingHelper.getSearchGroups( data, "'url':'api:([^']+?)'", 1)[0] if '' != url: return self.getYTVideoUrl( 'http://www.youtube.com/watch?v=' + url) return []
def getLinks(self, url, lang, playerType): printDBG("getLinks lang[%r], playerType[%r]" % (lang, playerType)) hostingTab = [] HEADER = dict(self.AJAX_HEADER) HEADER['Referer'] = url if 'free' == playerType['val']: http_params = {'header': HEADER} else: http_params = { 'header': HEADER, 'use_cookie': True, 'save_cookie': False, 'load_cookie': True, 'cookiefile': self.COOKIE_FILE } #post_data = { 'action': 'getPlayer', 'lang': lang['val'], 'playerType': playerType['val'] } post_data = { 'action': 'getPlayer', 'id': lang['val'], 'setHosting': '1' } sts, data = self.cm.getPage(url, http_params, post_data) if not sts or 'Player premium jest dostępny tylko dla' in data: return hostingTab # get players ID playersData = CParsingHelper.getDataBeetwenMarkers( data, '<div class="services">', '</div>', False)[1] playersData = re.compile( 'data-id="([0-9]+?)" data-playertype="([^"]+?)"[^>]*?>([^<]+?)</a>' ).findall(data) for item in playersData: tmp = { 'need_resolve': 1, 'name': '%s|%s|%s' % (lang['title'].ljust(16), playerType['title'].center(12), item[2].strip().rjust(14)), 'url': '%s|%s|%s' % (url, item[0], playerType['val']) } hostingTab.append(tmp) # new method to get premium links if 0 == len(hostingTab): sts, tmp = CParsingHelper.getDataBeetwenMarkers( data, 'newPlayer.init("', '")', False) try: tmp = CParsingHelper.getSearchGroups( data, 'id="%s" data-key="([^"]+?)"' % tmp)[0] tmp = base64.b64decode(tmp[2:]) tmp = byteify(json.loads(tmp)['url']) title = '%s | premium' % lang['title'].ljust(16) tmp = {'need_resolve': 1, 'name': title, 'url': tmp} hostingTab.append(tmp) printDBG( "||||||||||||||||||||||||||||||||||||%s|||||||||||||||||||||||||||||||" % tmp) except: printExc() return hostingTab