def del2Filters(self, cItem, nextCategory): printDBG("Del.fillCacheFilters") sts, data = self.getPage(cItem['url'] + 'videos/') if not sts: return data = ph.find(data, ('<div', '>', 'select_rechts'), '</div>', flags=0)[1] data = ph.findall(data, ('<option', '>'), '</option>', flags=ph.START_S) for idx in range(1, len(data), 2): url = self.cm.getFullUrl(ph.getattr(data[idx - 1], 'value'), self.cm.meta['url']) title = self.cleanHtmlStr(data[idx]) self.addDir( MergeDicts( cItem, { 'good_for_fav': True, 'category': nextCategory, 'title': title, 'url': url }))
def listProgramsMenu(self, cItem, nextCategory1, nextCategory2): printDBG("C7tvDe.listProgramsMenu") sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) data = ph.find(data, ('<nav', '>', 'tvshow-nav'), '</nav>', flags=0)[1] data = data.split('</ul>')[:-1] for sData in data: subItems = [] sTitle = ph.clean_html( ph.find(sData, ('<h3', '>'), '</h3>', flags=0)[1]) sData = ph.findall(sData, ('<a', '>'), '</a>', flags=ph.START_S) for idx in range(1, len(sData), 2): url = self.getFullUrl(ph.getattr(sData[idx - 1], 'data-href')) title = ph.clean_html(sData[idx]) if url: subItems.append( MergeDicts(cItem, { 'url': url, 'title': title, 'category': nextCategory2 })) else: subItems.append( MergeDicts(cItem, { 'title': title, 'category': nextCategory1 })) if not sTitle: self.currList.extend(subItems) else: self.addDir( MergeDicts( cItem, { 'category': 'sub_items', 'sub_items': subItems, 'title': sTitle }))
def getItems(self, cItem, nextCategory, data): retList = [] sTitle = ph.clean_html( ph.find(data, ('<span', '>', 'format-header_title'), '</span>', flags=0)[1]) data = ph.findall(data, ('<article', '>', 'teaser'), '</article>', flags=ph.START_S) for idx in range(1, len(data), 2): item = data[idx] url = ph.search(item, ph.A)[1] icon = self.getFullIconUrl(ph.getattr(item, 'data-src')) desc = ph.clean_html( ph.find(item, ('<div', '>', 'caption'), '</div>', flags=0)[1]) title = ph.clean_html( ph.find(item, ('<h5', '>', 'title'), '</h5>', flags=0)[1]) if title == '': title = url.rsplit('/', 1)[-1].replace( '-', ' ').decode('utf-8').title().encode('utf-8') desc = [desc] if desc else [] desc.append( ph.clean_html(ph.find(item, ('<p', '>'), '</p>', flags=0)[1])) if sTitle: title = '%s: %s' % (sTitle, title) params = MergeDicts( cItem, { 'good_for_fav': True, 'title': title, 'url': self.getFullUrl(url), 'icon': icon, 'desc': '[/br]'.join(desc) }) if 'class-clip' in data[idx - 1]: # and '-clip' in url: params.update({'type': 'video'}) else: params.update({'category': nextCategory}) retList.append(params) return retList
def getLinksForVideo(self, cItem): printDBG("FilmPalastTo.getLinksForVideo [%s]" % cItem) linksTab = [] linksTab = self.cacheLinks.get(cItem['url'], []) if len(linksTab) > 0: return linksTab sts, data = self.getPage(cItem['url'], self.defaultParams) if not sts: return [] items = ph.findall(data, ('<ul', '>', 'currentStreamLinks'), '</ul>', flags=0) for item in items: #printDBG(item) title = ph.clean_html( ph.find(item, ('<p', '>'), '</p>', flags=0)[1]) if not title: title = ph.clean_html(item) url = re.findall("data-player-url=\"(.*?)\"", item) if url: url = url[0] else: url = re.findall("data-player-url=\"(.*?)\"", item) if url: url = url[0] else: continue linksTab.append({'name': title, 'url': url, 'need_resolve': 1}) if len(linksTab): self.cacheLinks[cItem['url']] = linksTab return linksTab
def listSubCategories(self, cItem, nextCategory): printDBG('CrtankoCom.listSubCategories') sts, data = self.cm.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) data = ph.find(data, ('<ul', '>', 'browse-categories'), '</ul>', flags=0)[1] data = ph.findall(data, ('<li', '>'), '</li>', flags=0) for item in data: title = ph.clean_html(item) url = self.getFullUrl(ph.search(item, ph.A)[1]) icon = self.getFullIconUrl(ph.search(item, ph.IMG)[1]) self.addDir( MergeDicts( cItem, { 'good_for_fav': True, 'category': nextCategory, 'title': title, 'url': url, 'icon': icon }))
def listPopular(self, cItem): printDBG('DixMax.listPopular') sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) data = ph.find(data, ('<section', '>', 'content'), '</section>', flags=0)[1] titleMap = {} tmp = ph.find(data, ('<ul', '>', 'tablist'), '</ul>', flags=0)[1] tmp = ph.findall(tmp, ('<a', '>', 'aria-controls'), '</a>', flags=ph.START_S) for idx in range(1, len(tmp), 2): title = ph.clean_html(tmp[idx]) key = ph.getattr(tmp[idx - 1], 'aria-controls') titleMap[key] = title data = ph.rfindall(data, '</div>', ('<div', '>', 'tabpanel')) for item in data: title = titleMap.get(ph.getattr(item, 'id'), '') subItems = self._listItems2(cItem, 'explore_item', item) if subItems: self.addDir(MergeDicts(cItem, {'title': title, 'category': 'sub_items', 'sub_items': subItems}))
def listSearchItems(self, cItem): printDBG("Redbull.listSearchItems") page = cItem.get('page', 1) sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) #printDBG("hostredbull.listSearchItems |%s|" % data) data2 = ph.findall(data, '<twoLine', '</twoLine') for item in data2: params = self.getInfo(item) if params['content_type'] in ['products', 'collection']: params['category'] = 'explore_item' #printDBG(str(params)) self.addDir(params) elif params['content_type'] in ['content', 'page_stream']: #printDBG(str(params)) self.addVideo(params) else: printDBG("Content Type unknown: %s " % params['content_type'])
def listSeasons(self, cItem, nextCategory): printDBG("BSTO.listSeasons") sts, data = self.getPage(cItem['url']) if not sts: return descData = self.cm.ph.getDataBeetwenMarkers(data, '<div id="sp_left">', '<script', False)[1] desc = self.cleanHtmlStr(self.cm.ph.getDataBeetwenMarkers(descData, '<p', '</p>')[1]) icon = self.getFullIconUrl(self.cm.ph.getSearchGroups(descData, '''src=['"]([^'^"]+?)['"]''')[0]) data = self.cm.ph.getDataBeetwenMarkers(data, '<div class="seasons">', '</ul>')[1] seasonLabel = self.cleanHtmlStr(self.cm.ph.getDataBeetwenMarkers(data, '<strong>', '</strong>', False)[1]) printDBG(seasonLabel) items = ph.findall(data , ('<li', '>'), '</li>') for item in items: url = self.getFullUrl(self.cm.ph.getSearchGroups(item, '''href=['"]([^'^"]+?)['"]''')[0]) title = self.cleanHtmlStr(item) params = dict(cItem) params.update({'good_for_fav':False, 'category':nextCategory, 'title':'%s %s' % (seasonLabel, title), 's_num':title, 'series_title':cItem['title'], 'url':url, 'icon':icon, 'desc':desc}) printDBG(str(params)) self.addDir(params)
def listsCats(self, cItem, nextCat): printDBG("hostszenestreamz.listsCats |%s|" % cItem) url = cItem['url'] if '/publ/' in url: cats = self.MOVIES_GENRE_CAT else: cats = self.SERIES_GENRE_CAT if cats == []: sts, data = self.getPage(url) if not sts: return data = ph.findall(data, '<a class="CatInf"', '</a>') for item in data: url = self.getFullUrl(ph.search(item, ph.A_HREF_URI_RE)[1]) title = ph.search(item, '''class="CatNameInf">([^<]+)<''')[0] if title.startswith('S-'): title = title.replace('S-', '') cats.append({'category': 'list_items', 'title': title, 'url': url}) self.listsTab(cats, nextCat)
def listMain(self, cItem, nextCategory): printDBG('Fenixsite >>>>>>>>>>>> listMain >> %s' % cItem) sts, data = self.getPage(self.getMainUrl()) if not sts: return self.setMainUrl(self.cm.meta['url']) data = ph.find(data, ('<ul', '>', 'navbar'), '</ul>')[1] data = ph.findall(data, ('<li', '>'), '</li>') for item in data: url = ph.getattr(item, 'href') if '/strani_filmovi/' in url or '/strane_serije/' in url: title = ph.clean_html(item) self.addDir( MergeDicts( cItem, { 'category': nextCategory, 'url': self.getFullUrl(url), 'title': title, 'desc': self.HOST_DESC })) MAIN_CAT_TAB = [{ 'category': nextCategory, 'title': 'Anime', 'url': self.getFullUrl('/load/anime_serije/95'), 'desc': self.HOST_DESC }, { 'category': 'search', 'title': _('Search'), 'search_item': True, 'desc': self.HOST_DESC }, { 'category': 'search_history', 'title': _('Search history'), 'desc': self.HOST_DESC }] self.listsTab(MAIN_CAT_TAB, cItem)
def listItems(self, cItem): printDBG("Fenixsite.listItems") page = cItem.get('page', 1) url = cItem['url'] if page == 1: url += '-%s-%s' % (page, cItem['f_sort']) sts, data = self.getPage(url) if not sts: return self.setMainUrl(self.cm.meta['url']) mainDesc = self.cleanHtmlStr(ph.find(data, ('<div', '>', 'shortstory-news'), '</div>', flags=0)[1].split('</h1>', 1)[-1]) tmp = ph.find(data, ('<span', '>', 'pagesBlock'), '</td>')[1] tmp = ph.search(tmp, '''<a([^>]+?spages\(\s*?['"]%s['"][^>]*?)>''' % (page + 1))[0] nextPage = self.getFullUrl(ph.getattr(tmp, 'href')) reIcon = re.compile(r'''<img[^>]+?src=(['"])([^>]*?\.(?:jpe?g|png|gif)(?:\?[^\1]*?)?)(?:\1)''', re.I) data = ph.findall(data, ('<div', '>', 'entry'), '</ul>') for item in data: url = self.getFullUrl(ph.search(item, ph.A_HREF_URI_RE)[1]) icon = self.getFullIconUrl(ph.search(item, reIcon)[1]) title = self.cleanHtmlStr(ph.find(item, ('<h', '>'), '</h', flags=0)[1]) desc = [] tmp = [ph.find(item, ('<i', '>', 'eye'), '</span', flags=0)[1], ph.find(item, ('<i', '>', 'comments'), '</span', flags=0)[1], ph.find(item, ('<i', '>', 'comments'), '</span', flags=0)[1]] for t in tmp: t = self.cleanHtmlStr(t) if t: desc.append(t) tmp = ph.find(item, ('<ul', '>', 'title'))[1] desc.append(ph.getattr(tmp, 'title').replace('/', ' (') + ')') self.addVideo({'good_for_fav': True, 'title': title, 'url': url, 'icon': icon, 'desc': ' | '.join(desc) + '[/br]' + mainDesc}) if nextPage: self.addDir(MergeDicts(cItem, {'good_for_fav': False, 'title': _('Next page'), 'url': nextPage, 'page': page + 1}))
def listVodItem(self, cItem, nextCategory): printDBG("EskaGo.listVodItem") url = cItem['url'] if '/vod/' in url: type = 'vod' url = url.replace('/vod/', '/ajax/vod/') else: type = 'serial' url = url.replace('/serial/', '/ajax/serial/').replace('/program/', '/ajax/program/') sts, data = self.cm.getPage(url) if not sts: return desc = self.cleanHtmlStr( ph.find(data, ('<div', '>', 'text-desc'), '</div>', flags=0)[1] ) icon = ph.find(data, ('<div', '>', 'bg-film'), '</div>', flags=0)[1] icon = self.cm.getFullUrl(ph.search(icon, ph.IMAGE_SRC_URI_RE)[1], self.cm.meta['url']) if not icon: icon = cItem.get('icon', '') if type != 'vod': tmp = ph.find(data, ('<div', '>', 'seasons'), ('<div', '>', 'clear'), flags=0)[1] tmp = ph.findall(tmp, '<a', '</a>') for item in tmp: url = self.cm.getFullUrl(ph.search(item, ph.A_HREF_URI_RE)[1], self.cm.meta['url']) title = self.cleanHtmlStr(item) if not title: continue self.addDir(MergeDicts(cItem, {'good_for_fav':True, 'category':nextCategory, 'title':title, 's_title': '%s: %s,' % (cItem['title'], title), 'url':url, 'icon':icon, 'desc':desc})) if len(self.currList) == 0: cItem = MergeDicts(cItem, {'s_title':'%s: ' % cItem['title']}) self.listVodEpisodes(cItem, data) else: tmp = ph.find(data, ('<div', '>', 'layer-vod'), '</script>', flags=0)[1] if tmp: self.addVideo(MergeDicts(cItem, {'good_for_fav':True, 'icon':icon, 'desc':desc})) trailer = ph.find(data, ('<a', '>', 'trailer'), '</a>')[1] trailer = self.cm.getFullUrl(ph.search(trailer, ph.A_HREF_URI_RE)[1], self.cm.meta['url']) if trailer: self.addVideo(MergeDicts(cItem, {'good_for_fav':True, 'title':_('%s - trailer') % (cItem['title']), 'url':trailer, 'icon':icon, 'desc':desc, 'is_trailer':True}))
def _getBaseVideoLink(self, wholeData): videoUrlParams = [] tmpUrls = [] data = ph.findall(wholeData, '<iframe', '</iframe>', flags=ph.I | ph.START_E | ph.END_E) for item in data: url = ph.getattr(item, 'src', flags=ph.I) if url in tmpUrls: continue tmpUrls.append(url) if url.startswith( 'http' ) and 'facebook.com' not in url and 1 == self.up.checkHostSupport( url): videoUrlParams.append({ 'name': self.up.getHostName(url), 'url': url, 'need_resolve': 1 }) data = re.compile( 'onclick=[^>]*?[\'"](https?://[^\'^"]+?)[\'"]').findall(wholeData) for url in data: if url in tmpUrls: continue tmpUrls.append(url) if 'facebook.com' not in url and 1 == self.up.checkHostSupport( url): videoUrlParams.append({ 'name': self.up.getHostName(url), 'url': url, 'need_resolve': 1 }) return videoUrlParams
def listItems(self, cItem, nextCategory): printDBG("HD1080Online.listItems") page = cItem.get('page', 1) sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) nextPage = ph.find(data, ('<span', '>', 'pnext'), '</span>', flags=0)[1] nextPage = self.getFullUrl(ph.search(nextPage, ph.A)[1]) data = ph.find(data, ('<div', '>', 'dle-content'), ('<aside', '>'))[1] data = ph.rfindall(data, '</div>', ('<div', '>', 'kino-item')) if data and nextPage: data[-1] = ph.find(data[-1], '<div', ('<div', '>', 'pagi-nav'))[1] for item in data: url = self.getFullUrl( ph.search(item, ph.A)[1] ) icon = self.getFullIconUrl( ph.search(item, ph.IMG)[1] ) title = self.cleanHtmlStr(ph.find(item, ('<div', '>', 'title'), '</div>', flags=0)[1]) desc = [] tmp = ph.find(item, ('<ul', '>', 'lines'), '<ul', flags=0)[1] tmp = ph.findall(tmp, ('<li', '>'), '</li>', flags=0) for t in tmp: t = ph.clean_html(t) if t: desc.append(t) # rating desc.append(ph.clean_html(ph.rfind(item, ('<div', '>', 'ratig-layer'), ('<b', '>'), flags=0)[1])) t = ph.clean_html(ph.find(item, ('<li', '>', 'current-rating'), '</li>', flags=0)[1]) if t.isdigit(): desc[-1] += ' %s/10' % str(int(t) / 10.0) desc.append(ph.clean_html(ph.find(item, ('<div', '>', 'desc'), '</div>', flags=0)[1])) self.addDir(MergeDicts(cItem, {'good_for_fav':True, 'category':nextCategory, 'title':title, 'url':url, 'icon':icon, 'desc':'[/br]'.join(desc)})) if nextPage: self.addDir(MergeDicts(cItem, {'good_for_fav':False, 'title':_('Next page'), 'url':nextPage, 'page':page + 1}))
def listSort(self, cItem, nextCategory): printDBG('Fenixsite >>>>>>>>>>>> listSort >> %s' % cItem) sts, pageData = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) directionsTitle = {1: '↑', 0: '↓'} data = ph.find(pageData, ('<span', '>', 'sortBlock'), '</span>')[1] data = ph.findall(data, ('<a', '>'), '</a>', flags=ph.START_S) items = [[], []] for idx in range(1, len(data), 2): item = ph.find(data[(idx - 1)], 'ssorts(', ')', flags=0)[1].split(',') if len(item) != 3: continue title = ph.clean_html(data[idx]) url = self.getFullUrl(item[1].strip()[1:-1]) try: sort = int(item[0].strip()[1:-1]) sort = sort + 1 if sort % 2 else sort for i in range(2): sort -= i items[i].append( MergeDicts( cItem, { 'good_for_fav': True, 'category': nextCategory, 'url': url, 'title': '%s %s' % (directionsTitle[i], title), 'f_sort': sort })) except Exception: printExc() self.currList = items[0] self.currList.extend(items[1]) if not self.currList: self.listItems(MergeDicts(cItem, {'category': nextCategory}), pageData)
def listMainMenu(self, cItem, nextCategory1, nextCategory2): printDBG('BBCSport.listMainMenu') url = self.getFullUrl('/sport/snooker') sts, data = self.getPage(url) if not sts: return self.setMainUrl(data.meta['url']) liveguideData = ph.find(data, ('<aside', '</aside>', 'liveguide'), ('<div', '</div>'))[1] icon = self.getFullIconUrl(ph.search(liveguideData, ph.IMG)[1]) url = self.getFullUrl(ph.search(liveguideData, ph.A)[1]) if url: title = ph.clean_html(ph.getattr(liveguideData, 'alt')) desc = ph.clean_html(ph.find(liveguideData, ('<p', '>', 'summary'), '</p>', flags=0)[1]) self.addDir(MergeDicts(cItem, {'good_for_fav': True, 'category': 'live_guide', 'title': title, 'url': url, 'icon': icon, 'desc': desc})) data = ph.find(data, ('<nav', '>', 'primary-nav'), ('</nav', '>'), flags=0)[1] data = ph.findall(data, ('<li', '>'), '</li>', flags=0) for item in data: url = self.getFullUrl(ph.search(item, ph.A)[1]) if not self.cm.isValidUrl(url): continue if '/my-sport' in url: continue title = ph.clean_html(item) if '/all-sports' in url: category = nextCategory2 else: category = nextCategory1 self.addDir(MergeDicts(cItem, {'good_for_fav': True, 'category': category, 'title': title, 'url': url}))
def getArticleContent(self, cItem, data=None): printDBG("HD1080Online.getArticleContent [%s]" % cItem) retTab = [] itemsList = [] if not data: url = cItem.get('prev_url', cItem['url']) sts, data = self.getPage(url) if not sts: return [] self.setMainUrl(self.cm.meta['url']) rating = ph.clean_html(ph.find(data, ('<div', '>', 'aggregateRating'), '</div>', flags=0)[1]) data = ph.find(data, ('<div', '>', 'dle-content'), ('<', '>', 'kino-online'), flags=0)[1] title = self.cleanHtmlStr(ph.find(data, ('<h1', '>'), '</h1>', flags=0)[1]) icon = self.getFullIconUrl(ph.search(data, ph.IMG)[1]) desc = self.cleanHtmlStr(ph.find(data, ('<div', '>', 'description'), '</div>', flags=0)[1]) data = ph.find(data, ('<ul', '>', 'opisanie'), '</ul>', flags=0)[1] data = ph.findall(data, ('<b', '</b>'), '</li>', flags=ph.START_S) for idx in range(1, len(data), 2): label = ph.clean_html(data[idx - 1]) value = ph.clean_html(data[idx]) if label and value: itemsList.append((label, value)) itemsList.append((_('Rating'), rating)) if title == '': title = cItem['title'] if icon == '': icon = cItem.get('icon', self.DEFAULT_ICON_URL) if desc == '': desc = cItem.get('desc', '') return [{'title': self.cleanHtmlStr(title), 'text': self.cleanHtmlStr(desc), 'images': [{'title': '', 'url': self.getFullUrl(icon)}], 'other_info': {'custom_items_list': itemsList}}]
def listSearchItems(self, cItem): printDBG("Redbull.listSearchItems") page = cItem.get('page', 1) sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) printDBG("hostredbull.listSearchItems |%s|" % data) data2 = ph.findall(data, '<twoLine', '</twoLine') for item in data2: icon = self.getFullIconUrl( ph.search(item, '''src720=['"]([^'^"]+?)['"]''')[0]) url = self.getFullUrl( ph.search(item, '''onPlay="loadPage\(['"]([^'^"]+?)['"]''')[0]) title = self.cleanHtmlStr( ph.search(item, '''<label2>([^>]+?)</label2>''')[0]) if not title: title = self.cleanHtmlStr( ph.search(item, '''<title>([^>]+?)</title>''')[0]) if not title: title = self.cleanHtmlStr( ph.search(item, '''<label>([^>]+?)</label>''')[0]) if not title: title = self.cleanHtmlStr( ph.search(item, '''Label=['"]([^'^"]+?)['"]''')[0]) time = self.cleanHtmlStr( ph.search(item, '''Duration: ([^'^"]+?)<''')[0]) params = { 'title': title, 'icon': icon, 'desc': '[' + time + ']', 'url': url } self.addVideo(params)
def _getAjaxData(self, data, cUrl): post_data = {'action': 'electeur'} ajaxUrl = self.getFullUrl( ph.search( data, '\\s*=\\s*[\'"]([^\'^"]*?ajax[^\'^"]*?)[\'"]')[0].replace( '\\/', '/')) data = ph.find(data, ('<div', '>', 'content-left'), ('<div', '>', 'watch-area'), flags=0)[1] data = ph.findall(data, '<input', '>', flags=0) for item in data: val = ph.getattr(item, 'value') name = ph.getattr(item, 'name') post_data[name] = val header = MergeDicts(self.defaultParams['header'], { 'Referer': cUrl, 'Accept': '*/*', 'X-Requested-With': 'XMLHttpRequest' }) params = MergeDicts(self.defaultParams, {'header': header}) sts, data = self.getPage(ajaxUrl, params, post_data) return str(data)
def listVodEpisodes(self, cItem, data=None): printDBG("EskaGo.listVodEpisodes") if not data: url = cItem['url'].replace('/serial/', '/ajax/serial/') sts, data = self.cm.getPage(url) if not sts: return sTitle = cItem['s_title'] data = ph.findall(data, ('<div', '>', 'box-movie-small'), '</div>', flags=0) for item in data: url = self.cm.getFullUrl( ph.search(item, ph.A_HREF_URI_RE)[1], self.cm.meta['url']) icon = self.cm.getFullUrl( ph.search(item, ph.IMAGE_SRC_URI_RE)[1], self.cm.meta['url']) title = self.cleanHtmlStr( ph.find(item, ('<strong', '>'), '</strong>', flags=0)[1]) self.addVideo({ 'good_for_fav': True, 'title': '%s %s' % (sTitle, title), 'url': url, 'icon': icon })
def listABC(self, cItem, nextCategory): printDBG('SeriesBlanco.listABC') sts, data = self.getPage(cItem['url']) if not sts: return cUrl = self.cm.meta['url'] self.setMainUrl(cUrl) self.addDir( MergeDicts(cItem, { 'category': nextCategory, 'url': cUrl, 'title': _('--All--') })) data = ph.find(data, ('<div', '>', 'groupe-links'), '</div>')[1] data = ph.findall(data, ('<a', '>'), '</a>', flags=ph.START_S) for idx in range(1, len(data), 2): url = self.getFullUrl(ph.getattr(data[idx - 1], 'href')) title = ph.clean_html(data[idx]) self.addDir( MergeDicts(cItem, { 'category': nextCategory, 'url': url, 'title': title }))
def listItems(self, cItem, nextCategory, post_data=None): printDBG("hostszenestreamz.listItems |%s|" % cItem) url = cItem['url'] page = cItem.get('page', 1) sts, data = self.getPage(url, {}, post_data) if not sts: return nextPage, pagedata = ph.find(data, '<span class="pagesBlockuz1">', '<span class="numShown73">') urls = [] titles = [] genres = [] ldata = ph.findall(data, '<a class="newstitl entryLink"', '</a>') for item in ldata: url = self.getFullUrl(ph.search(item, ph.A_HREF_URI_RE)[1]) urls.append(url) title = self.cleanHtmlStr(ph.search(item, '''href=['"][^'^"]+['"]>(.+)</''')[0]) titles.append(title) gdata = ph.findall(data, '<div class="MesWrapBlogDet"', '</a>') for item in gdata: if '<script>' in item: continue genre = self.cleanHtmlStr(ph.search(item, '''href=['"][^'^"]+['"]>([^<]+)</''')[0]) genre = genre.replace('Genre: ', '') if genre.startswith('S-'): genre = genre.replace('S-', '') genres.append(genre) index = 0 data = ph.findall(data, '<div class="ImgWrapNews">', '</div>') for item in data: icon = self.getFullIconUrl(ph.search(item, '''src=['"]([^'^"]+?)['"]''')[0]) url = urls[index] title = titles[index] genre = genres[index] desc = '' if genre != '': desc = genre params = dict(cItem) params.update({'good_for_fav': True, 'category': nextCategory, 'title': title, 'url': url, 'desc': desc, 'icon': icon}) self.addDir(params) index += 1 printDBG("hostszenestreamz.title [%s]" % title) if nextPage: printDBG("hostszenestreamz.nextPage") thispage = ph.findall(pagedata, 'class="swchItem', '</span>') current_page = False url = '' for pitem in thispage: if 'swchItemA' in pitem: current_page = True elif current_page: url = self.getFullUrl(ph.search(pitem, '''href="([^"]+)"''')[0]) break if url != '': params = dict(cItem) params.update({'good_for_fav': False, 'title': _('Next page'), 'page': page + 1, 'url': url}) self.addDir(params)
def exploreItem(self, cItem): printDBG("GoMovies.exploreItem") sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) # trailer trailerUrl = ph.search( data, '''trailer['"]?\s*?:\s*?['"](https?://[^'^"]+?youtube[^'^"]+?)['"]''' )[0] if trailerUrl != '' and not trailerUrl.endswith('/'): params = dict(cItem) params.update({ 'good_for_fav': False, 'title': '%s : %s' % (cItem['title'], _('trailer')), 'url': trailerUrl }) self.addVideo(params) playerUrl = ph.find(data, ('<a', '>', 'watching('), '</a>')[1] playerUrl = self.getFullUrl(ph.getattr(playerUrl, 'href')) params = dict(self.defaultParams) params['header'] = dict(params['header']) params['header']['Referer'] = self.cm.meta['url'] sts, data = self.getPage(playerUrl, params) if not sts: return titlesTab = [] self.cacheLinks = {} data = ph.findall(data, ('<div', '>', 'server-'), ('<div', '>', 'clearfix')) for tmp in data: serverName = ph.clean_html(ph.find(tmp, '<strong', '</strong>')[1]) serverId = ph.search(tmp, '''server\-([0-9]+)''')[0] tmp = ph.findall(tmp, '<a', '</a>') for item in tmp: title = ph.clean_html(item) id = ph.getattr(item, 'sid') playerData = ph.search( item, '''data\-([^=]+?)=['"]([^'^"]+?)['"]''') if 'https://mystream.streamango.to/' in playerData[1]: playerData[1] = playerData[1].replace( 'https://mystream.streamango.to/', '') if playerData[0] == 'strgo': url = 'https://vidload.co/player/' + playerData[1] elif playerData[0] == 'onlystream': url = 'https://vidoo.tv/e/' + playerData[1] elif playerData[0] == 'svbackup': url = 'https://embed.mystream.to/' + playerData[1] else: url = self.getFullUrl(playerData[1]) if title not in titlesTab: titlesTab.append(title) self.cacheLinks[title] = [] url = strwithmeta(url, {'id': id, 'server_id': serverId}) self.cacheLinks[title].append({ 'name': serverName, 'url': url, 'need_resolve': 1 }) for item in titlesTab: params = dict(cItem) params.update({ 'good_for_fav': False, 'title': '%s : %s' % (cItem['title'], item), 'links_key': item }) self.addVideo(params)
def exploreItem(self, cItem): printDBG("hostszenestreamz.exploreItem") sts, data = self.getPage(cItem['url']) if not sts: return if '<div class="noEntry"' in data: return title = cItem.get('title', '') trailerurl = '' trailerdata = ph.findall(data, '<iframe src=', '</iframe>') for item in trailerdata: if 'youtube' in item: trailerurl = self.getFullUrl(ph.search(item, '''src=['"]([^'^"]+?)['"]''')[0]) if trailerurl.endswith('/embed/'): trailerurl = '' break plot = '' plotdata = ph.findall(data, '<p><b>', '</b></p>', flags=0) for item in plotdata: item = item.replace('\n', '') item = item.replace('\r', '') plot = item desc = cItem.get('desc', '') url = cItem.get('url', '') icon = cItem.get('icon', '') if plot != '': if desc != '': desc = desc + '[/br]' desc = desc + plot if trailerurl != '': trailerurl = self.getFullUrl(trailerurl) trailerurl = strwithmeta(trailerurl, {'Referer': url}) params = dict(cItem) params.update({'good_for_fav': False, 'title': '%s %s' % (title, '[Trailer]'), 'url': trailerurl, 'desc': desc}) self.addVideo(params) if '/publ/' in url: links = ph.findall(data, '<div class="inner', '</fieldset>') self.cacheLinks = {} linksKey = cItem['url'] self.cacheLinks[linksKey] = [] params = dict(cItem) url = '' for item in links: item = item.replace('\n', '') item = item.replace('\r', '') url = ph.search(item, ph.A_HREF_URI_RE)[1] name = ph.search(url, '''//([^/]+)/''')[0] nameparts = name.split('.') if len(nameparts) != 2: name = nameparts[-2] + '.' + nameparts[-1] url = self.getFullUrl(url) url = strwithmeta(url, {'Referer': linksKey}) self.cacheLinks[linksKey].append({'name': name, 'url': url, 'need_resolve': 1}) if self.cacheLinks != {}: params = dict(cItem) params.update({'good_for_fav': False, 'title': '%s' % title, 'links_key': linksKey, 'url': linksKey, 'desc': desc}) self.addVideo(params) else: seasons = ph.findall(data, '<div class="spoiler', '</fieldset>') sKey = 0 self.cacheSeasons = {} onlyEpisodes = False episodesList = [] eNum = 1 for item in seasons: item = item.replace('\n', '') item = item.replace('\r', '') season = ph.search(item, '''STAFFEL ([^<]+)<''')[0] if len(season): if season.startswith('0'): season = season.replace('0', '') episodesList = [] links = ph.findall(item, '<a href="', '</a>') eNum = 1 for litem in links: url = ph.search(litem, ph.A_HREF_URI_RE)[1] url = strwithmeta(url, {'Referer': cItem['url']}) episode = str(eNum) etitle = '%s s%se%s' % (cItem['title'], season.zfill(2), episode.zfill(2)) params = {'title': etitle, 'url': url, 'prev_url': cItem['url']} episodesList.append(params) eNum += 1 if len(episodesList): self.cacheSeasons[sKey] = episodesList params = dict(cItem) params.update({'good_for_fav': False, 'category': 'list_episodes', 'title': title + ' ' + _('Season %s') % season, 'url': url, 'desc': desc, 'icon': icon, 's_key': sKey}) self.addDir(params) sKey += 1 else: onlyEpisodes = True season = '1' url = ph.search(item, ph.A_HREF_URI_RE)[1] url = strwithmeta(url, {'Referer': cItem['url']}) episode = str(eNum) etitle = '%s s%se%s' % (cItem['title'], season.zfill(2), episode.zfill(2)) params = {'title': etitle, 'url': url, 'prev_url': cItem['url']} episodesList.append(params) eNum += 1 if onlyEpisodes: if len(episodesList): self.cacheSeasons[sKey] = episodesList params = dict(cItem) params.update({'good_for_fav': False, 'category': 'list_episodes', 'title': title + ' ' + _('Season %s') % season, 'url': url, 'desc': desc, 'icon': icon, 's_key': sKey}) self.addDir(params)
def handleSection(self, cItem, nextCategory, section): printDBG("Redbull.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 showProgram(self, cItem, pagenum=0): printDBG('La7 - start ondemand single program list') url = self.getFullUrl(cItem["url"] + "/rivedila7") sts, html = self.getPage(url) if not sts: return if pagenum == 0: # last episode try: replica = ph.findall(html, "<div class=\"contenitoreUltimaReplica", "<div class=\"clearfix\"></div>")[0] regex_icon = "<img src=\"(.*?)\"" icon = re.findall(regex_icon, replica)[0] regex_url = "<a href=\"(.*?)\"" url = re.findall(regex_url, replica)[0] t, title = ph.find(replica, "<div class=\"title\">", "</div>", flags=0) t, data = ph.find(replica, "<div class=\"dataPuntata\">", "</div>", flags=0) t, desc = ph.find( replica, "<div class=\"views-field views-field-field-testo-lancio\"><p>", "</", flags=0) title = title + " (" + data + ")" title = HTMLParser.HTMLParser().unescape(title).encode('utf-8') desc = HTMLParser.HTMLParser().unescape(desc).encode('utf-8') self.addVideo( MergeDicts( cItem, { 'category': 'epg_item', 'title': title, 'url': url, 'icon': icon, 'desc': desc })) except: printDBG( "la7 - no last episode video box for program '{0}'".format( cItem["title"])) # last week episodes url = self.getFullUrl(cItem["url"] + "/rivedila7/settimana") sts, html = self.getPage(url) if sts: try: repliche = ph.findall(html, "<div class=\"itemPuntata", "</span></div>") for replica in repliche: regex_icon = "<img.*data-src=\"(.*?)\"" icon = re.findall(regex_icon, replica)[0] regex_url = "div class=\"title\"><a href=\"(.*?)\">(.*?)</a>" url, title = re.findall(regex_url, replica)[0] t, data = ph.find(replica, "<div class=\"dataPuntata\">", "</div>", flags=0) t, desc = ph.find( replica, "<div class=\"views-field views-field-field-testo-lancio\">", "</div>", flags=0) title = title + " (" + data + ")" title = HTMLParser.HTMLParser().unescape(title).encode( 'utf-8') desc = HTMLParser.HTMLParser().unescape(desc).encode( 'utf-8') self.addVideo( MergeDicts( cItem, { 'category': 'epg_item', 'title': title, 'url': url, 'icon': icon, 'desc': desc })) except: printDBG( "la7 - no last week episodes for program '{0}'".format( cItem["title"])) else: printDBG( "la7 - error searching last week episodes for program '{0}'" .format(cItem["title"])) # older episodes url = self.getFullUrl(cItem["url"] + "/rivedila7/archivio?page={0}".format(pagenum)) sts, html = self.getPage(url) if not sts: return repliche = ph.findall(html, "<div class=\"itemPuntata", "</span></div>") for replica in repliche: regex_icon = "<img.*data-src=\"(.*?)\"" icon = re.findall(regex_icon, replica)[0] regex_url = "div class=\"title\"><a href=\"(.*?)\">(.*?)</a>" url, title = re.findall(regex_url, replica)[0] t, data = ph.find(replica, "<div class=\"dataPuntata\">", "</div>", flags=0) t, desc = ph.find( replica, "<div class=\"views-field views-field-field-testo-lancio\">", "</div>", flags=0) title = title + " (" + data + ")" title = HTMLParser.HTMLParser().unescape(title).encode('utf-8') desc = HTMLParser.HTMLParser().unescape(desc).encode('utf-8') self.addVideo( MergeDicts( cItem, { 'category': 'epg_item', 'title': title, 'url': url, 'icon': icon, 'desc': desc })) # look for next button in page if html.find("<li class=\"pager-next\">") != -1: pagenum = pagenum + 1 self.addMore( MergeDicts( cItem, { 'category': 'program_next', 'title': _('Next page'), 'page_number': pagenum }))
def getPage(self, baseUrl, addParams={}, post_data=None): tries = 0 cUrl = '' while tries < 4: tries += 1 if addParams == {}: addParams = dict(self.defaultParams) sts, data = self.cm.getPage(baseUrl, addParams, post_data) if not sts: return sts, data cUrl = self.cm.meta['url'] if 'DDoS' in data: if tries == 1: rm(self.COOKIE_FILE) continue timestamp = time.time() * 1000 jscode = '' tmp = ph.findall(data, ('<script', '>'), '</script>', flags=0) for item in tmp: if 'xhr.open' in item: jscode = item break js_params = [{'path': GetJSScriptFile('cinemaxx1.byte')}] js_params.append({'code': jscode}) ret = js_execute_ext(js_params) if ret['sts'] and 0 == ret['code']: try: tmp = ret['data'].split('\n', 1) sleep_time = int(float(tmp[1])) tmp = json_loads(tmp[0]) url = self.getFullUrl(tmp['1'], cUrl) params = dict(addParams) params['header'] = MergeDicts(self.HTTP_HEADER, {'Referer': cUrl}) sts2, data2 = self.cm.getPage(url, params) if not sts2: break js_params = [{ 'path': GetJSScriptFile('cinemaxx2.byte') }] js_params.append( {'code': data2 + 'print(JSON.stringify(e2iobj));'}) ret = js_execute_ext(js_params) if ret['sts'] and 0 == ret['code']: cj = self.cm.getCookie(self.COOKIE_FILE) for item in json_loads(ret['data'])['cookies']: for cookieKey, cookieValue in item.iteritems(): cookieItem = cookielib.Cookie( version=0, name=cookieKey, value=cookieValue, port=None, port_specified=False, domain='.' + self.cm.getBaseUrl(cUrl, True), domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=time.time() + 3600 * 48, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False) cj.set_cookie(cookieItem) cj.save(self.COOKIE_FILE, ignore_discard=True) sleep_time -= time.time() * 1000 - timestamp if sleep_time > 0: GetIPTVSleep().Sleep( int(math.ceil(sleep_time / 1000.0))) continue else: break except Exception: printExc() else: break if sts and cUrl: self.cm.meta['url'] = cUrl return sts, data
def listMain(self, cItem, nextCategory): printDBG("Cinemaxx.listMain") sts, data = self.getPage(self.getMainUrl()) if not sts: return self.setMainUrl(self.cm.meta['url']) subItems = [] tmp = ph.findall(data, ('<div', '>', 'owl-cat'), '</div>') for item in tmp: icon = self.getFullIconUrl(ph.search(item, ph.IMAGE_SRC_URI_RE)[1]) item = ph.find(item, ('<h2', '>'), '</h2>', flags=0)[1] url = self.getFullUrl(ph.search(item, ph.A_HREF_URI_RE)[1]) title = self.cleanHtmlStr(item) subItems.append( MergeDicts( cItem, { 'good_for_fav': True, 'category': nextCategory, 'title': title, 'url': url })) printDBG(subItems) sections = ph.find(data, ('<div', '>', 'navbar-collapse'), '</div>')[1] sections = ph.rfindall(sections, '</li>', ('<li', '>', 'nav'), flags=0) for section in sections: tmp = ph.findall(section, ('<a', '>'), '</a>', flags=ph.START_S, limits=1) if not tmp: continue sTitle = ph.clean_html(tmp[1]) sUrl = ph.getattr(tmp[0], 'href') if sUrl == '/': self.addDir( MergeDicts( cItem, { 'category': 'sub_items', 'sub_items': subItems, 'title': sTitle })) elif '<ul' in section: subItems = [] section = ph.findall(section, ('<li', '>'), '</li>', flags=0) for item in section: title = ph.clean_html(item) url = self.getFullUrl(ph.search(item, ph.A_HREF_URI_RE)[1]) subItems.append( MergeDicts( cItem, { 'good_for_fav': True, 'category': nextCategory, 'title': title, 'url': url })) if len(subItems): self.addDir( MergeDicts( cItem, { 'category': 'sub_items', 'sub_items': subItems, 'title': sTitle })) else: self.addDir( MergeDicts( cItem, { 'category': nextCategory, 'url': self.getFullUrl(sUrl), 'title': sTitle })) MAIN_CAT_TAB = [{ 'category': 'search', 'title': _('Search'), 'search_item': True }, { 'category': 'search_history', 'title': _('Search history'), }] self.listsTab(MAIN_CAT_TAB, cItem)
def exploreItem(self, cItem, nextCategory): printDBG("C7tvDe.exploreItem") sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(self.cm.meta['url']) tmp = ph.find(data, 'var contentResources = [', '];', flags=0)[1] try: tmp = json_loads('[%s]' % tmp) for item in tmp: icon = self.getFullIconUrl(item.get('poster', '')) desc = [] try: desc.append(str(timedelta(seconds=item['duration']))) except Exception: printExc() try: desc.append(item['teaser']['description']) except Exception: printExc() self.addVideo( MergeDicts( cItem, { 'good_for_fav': False, 'title': item['title'], 'item_data': item, 'icon': icon, 'desc': '[/br]'.join(desc) })) except Exception: printExc() return [] if not cItem.get('sub_menu_item'): tmp = ph.find(data, ('<article', '>', 'class-clip'))[1] if not tmp: return data = ph.find(data, ('<ul', '>', 'format-nav-list'), '</ul>', flags=0)[1] data = ph.findall(data, ('<a', '>'), '</a>', flags=ph.START_S) for idx in range(1, len(data), 2): url = self.getFullUrl(ph.getattr(data[idx - 1], 'href')) if '7tv.de' not in self.cm.getBaseUrl(url, True): continue title = self.cleanHtmlStr(data[idx]) self.addDir( MergeDicts( cItem, { 'good_for_fav': False, 'sub_menu_item': True, 'category': nextCategory, 'title': title, 'url': url })) if len(self.currList) == 1 and self.currList[0]['type'] != 'video': item = self.currList.pop() self.listItems(item, 'explore_item')
def getVideoLink(self, cItem): printDBG("CanlitvliveIoApi.getVideoLink") urlsTab = [] sts, baseData = self.cm.getPage(cItem['url'], self.defaultParams) if not sts: return urlsTab if '/tele1.' in cItem['url']: data = ph.findall(baseData, '<iframe', '>', flags=ph.I) for item in data: printDBG(">>>>>>>>>>>>>>>>>>> " + item) url = self.cm.getFullUrl(ph.getattr(item, 'src'), self.cm.meta['url']) if 1 == self.up.checkHostSupport(url): urlsTab = self.up.getVideoLinkExt( strwithmeta(url, {'Referer': self.cm.meta['url']})) if urlsTab: return urlsTab hlsUrl = ph.search( baseData, '''["'](https?://[^'^"]+?\.m3u8(?:\?[^"^']+?)?)["']''', flags=ph.I)[0] printDBG("hlsUrl||||||||||||||||| " + hlsUrl) if hlsUrl: hlsUrl = strwithmeta( hlsUrl, { 'User-Agent': self.defaultParams['header']['User-Agent'], 'Referer': cItem['url'] }) urlsTab = getDirectM3U8Playlist(hlsUrl, checkContent=True, sortWithMaxBitrate=999999999) if 0 == len(urlsTab): data = ph.find(baseData, '.setup(', ')')[1] videoUrl = ph.search( data, '''['"]?file['"]?\s*:\s*['"](https?://[^'^"]+?)['"]''')[0] if self.cm.isValidUrl(videoUrl): videoUrl = strwithmeta( videoUrl, { 'User-Agent': self.defaultParams['header']['User-Agent'], 'Referer': cItem['url'] }) urlsTab.append({'name': 'direct', 'url': videoUrl}) if 0 == len(urlsTab): videoUrl = ph.search( baseData, '''['"]?streamurl['"]?\s*:\s*['"](https?://[^'^"]+?)['"]''', flags=ph.I)[0] if self.cm.isValidUrl(videoUrl): videoUrl = strwithmeta( videoUrl, { 'User-Agent': self.defaultParams['header']['User-Agent'], 'Referer': cItem['url'] }) urlsTab.append({'name': 'direct', 'url': videoUrl}) return urlsTab