def listItems(self, cItem): printDBG("Vizjer.listItems %s" % cItem) page = cItem.get('page', 1) url = cItem['url'] sort = cItem.get('sort', '') if sort not in url: url = url + sort if '?' in url: url += '&' else: url += '?' if page > 1: url = url + 'page={0}'.format(page) sts, data = self.getPage(url) if not sts: return self.setMainUrl(data.meta['url']) nextPage = self.cm.ph.getDataBeetwenNodes(data, ('<ul', '>', 'pagination'), ('</u', '>'))[1] if '' != self.cm.ph.getSearchGroups(nextPage, 'page=(%s)[^0-9]' % (page+1))[0]: nextPage = True else: nextPage = False if 'phrase=' in cItem['url']: data = self.cm.ph.getAllItemsBeetwenNodes(data, ('<a', '>', 'clearfix item'), ('</a', '>')) else: data = data.split('<div class="poster">')[1:] for item in data: # printDBG("Vizjer.listItems item %s" % item) url = self.getFullUrl(self.cm.ph.getSearchGroups(item, '''href=['"]([^"^']+?)['"]''')[0]) if url == '': continue icon = self.getFullIconUrl(self.cm.ph.getSearchGroups(item, '''src=['"]([^"^']+?poster[^"^']+?)['"]''')[0]) title = unescapeHTML(self.cm.ph.getSearchGroups(item, '''title=['"]([^"^']+?)['"]''')[0]).encode('UTF-8') desc = unescapeHTML(self.cm.ph.getSearchGroups(item, '''data-text=['"]([^"^']+?)['"]''')[0]).encode('UTF-8') if desc == '': desc = self.cleanHtmlStr(self.cm.ph.getDataBeetwenNodes(item, ('<div', '>', 'description'), ('</div', '>'), False)[1]) # quality = self.cleanHtmlStr(self.cm.ph.getDataBeetwenNodes(item, ('<div', '>', 'quality-version'), ('</div', '>'), False)[1]) year = self.cleanHtmlStr(self.cm.ph.getDataBeetwenNodes(item, ('<div', '>', 'rate'), ('</div', '>'), False)[1]) if year != '': desc = _('Year: ') + year + '[/br]' + desc if 'serial-online' in url: params = {'good_for_fav':True,'category':'list_seasons', 'url':url, 'title':title, 'desc':desc, 'icon':icon} self.addDir(params) else: params = {'good_for_fav':True, 'url':url, 'title':title, 'desc':desc, 'icon':icon} self.addVideo(params) if nextPage: params = dict(cItem) params.update({'title':_('Next page'), 'page':page + 1}) self.addDir(params)
def getVideosFromChannelList(self, url, category, page, cItem): printDBG('YouTubeParser.getVideosFromChannelList page[%s]' % (page)) currList = [] try: sts, data = self.cm.getPage(url, {'host': self.HOST}) if sts: if '1' == page: sts, data = CParsingHelper.getDataBeetwenMarkers( data, 'feed-item-container', 'footer-container', False) else: data = unescapeHTML( data.decode('unicode-escape')).encode('utf-8').replace( '\/', '/') # nextPage match = re.search('data-uix-load-more-href="([^"]+?)"', data) if not match: nextPage = "" else: nextPage = match.group(1).replace('&', '&') data = data.split('feed-item-container') currList = self.parseListBase(data) if '' != nextPage: item = dict(cItem) item.update({ 'title': _("Next page"), 'page': str(int(page) + 1), 'url': 'http://www.youtube.com' + nextPage }) currList.append(item) except: printExc() return [] return currList
def getVideosFromChannelList(self, url, category, page, cItem): printDBG('YouTubeParser.getVideosFromChannelList page[%s]' % (page) ) currList = [] try: sts,data = self.cm.getPage(url, {'host': self.HOST}) if sts: if '1' == page: sts,data = CParsingHelper.getDataBeetwenMarkers(data, 'feed-item-container', 'footer-container', False) else: data = unescapeHTML(data.decode('unicode-escape')).encode('utf-8').replace('\/', '/') # nextPage match = re.search('data-uix-load-more-href="([^"]+?)"', data) if not match: nextPage = "" else: nextPage = match.group(1).replace('&', '&') data = data.split('feed-item-container') currList = self.parseListBase(data) if '' != nextPage: item = dict(cItem) item.update({'title': _("Next page"), 'page': str(int(page) + 1), 'url': 'http://www.youtube.com' + nextPage}) currList.append(item) except: printExc() return [] return currList
def convertList(self, cList): hostList = [] for cItem in cList: hostLinks = [] type = CDisplayListItem.TYPE_UNKNOWN if cItem['type'] == 'category': if cItem['title'] == 'Wyszukaj': type = CDisplayListItem.TYPE_SEARCH else: type = CDisplayListItem.TYPE_CATEGORY elif cItem['type'] == 'video': type = CDisplayListItem.TYPE_VIDEO page = cItem.get('page', '') if '' != page: hostLinks.append(CUrlItem("Link", page, 1)) title = cItem.get('title', '') icon = cItem.get('icon', '') # prepar description descTab = ((cItem.get('duration', ''), '|', ''), (cItem.get('gatunek', ''), '|', ''), (cItem.get('plot', ''), '|\t', '')) description = '' for descItem in descTab: if '' != descItem[0]: description += descItem[1] + descItem[0] + descItem[2] hostItem = CDisplayListItem( name=unescapeHTML(title.decode("utf-8")).encode("utf-8"), description=unescapeHTML( description.decode("utf-8")).encode("utf-8"), type=type, urlItems=hostLinks, urlSeparateRequest=1, iconimage=icon) hostList.append(hostItem) return hostList
def convertList(self, cList): hostList = [] for cItem in cList: hostLinks = [] type = CDisplayListItem.TYPE_UNKNOWN if cItem['type'] == 'category': if cItem['title'] == 'Wyszukaj': type = CDisplayListItem.TYPE_SEARCH else: type = CDisplayListItem.TYPE_CATEGORY elif cItem['type'] == 'video': type = CDisplayListItem.TYPE_VIDEO page = cItem.get('page', '') if '' != page: hostLinks.append(CUrlItem("Link", page, 1)) title = cItem.get('title', '') icon = cItem.get('icon', '') # prepar description descTab = ( (cItem.get('duration', ''), '|', '' ), (cItem.get('gatunek', ''), '|', '' ), (cItem.get('plot', ''), '|\t', '' ) ) description = '' for descItem in descTab: if '' != descItem[0]: description += descItem[1] + descItem[0] + descItem[2] hostItem = CDisplayListItem( name = unescapeHTML(title.decode("utf-8")).encode("utf-8"), description = unescapeHTML(description.decode("utf-8")).encode("utf-8"), type = type, urlItems = hostLinks, urlSeparateRequest = 1, iconimage = icon ) hostList.append(hostItem) return hostList
def listItems(self, cItem, category='video'): printDBG("MoviesNight.listMovies") url = cItem['url'] if '?' in url: post = url.split('?') url = post[0] post = post[1] else: post = '' page = cItem.get('page', 1) if page > 1: url += '/page/%d/' % page if post != '': url += '?' + post sts, data = self.cm.getPage(url) if not sts: return nextPage = False if ('/page/%d/' % (page + 1)) in data: nextPage = True data = self.cm.ph.getDataBeetwenMarkers(data, '<div id="content">', '<div id="footer">', False)[1] data = data.split('<div class="home_post_cont post_box">') if len(data): del data[0] for item in data: url = self.cm.ph.getSearchGroups(item, 'href="([^"]+?)"')[0] icon = self.cm.ph.getSearchGroups(item, 'src="([^"]+?)"')[0] tmp = self.cm.ph.getDataBeetwenMarkers(item, 'title="', '"', False)[1] try: tmp = unescapeHTML( tmp.decode('utf-8') ).encode('utf-8') except: printExc() tmp = '' #printDBG("----------------------------------") #printDBG(tmp) tmp = tmp.split('<p>') desc = self.cleanHtmlStr( tmp[-1].replace('\n', '|') ) params = dict(cItem) params.update( {'title': self.cleanHtmlStr( tmp[0] ), 'url':self._getFullUrl(url), 'desc': desc, 'icon':self._getFullUrl(icon)} ) self.addVideo(params) if nextPage: params = dict(cItem) params.update( {'title':_('Next page'), 'page':page+1} ) self.addDir(params)
def getLinksForVideo(self, cItem): printDBG("cda-filmy.getLinksForVideo [%s]" % cItem) cacheKey = cItem['url'] cacheTab = self.cacheLinks.get(cacheKey, []) if len(cacheTab): return cacheTab self.cacheLinks = {} params = dict(self.defaultParams) params['header'] = dict(params['header']) cUrl = cItem['url'] url = cItem['url'] retTab = [] params['header']['Referer'] = cUrl sts, data = self.getPage(url, params) if not sts: return [] cUrl = data.meta['url'] self.setMainUrl(cUrl) data = self.cm.ph.getDataBeetwenNodes(data, ('<div', '>', 'TPlayerTb'), ('<span', '>'))[1] data = unescapeHTML(data).replace('#038;', '') data = self.cm.ph.getAllItemsBeetwenMarkers(data, '<div', '</div>') for item in data: printDBG("cda-filmy.getLinksForVideo item[%s]" % item) url = self.cm.ph.getSearchGroups(item, '''src=['"]([^"^']+?)['"]''', 1, True)[0] sts, data = self.getPage(url, params) if not sts: continue playerUrl = self.cm.ph.getSearchGroups( data, '''src=['"]([^"^']+?)['"]''', 1, True)[0] retTab.append({ 'name': self.up.getHostName(playerUrl), 'url': strwithmeta(playerUrl, {'Referer': url}), 'need_resolve': 1 }) if len(retTab): self.cacheLinks[cacheKey] = retTab return retTab
def listItems(self, cItem): printDBG("Zaluknij.listItems %s" % cItem) page = cItem.get('page', 1) url = cItem['url'] sort = cItem.get('sort', '') if sort not in url: url = url + sort if page > 1: url = url + '/?page={0}'.format(page) sts, data = self.getPage(url) if not sts: return self.setMainUrl(data.meta['url']) nextPage = self.cm.ph.getDataBeetwenNodes(data, ('<ul', '>', 'pagination'), ('</ul', '>'))[1] if '' != self.cm.ph.getSearchGroups(nextPage, 'page=(%s)[^0-9]' % (page + 1))[0]: nextPage = True else: nextPage = False if 'wyszukiwarka?phrase=' in cItem['url']: data = self.cm.ph.getDataBeetwenNodes(data, ('<div', '>', 'advanced-search'), ('<footer', '>'))[1] else: data = self.cm.ph.getDataBeetwenNodes(data, ('<div', '>', 'item-list'), ('<ul', '>'))[1] data = self.cm.ph.getAllItemsBeetwenNodes(data, ('<a', '>'), ('</a', '>')) for item in data: # printDBG("Zaluknij.listItems item %s" % item) url = self.getFullUrl(self.cm.ph.getSearchGroups(item, '''href=['"]([^"^']+?)['"]''')[0]) if url == '': continue icon = self.getFullIconUrl(self.cm.ph.getSearchGroups(item, '''src=['"]([^"^']+?)['"]''')[0]) title = unescapeHTML(self.cm.ph.getSearchGroups(item, '''alt=['"]([^"^']+?)['"]''')[0]).encode('UTF-8') desc = self.cleanHtmlStr(item) if '/serial-online/' in url: params = {'good_for_fav': True, 'category': 'list_seasons', 'url': url, 'title': title, 'desc': desc, 'icon': icon} self.addDir(params) else: params = {'good_for_fav': True, 'url': url, 'title': title, 'desc': desc, 'icon': icon} self.addVideo(params) if nextPage: params = dict(cItem) params.update({'title': _('Next page'), 'page': page + 1}) self.addDir(params)
def listSeries(self, cItem): printDBG("cda-filmy.listSeries") sts, data = self.getPage(cItem['url']) if not sts: return self.setMainUrl(data.meta['url']) data = self.cm.ph.getAllItemsBeetwenNodes(data, ('<div', '>', 'Wdgt AABox'), ('</table', '>')) for sitem in data: season = self.cleanHtmlStr(self.cm.ph.getDataBeetwenNodes(sitem, ('<div', '>', 'Title AA-Season'), ('</div', '>'))[1]) tmp = self.cm.ph.getDataBeetwenMarkers(sitem, '<table>', '</tbody>')[1] tmp = self.cm.ph.getAllItemsBeetwenNodes(sitem, ('<tr', '>'), ('</tr', '>')) for item in tmp: # item = unescapeHTML(item) printDBG("cda-filmy.listSeries item %s" % item) url = self.getFullUrl(self.cm.ph.getSearchGroups(item, '''href=['"]([^"^']+?)['"]''')[0]) if url == '': continue icon = self.getFullIconUrl(self.cm.ph.getSearchGroups(unescapeHTML(item), '''src=['"]([^"^']+?)['"]''')[0]) title = season + ' - ' + self.cleanHtmlStr(self.cm.ph.getDataBeetwenNodes(item, ('<td', '>', 'MvTbTtl'), ('</td', '>'))[1]) params = {'good_for_fav':True, 'url':url, 'title':title, 'icon':icon} self.addVideo(params)
def getVideosFromChannelList(self, url, category, page): printDBG('YouTubeParser.getVideosFromChannelList page[%s]' % (page)) currList = [] #try: if 1: sts, data = self.cm.getPage(url, {'host': self.HOST}) if sts: if '1' == page: sts, data = CParsingHelper.getDataBeetwenMarkers( data, 'video-page-content', 'footer-container', False) else: data = unescapeHTML( data.decode('unicode-escape')).encode('utf-8').replace( '\/', '/') # nextPage match = re.search('data-uix-load-more-href="([^"]+?)"', data) if not match: nextPage = "" else: nextPage = match.group(1).replace('&', '&') data = data.split('context-data-item') currList = self.parseListBase(data) if '' != nextPage: item = { 'type': 'category', 'category': category, 'title': 'Następna strona', 'page': str(int(page) + 1), 'url': 'http://www.youtube.com' + nextPage } currList.append(item) #except: else: printDBG('YouTubeParser.getVideosFromChannelList Exception') return [] return currList
def listItems(self, cItem): printDBG("Zaluknij.listItems %s" % cItem) page = cItem.get('page', 1) url = cItem['url'] if page > 1: url = url + '/page/{0}'.format(page) sts, data = self.getPage(url) if not sts: return self.setMainUrl(data.meta['url']) nextPage = self.cm.ph.getDataBeetwenNodes(data, ('<div', '>', 'pagination'), ('</div', '>'))[1] if '' != self.cm.ph.getSearchGroups(nextPage, 'page/(%s)[^0-9]' % (page + 1))[0]: nextPage = True else: nextPage = False if 'tvshows' in cItem['url']: data = self.cm.ph.getDataBeetwenNodes( data, ('<div', '>', 'archive-content'), ('<div', '>', 'pagination'))[1] if '?s=' in cItem['url']: data = self.cm.ph.getAllItemsBeetwenNodes(data, ('<article', '>'), ('</article', '>')) else: data = self.cm.ph.getAllItemsBeetwenNodes( data, ('<article', '>', 'item'), ('</article', '>')) for item in data: # printDBG("Zaluknij.listItems item %s" % item) url = self.getFullUrl( self.cm.ph.getSearchGroups(item, '''href=['"]([^"^']+?)['"]''')[0]) if url == '': continue icon = self.getFullIconUrl( self.cm.ph.getSearchGroups(item, '''src=['"]([^"^']+?)['"]''')[0]) title = unescapeHTML( self.cm.ph.getSearchGroups( item, '''alt=['"]([^"^']+?)['"]''')[0]).encode('UTF-8') desc = self.cleanHtmlStr(item) if '/tvshows/' in url: params = { 'good_for_fav': True, 'category': 'list_seasons', 'url': url, 'title': title, 'desc': desc, 'icon': icon } self.addDir(params) else: params = { 'good_for_fav': True, 'url': url, 'title': title, 'desc': desc, 'icon': icon } self.addVideo(params) if nextPage: params = dict(cItem) params.update({'title': _('Next page'), 'page': page + 1}) self.addDir(params)
def listItems(self, cItem): printDBG("Dudeplayer.listItems [%s]" % cItem) page = cItem.get('page', 1) cUrl = cItem['url'] if page > 1: cUrl = cUrl + '/page/{0}'.format(page) sts, data = self.getPage(cUrl) if not sts: return self.setMainUrl(data.meta['url']) printDBG("Dudeplayer.listMovieFilters data [%s]" % data) while '/blockscript/detector.php' in data: captchaTitle = self.cm.ph.getAllItemsBeetwenMarkers(data, '<h3', '</h3>') if len(captchaTitle): captchaTitle = self.cleanHtmlStr(captchaTitle[-1]) # parse form data data = self.cm.ph.getDataBeetwenMarkers(data, '<form', '</form>')[1] jscode = self.cm.ph.getDataBeetwenNodes(data, ('<script', '>'), ('</script', '>'), False)[1] jscode = jscode.replace('document.writeln', 't=') + 'console.log(t)' ret = js_execute(jscode) if ret['sts'] and 0 == ret['code']: imgUrl = self.getFullUrl(self.cm.ph.getSearchGroups(ret['data'], '''src=['"]([^"^']+?)['"]''')[0]) actionUrl = self.getFullUrl(self.cm.ph.getSearchGroups(data, 'action="([^"]+?)"')[0], cUrl) tmp = self.cm.ph.getAllItemsBeetwenMarkers(data, '<input type="hidden"', '>') captcha_post_data = {} for it in tmp: val = self.cm.ph.getSearchGroups(it, '''\svalue=['"]?([^'^"^\s]+?)['"\s]''')[0].strip() name = self.cm.ph.getSearchGroups(it, '''\sname=['"]([^'^"]+?)['"]''')[0] captcha_post_data[name] = val params = dict(self.defaultParams) filePath = GetTmpDir('.iptvplayer_captcha.jpg') rm(filePath) ret = self.cm.saveWebFile(filePath, imgUrl.replace('&', '&'), params) if not ret.get('sts'): SetIPTVPlayerLastHostError(_('Fail to get "%s".') % imgUrl) params = deepcopy(IPTVMultipleInputBox.DEF_PARAMS) params['accep_label'] = _('Send') params['title'] = _('Captcha') params['status_text'] = captchaTitle params['with_accept_button'] = True params['list'] = [] item = deepcopy(IPTVMultipleInputBox.DEF_INPUT_PARAMS) item['label_size'] = (160, 75) item['input_size'] = (480, 25) item['icon_path'] = filePath item['title'] = _('Answer') item['input']['text'] = '' params['list'].append(item) ret = 0 retArg = self.sessionEx.waitForFinishOpen(IPTVMultipleInputBox, params) if retArg and len(retArg) and retArg[0]: captcha_post_data['val'] = retArg[0][0] paramsUrl = dict(self.ajaxParams) paramsUrl['header'] = dict(paramsUrl['header']) paramsUrl['header']['Referer'] = cUrl sts, data = self.cm.getPage(actionUrl, paramsUrl, captcha_post_data) nextPage = self.cm.ph.getDataBeetwenNodes(data, ('<div', '>', 'pagination'), ('</div', '>'))[1] if '' != self.cm.ph.getSearchGroups(nextPage, 'page/(%s)[^0-9]' % (page + 1))[0]: nextPage = True else: nextPage = False if '?s=' in cItem['url']: data = self.cm.ph.getAllItemsBeetwenNodes(data, ('<article', '>'), ('</article', '>')) else: data = self.cm.ph.getAllItemsBeetwenNodes(data, ('<article', '>', 'item'), ('</article', '>')) for item in data: # printDBG("Dudeplayer.listItems item %s" % item) if 'post-featured-' in item: continue url = self.getFullUrl(self.cm.ph.getSearchGroups(item, '''href=['"]([^"^']+?)['"]''')[0]) if url == '': continue icon = self.getFullIconUrl(self.cm.ph.getSearchGroups(item, '''src=['"]([^"^']+?)['"]''')[0]) title = unescapeHTML(self.cm.ph.getSearchGroups(item, '''alt=['"]([^"^']+?)['"]''')[0]).encode('UTF-8') desc = self.cleanHtmlStr(item) if '/tvshows/' in url: params = {'good_for_fav': True, 'category': 'list_seasons', 'url': url, 'title': title, 'desc': desc, 'icon': icon} self.addDir(params) else: params = {'good_for_fav': True, 'url': url, 'title': title, 'desc': desc, 'icon': icon} self.addVideo(params) if nextPage: params = dict(cItem) params.update({'title': _('Next page'), 'page': page + 1}) self.addDir(params)