def listSearchItems(self, cItem): printDBG("Christusvincit.listSearchItems") page = cItem.get('page', 1) sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) data = ph.find(data, 'search_result', '</table>', flags=0)[1] data = re.compile('''<div[^>]+?pagenav[^>]*?>''').split(data, 1) if len(data) == 2: nextPage = ph.find(data[-1], ('<a', '>%s<' % (page + 1)))[1] nextPage = self.getFullUrl(ph.getattr(nextPage, 'href')) else: nextPage = '' data = ph.findall(data[0], ('<a', '>', ph.check(ph.any, ('articles.php', 'readarticle.php'))), '</span>') for item in data: url = self.getFullUrl(ph.search(item, ph.A_HREF_URI_RE)[1]) icon = self.getFullUrl(ph.search(item, self.reImgObj)[1]) item = item.split('</a>', 1) title = self.cleanHtmlStr(item[0]) desc = self.cleanHtmlStr(item[-1]) self.addDir(MergeDicts(cItem, {'good_for_fav': True, 'category': 'explore_item', 'title': title, 'url': url, 'icon': icon, 'desc': desc})) if nextPage: self.addDir(MergeDicts(cItem, {'good_for_fav': False, 'title': _('Next page'), 'page': page + 1, 'url': nextPage}))
def tryTologin(self): printDBG('tryTologin start') self.loggedIn = False url = 'https://ssl.egexa.com/login/?domain=egy.best&url=ref' sts, data = self.getPage(url) if sts: sts, data = ph.find( data, ('<form', '>', ph.check(ph.any, ('LoginForm', 'login_form'))), '</form>') if sts: actionUrl, post_data = self.cm.getFormData(data, url) post_data.update({ 'email': self.login, 'password': self.password }) httpParams = dict(self.defaultParams) httpParams['header'] = dict(httpParams['header']) httpParams['header']['Referer'] = url sts, data = self.getPage(actionUrl, httpParams, post_data) if sts: sts, data = self.getPage(self.getFullUrl('/?login=check')) if sts and '/logout' in data and 'تسجيل الدخول' not in data: printDBG('tryTologin OK') self.loggedIn = True else: if self.error_login_egy: self.sessionEx.open(MessageBox, _('Login failed.'), type=MessageBox.TYPE_ERROR, timeout=10) self.error_login_egy = True printDBG('tryTologin failed') return self.loggedIn
def getLinksForVideo(self, cItem): printDBG("FiliserTv.getLinksForVideo [%s]" % cItem) urlTab = [] if len(self.cacheLinks.get(cItem['url'], [])): return self.cacheLinks[cItem['url']] sts, data = self.getPage(cItem['url'], self.defaultParams) if not sts: return [] errorMessage = ph.clean_html( ph.find(data, ('<h2', '>', 'title_block'), '</section>')[1]) if '' != errorMessage: SetIPTVPlayerLastHostError(errorMessage) lParams = {} tmp = ph.findall(data, ('<div', '>', ph.check(ph.any, ('"box"', "'box'"))), '</section>', flags=ph.START_S, limits=2) if not tmp: return lParams['code'] = ph.getattr(tmp[0], 'data-code') lParams['code2'] = ph.getattr(tmp[0], 'data-code2') lParams['type'] = ph.getattr(tmp[0], 'id').split('_', 1)[0] tmp = ph.findall(tmp[1], ('<h', '>'), ('</h', '>'), flags=0, limits=2) lParams['title1'] = ph.clean_html(tmp[0]) lParams['title2'] = ph.clean_html(tmp[-1]) data = data.split('<div id="links">') if 2 != len(data): return [] tabs = [] tmp = ph.find(data[0], '<div id="video_links"', '<div class="clear">')[1] tmp = re.compile( '<[^>]+?data-type\="([^"]+?)"[^>]*?>([^<]+?)<').findall(tmp) for item in tmp: tabs.append({'key': item[0], 'title': ph.clean_html(item[1])}) if tabs: del data[0] for tab in tabs: tmp = ph.find(data[0], 'data-type="%s"' % tab['key'], '</ul>')[1] tmp = ph.findall(tmp, '<li', '</li>') for item in tmp: url = strwithmeta(ph.getattr(item, 'data-ref'), {'link_params': lParams}) title = ph.clean_html(item.split('<div class="rightSide">')[0]) urlTab.append({ 'name': '%s: %s' % (tab['title'], title), 'url': url, 'need_resolve': 1 }) self.cacheLinks[cItem['url']] = urlTab return urlTab
def getVideoLink(self, cItem): printDBG("BilaSportPwApi.getVideoLink") urlsTab = [] sts, data = self.getPage(cItem['url']) if not sts: return urlsTab cUrl = self.cm.meta['url'] baseUrl = cUrl url = self.getFullUrl(ph.search(data, '''['"]([^'^"]*?/iframes/[^'^"]+?)['"]''')[0], cUrl) if not url: return urlsTab sts, data = self.getPage(url) if not sts: return urlsTab cUrl = self.cm.meta['url'] url = self.getFullUrl(ph.search(data, ph.IFRAME)[1], cUrl) if url: sts, data = self.getPage(url) if not sts: return urlsTab cUrl = self.cm.meta['url'] replaceTab = self.cm.ph.getDataBeetwenMarkers(data, 'prototype.open', '};', False)[1] printDBG(replaceTab) replaceTab = re.compile('''\.replace\(['"](\s*[^'^"]+?)['"]\s*\,\s*['"]([^'^"]+?)['"]''').findall(replaceTab) printDBG(replaceTab) if len(replaceTab): scriptUrl = '|' + base64.b64encode(json_dumps(replaceTab).encode('utf-8')) else: scriptUrl = '' tmp = ph.findall(data, ('<script', '>', ph.check(ph.none, ('jsdelivr',)))) for item in tmp: scriptUrl = self.getFullUrl(ph.getattr(item, 'src'), cUrl) break hlsTab = [] hlsUrl = re.compile('''(https?://[^'^"]+?\.m3u8(?:\?[^'^"]+?)?)['"]''', re.IGNORECASE).findall(data) if len(hlsUrl): hlsUrl = hlsUrl[-1] hlsTab = getDirectM3U8Playlist(hlsUrl, checkContent=True, sortWithMaxBitrate=9000000) for idx in range(len(hlsTab)): hlsTab[idx]['need_resolve'] = 1 hlsTab[idx]['url'] = strwithmeta(hlsTab[idx]['url'], {'name':cItem['name'], 'Referer':url, 'priv_script_url':scriptUrl}) if hlsTab: return hlsTab if 1 == self.up.checkHostSupport(cUrl): return self.up.getVideoLinkExt(strwithmeta(cUrl, {'Referer':baseUrl})) return []
def getList(self, cItem): printDBG("BeinmatchApi.getChannelsList") channelsTab = [] sts, data = self.getPage(self.getMainUrl(), self.http_params) if not sts: return [] self.setMainUrl(self.cm.meta['url']) tmp = ph.findall(data, ('<script', '>', ph.check(ph.none, ('src=', ))), '</script>', flags=0) for item in tmp: if 'goToMatch' in item: self.getLinkJS = item break if not self.getLinkJS: self.sessionEx.waitForFinishOpen( MessageBox, _('Data for link generation could not be found.\nPlease report this problem to %s' ) % 'https://github.com/OpenVisionE2/e2iplayer-ov/issues', type=MessageBox.TYPE_ERROR, timeout=10) data = ph.find(data, ('<table', '>', 'tabIndex'), ('<div', '>', 'Side'))[1] data = ph.rfindall(data, '</tr>', ('<table', '>', 'tabIndex')) for item in data: printDBG("+++++++++++++++++++++++++++++++++++++++++") printDBG(item) printDBG("+++++++++++++++++++++++++++++++++++++++++") icon = self.getFullIconUrl( ph.find(item, 'url(', ')', flags=0)[1].strip()) title = ph.clean_html(' vs '.join( ph.findall(item, ('<td', '>', 'tdTeam'), '</td>', flags=0))) url = ph.getattr(item, 'onclick') desc = ph.clean_html( ph.find(item, ('<td', '>', 'compStl'), '</table>', flags=0)[1]) channelsTab.append( MergeDicts( cItem, { 'type': 'video', 'title': title, 'url': url, 'icon': icon, 'desc': desc })) return channelsTab
def handleSection(self, cItem, nextCategory, section): printDBG("Christusvincit.handleSection") section = ph.STRIP_HTML_COMMENT_RE.sub("", section) tmp = section.split('</table>', 1) sTitle = self.cleanHtmlStr(tmp[0]) if sTitle.lower() in ('linki',): #'kategorie' return sIcon = self.getFullUrl(ph.search(section, ph.IMAGE_SRC_URI_RE)[1]) subItems = [] uniques = set() iframes = ph.findall(section, '<center>', '</iframe>') if iframes: for iframe in iframes: title = self.cleanHtmlStr(iframe).split('Video Platform', 1)[0].strip() iframe = ph.search(iframe, ph.IFRAME_SRC_URI_RE)[1] if iframe in uniques: continue uniques.add(iframe) if not title: title = sTitle subItems.append(MergeDicts(cItem, {'category': nextCategory, 'title': title, 'url': iframe})) iframes = ph.IFRAME_SRC_URI_RE.findall(section) if iframes: for iframe in iframes: iframe = iframe[1] if iframe in uniques: continue uniques.add(iframe) subItems.append(MergeDicts(cItem, {'category': nextCategory, 'title': sTitle, 'url': iframe})) section = ph.findall(section, ('<a', '>', ph.check(ph.any, ('articles.php', 'readarticle.php'))), '</a>') for item in section: url = self.getFullUrl(ph.search(item, ph.A_HREF_URI_RE)[1]) icon = self.getFullUrl(ph.search(item, self.reImgObj)[1]) title = self.cleanHtmlStr(item) if not title: title = icon.rsplit('/', 1)[-1].rsplit('.', 1)[0] title = self.titlesMap.get(title, title.upper()) subItems.append(MergeDicts(cItem, {'good_for_fav': True, 'category': nextCategory, 'title': title, 'url': url, 'icon': icon})) if len(subItems) > 1: self.addDir(MergeDicts(cItem, {'category': 'sub_items', 'title': sTitle, 'icon': sIcon, 'sub_items': subItems})) elif len(subItems) == 1: params = subItems[0] params.update({'title': sTitle}) self.addDir(params)
def getLinksForVideo(self, cItem): printDBG("FilmyNaDzis.getLinksForVideo [%s]" % cItem) if 1 == self.up.checkHostSupport(cItem['url']): return self.up.getVideoLinkExt(cItem['url']) urlTab = [] cacheKey = cItem['url'] cacheTab = self.cacheLinks.get(cacheKey, []) if cacheTab: return cacheTab self.cacheLinks = {} sts, data = self.getPage(cItem['url']) if not sts: return cUrl = self.cm.meta['url'] token = ph.find(data, ('<meta', '>', 'token'))[1] token_name = ph.getattr(token, 'name') token_content = ph.getattr(token, 'content') printDBG( "FilmyNaDzis.getLinksForVideo --> token --> name '%s' - content '%s'" % (token_name, token_content)) urlParams = self.getDefaultParams(True) urlParams['header'] = MergeDicts(urlParams['header'], { 'Referer': cUrl, 'x-csrf-' + token_name: token_content }) data = ph.find(data, ('<div', '>', 'video_thumbnail'), '</div>', flags=0)[1] printDBG("------------------------") printDBG(data) printDBG("------------------------") tmp = self.getFullUrl(ph.search(data, ph.A)[1], cUrl) if tmp: if self.cm.getBaseUrl(tmp) != self.cm.getBaseUrl(cUrl): name = self.cm.getBaseUrl(tmp) params = { 'name': name, 'url': strwithmeta(tmp, { 'Referer': cUrl, 'x-csrf-' + token_name: token_content }), 'need_resolve': 1 } printDBG("-------> link: %s" % str(params)) urlTab.append(params) else: printDBG("-------> %s" % tmp) tmp = ph.find(data, ('<a', '>', ph.check(ph.all, ('data-id', ))))[1] tmp = re.compile('''data-([^=]+?)="([^"]*?)"''').findall(tmp) sts, data = self.getPage( cUrl, urlParams, MergeDicts({'action': 'get_video_player'}, dict(tmp))) if not sts: return tmp = self.cm.ph.getAllItemsBeetwenMarkers(data, '<source', '>') if len(tmp): for item in tmp: type = self.cm.ph.getSearchGroups( item, '''type=['"]([^'^"]+?)['"]''')[0].lower() url = self.cm.ph.getSearchGroups( item, '''src=['"]([^'^"]+?)['"]''')[0] if 'video/mp4' == type: urlTab.append({ 'name': self.up.getHostName(url), 'url': self.getFullUrl(url), 'need_resolve': 0 }) elif 'm3u' in url: urlTab.extend( getDirectM3U8Playlist(url, checkExt=False, checkContent=True, sortWithMaxBitrate=999999999)) tmp = re.compile('''<iframe[^>]+?src=['"]([^'^"]+?)['"]''', re.IGNORECASE).findall(data) if len(tmp): for item in tmp: urlTab.append({ 'name': self.up.getHostName(item), 'url': self.getFullUrl(item), 'need_resolve': 1 }) if urlTab: self.cacheLinks[cacheKey] = urlTab return urlTab