def listSubtitlesProviders(self): printDBG("IPTVSubDownloaderWidget.listSubtitlesProviders") subProvidersList = [] napisy24pl = {'title': _("Napisy24.pl"), 'sub_provider': 'napisy24pl'} openSubtitles = { 'title': _("OpenSubtitles.org"), 'sub_provider': 'opensubtitlesorg' } napiprojektpl = { 'title': _("Napiprojekt.pl"), 'sub_provider': 'napiprojektpl' } titlovi = {'title': _("Titlovi.com"), 'sub_provider': 'titlovicom'} subscene = {'title': _("Subscene.com"), 'sub_provider': 'subscenecom'} youtube = {'title': _("Youtube.com"), 'sub_provider': 'youtubecom'} if 'youtube_id' in self.params['url_params'] and '' != self.params[ 'url_params']['youtube_id']: subProvidersList.append(youtube) if 'pl' == GetDefaultLang(): subProvidersList.append(napisy24pl) if IsSubtitlesParserExtensionCanBeUsed(): subProvidersList.append(napiprojektpl) subProvidersList.append(openSubtitles) subProvidersList.append(titlovi) subProvidersList.append(subscene) if 'pl' != GetDefaultLang(): subProvidersList.append(napisy24pl) if IsSubtitlesParserExtensionCanBeUsed(): subProvidersList.append(napiprojektpl) self.currList = [] for item in subProvidersList: params = CDisplayListItem(item['title'], item.get('desc', ''), CDisplayListItem.TYPE_SUB_PROVIDER) params.privateData = {'sub_provider': item['sub_provider']} self.currList.append(params) idx = 0 selIndex = 0 for idx in range(len(self.currList)): if self.hostName == self.currList[idx].privateData['sub_provider']: selIndex = idx break self["list"].setList([(x, ) for x in self.currList]) #restor previus selection if len(self.currList) > selIndex: self["list"].moveToIndex(selIndex) self.changeBottomPanel() self["headertext"].setText(self.getCategoryPath()) self["statustext"].setText("") self["list"].show()
def listMainMenu(self, cItem, nextCategory): printDBG("ArteTV.listMainMenu") lang = GetDefaultLang() url = self.getMainUrl() if lang in ['en','fr','de','es','pl']: url += lang sts, data = self.getPage(url) if not sts: return data = self.cm.ph.getAllItemsBeetwenNodes(data, ('<a', '>', 'next-language'), ('</a', '>')) for item in data: url = self.getFullUrl(self.cm.ph.getSearchGroups(item, '''\shref=['"]([^'^"]+?)['"]''')[0]) title = self.cleanHtmlStr(item) lang = url.split('/')[3] printDBG("+++> lang[%s] title[%s]" % (lang, title)) params = dict(cItem) params.update({'good_for_fav':False, 'category':nextCategory, 'title':title, 'url':url, 'f_lang':lang}) self.addDir(params) MAIN_CAT_TAB = [{'category':'search', 'title': _('Search'), 'search_item':True}, {'category':'search_history', 'title': _('Search history')},] self.listsTab(MAIN_CAT_TAB, cItem)
def _get_subtitles(self, video_id): sub_tracks = [] try: url = 'https://www.youtube.com/api/timedtext?hl=%s&type=list&v=%s' % (GetDefaultLang(), video_id) sts, data = self.cm.getPage(url) if not sts: return sub_tracks encoding = self.cm.ph.getDataBeetwenMarkers(data, 'encoding="', '"', False)[1] def getArg(item, name): val = self.cm.ph.getDataBeetwenMarkers(item, '%s="' % name, '"', False)[1] return val.decode(encoding).encode(encoding) data = data.split('/>') for item in data: if 'lang_code' not in item: continue id = getArg(item, 'id') name = getArg(item, 'name') lang_code = getArg(item, 'lang_code') lang_original = getArg(item, 'lang_original') lang_translated = getArg(item, 'lang_translated') title = (name + ' ' + lang_translated).strip() params = {'lang':lang_code, 'v':video_id, 'fmt':'vtt', 'name':name} url = 'https://www.youtube.com/api/timedtext?' + urllib.urlencode(params) sub_tracks.append({'title':title, 'url':url, 'lang':lang_code, 'ytid':id, 'format':'vtt'}) except Exception: printExc() printDBG(sub_tracks) return sub_tracks
def getMainUrl(self): lang = GetDefaultLang() if lang not in self.LANGUAGE_CACHE: lang = 'en' if lang == 'rs': return 'http://titlovi.com/' return 'http://%s.titlovi.com/' % lang
def getLocale(self): locale = config.plugins.iptvplayer.dailymotion_localization.value if 'auto' != locale: return locale all = [('ar_AA', 'العربية'), ('es_AR', 'Argentina'), ('en_AU', 'Australia'), ('de_AT', 'Österreich'), ('nl_BE', 'België'), ('fr_BE', 'Belgique'), ('pt_BR', 'Brasil'), ('en_CA', 'Canada'), ('fr_CA', 'Canada'), ('zh_CN', '中国'), ('fr_FR', 'France'), ('de_DE', 'Deutschland'), ('el_GR', 'Ελλάδα'), ('en_IN', 'India'), ('id_ID', 'Indonesia'), ('en_EN', 'International'), ('en_IE', 'Ireland'), ('it_IT', 'Italia'), ('ja_JP', '日本'), ('ms_MY', 'Malaysia'), ('es_MX', 'México'), ('fr_MA', 'Maroc'), ('nl_NL', 'Nederland'), ('en_PK', 'Pakistan'), ('en_PH', 'Pilipinas'), ('pl_PL', 'Polska'), ('pt_PT', 'Portugal'), ('ro_RO', 'România'), ('ru_RU', 'Россия'), ('en_SG', 'Singapore'), ('ko_KR', '대한민국'), ('es_ES', 'España'), ('fr_CH', 'Suisse'), ('it_CH', 'Svizzera'), ('de_CH', 'Schweiz'), ('fr_TN', 'Tunisie'), ('tr_TR', 'Türkiye'), ('en_GB', 'United Kingdom'), ('en_US', 'United States'), ('vi_VN', 'Việt Nam')] tmp = GetDefaultLang(True) printDBG('GetDefaultLang [%s]' % tmp) for item in all: if item[0] == tmp: locale = tmp break if 'auto' == locale: locale = 'en_EN' return locale
def _getLanguages(self): defLang = GetDefaultLang() def _isDefaultLanguage(langName): tab = GetLanguageTab() for item in tab: if item[1] != defLang: continue if item[0] in langName: return True url = self.getFullUrl('/filter/edit') sts, data = self.cm.getPage(url, self.defaultParams) if not sts: return [] list = [] defaultLanguages = [] data = self.cm.ph.getDataBeetwenMarkers(data, '<label class="h5">', '<button type="submit">', False)[1] data = self.cm.ph.getAllItemsBeetwenMarkers(data, '<label>', '</label>') for item in data: langId = self.cm.ph.getSearchGroups(item, 'value="([0-9]+?)"')[0] if '' == langId: continue title = self.cleanHtmlStr(item) params = {'title': title, 'lang_id': langId} if _isDefaultLanguage(title): defaultLanguages.append(params) else: list.append(params) defaultLanguages.extend(list) return defaultLanguages
def listTalksLanguages(self, cItem, nextCategory): printDBG("TED.listTalksLanguages") if 0 == len(self.cacheTalksLanguages): httpParams = dict(self.defaultAjaxParams) httpParams['header']['Referer'] = cItem['url'] sts, data = self.getPage(cItem['f_url'], httpParams) if not sts: return try: userLang = GetDefaultLang() promotItem = None data = json_loads(data) for item in data: params = { 'title': item['label'], 'f_language': item['value'] } if item['value'] == userLang: promotItem = params else: self.cacheTalksLanguages.append(params) if promotItem != None: self.cacheTalksLanguages.insert(0, promotItem) except Exception: printExc() params = dict(cItem) params.update({ 'category': nextCategory, 'f_idx': cItem.get('f_idx', 0) + 1 }) self.listsTab(self.cacheTalksLanguages, params)
def getLanguages(self, cItem, nextCategory): printDBG("OpenSubOrgProvider.getEpisodes") lang = GetDefaultLang() tmpList = [] defaultLanguageItem = None engLanguageItem = None for item in self.languages: params = {'title':'{0} [{1}]'.format(_(item['name']), item['id']), 'search_lang':item['id']} if lang == item['iso']: defaultLanguageItem = params elif 'en' == item['iso']: engLanguageItem = params else: tmpList.append(params) if None != engLanguageItem: tmpList.insert(0, engLanguageItem) if None != defaultLanguageItem: tmpList.insert(0, defaultLanguageItem) #tmpList.insert(0, {'title':_('All'), 'search_lang':''}) for item in tmpList: params = dict(cItem) params.update(item) params.update({'category':nextCategory}) self.addDir(params)
def _getLanguages(self): lang = GetDefaultLang() subParams = [{'name': 'sublanguageid', 'value': lang}] params = [self.loginToken, self._getArraryParam(subParams)] sts, data = self._rpcMethodCall("GetSubLanguages", params) printDBG(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> data[%s]" % data) if sts: try: list = [] defaultLanguageItem = None for item in data: if 'LanguageName' in item and 'SubLanguageID' in item and 'ISO639' in item: params = { 'title': '{0} [{1}]'.format(item['LanguageName'], item['SubLanguageID']), 'lang': item['SubLanguageID'] } if lang != item['ISO639']: list.append(params) else: defaultLanguageItem = params if None != defaultLanguageItem: list.insert(0, defaultLanguageItem) return list except Exception: printExc() SetIPTVPlayerLastHostError(_('Get languages failed!')) return []
def getMainUrl(self): lang = GetDefaultLang() if lang in self.LANGUAGE_CACHE: self.pageLang = lang if self.pageLang == 'hr': return 'https://titlovi.com/' return 'https://%s.titlovi.com/' % self.pageLang
def getMainUrl(self): lang = config.plugins.iptvplayer.ddlme_lang.value if lang == '': lang = GetDefaultLang() if lang not in ['en', 'de']: lang = 'en' return 'http://%s.ddl.me/' % lang
def converFileToUtf8(self, inFile, outFile, lang=''): printDBG('CBaseSubProviderClass.converFileToUtf8 inFile[%s] outFile[%s]' % (inFile, outFile)) # detect encoding encoding = '' cmd = '%s "%s"' % (GetUchardetPath(), inFile) ret = self.iptv_execute(cmd) if ret['sts'] and 0 == ret['code']: encoding = MapUcharEncoding(ret['data']) if 0 != ret['code'] or 'unknown' in encoding: encoding = '' else: encoding = encoding.strip() if lang == '': lang = GetDefaultLang() if lang == 'pl' and encoding == 'iso-8859-2': encoding = GetPolishSubEncoding(tmpFile) elif '' == encoding: encoding = 'utf-8' # convert file to UTF-8 try: with open(inFile) as f: data = f.read() try: data = data.decode(encoding).encode('UTF-8') if self.writeFile(outFile, data): return True except Exception: printExc() SetIPTVPlayerLastHostError(_('Failed to convert the file "%s" to UTF-8.') % inFile) except Exception: printExc() SetIPTVPlayerLastHostError(_('Failed to open the file "%s".') % inFile) return False
def doSearchMovie(self, callback, title): self.outerCallback = callback self.tmpData = {'title':title, 'list':[]} if GetDefaultLang() == 'pl': self._doSearchMovieNapisy24() else: self._RealDoSearchMovie()
def __init__(self): CBaseHostClass.__init__(self, {'history':'Twitch', 'cookie':'Twitch.cookie'}) self.HTTP_HEADER = self.cm.getDefaultHeader(browser='chrome') self.defaultParams = {'header':self.HTTP_HEADER}#, 'use_cookie': True, 'load_cookie': True, 'save_cookie': True, 'cookiefile': self.COOKIE_FILE} self.DEFAULT_ICON_URL = 'http://s.jtvnw.net/jtv_user_pictures/hosted_images/GlitchIcon_WhiteonPurple.png' self.MAIN_URL = 'https://www.twitch.tv/' self.API1_URL = 'https://api.twitch.tv/' self.API2_URL = 'https://gql.twitch.tv/' self.CHANNEL_TOKEN_URL = self.getFullUrl('/api/channels/%s/access_token') self.LIVE_URL = 'http://usher.justin.tv/api/channel/hls/%s.m3u8?token=%s&sig=%s&allow_source=true' self.CHANNEL_TOKEN_URL = self.API1_URL + 'api/channels/%s/access_token?need_https=false&oauth_token&platform=web&player_backend=mediaplayer&player_type=site' self.VOD_TOKEN_URL = self.API1_URL + 'api/vods/%s/access_token?need_https=true&oauth_token&platform=web&player_backend=mediaplayer&player_type=site' self.VOD_URL = 'https://usher.ttvnw.net/vod/%s.m3u8?token=%s&sig=%s&allow_source=true' self.platformFilters = [{'title':_('All Platforms'), 'platform_type':'all'}, {'title':_('Xbox One'), 'platform_type':'xbox'}, {'title':_('PlayStation 4'), 'platform_type':'ps4'}] self.languagesFilters = [{'lang':"ar",'title':"العربية"},{'lang':"bg",'title':"Български"},{'lang':"cs",'title':"Čeština"},{'lang':"da",'title':"Dansk"},{'lang':"de",'title':"Deutsch"},{'lang':"el",'title':"Ελληνικά"},{'lang':"en",'title':"English"},{'lang':"es",'title':"Español"},{'lang':"fi",'title':"Suomi"},{'lang':"fr",'title':"Français"},{'lang':"hu",'title':"Magyar"},{'lang':"it",'title':"Italiano"},{'lang':"ja",'title':"日本語"},{'lang':"ko",'title':"한국어"},{'lang':"nl",'title':"Nederlands"},{'lang':"no",'title':"Norsk"},{'lang':"pl",'title':"Polski"},{'lang':"pt",'title':"Português"},{'lang':"ro",'title':"Română"},{'lang':"ru",'title':"Русский"},{'lang':"sk",'title':"Slovenčina"},{'lang':"sv",'title':"Svenska"},{'lang':"th",'title':"ภาษาไทย"},{'lang':"tr",'title':"Türkçe"},{'lang':"vi",'title':"TiếngViệt"},{'lang':"zh-hk",'title':"中文(粵語)"},{'lang':"zh",'title':"中文"},{'lang':'asl', 'title':'American Sign Language'},{'lang':'other', 'title':'Other'}] lang = GetDefaultLang() default = None defaultEn = None self.langItems = [] for item in self.languagesFilters: if lang == item['lang']: default = item continue if 'en' == item['lang']: defaultEn = item continue self.langItems.append(item) if defaultEn: self.langItems.insert(0, defaultEn) if default: self.langItems.insert(0, default) self.langItems.insert(0, {'title':_('All')}) self.VIDEOS_TYPES_TAB = [{'title':_('All')}, {'title':_('Past premieres'), 'videos_type':'PAST_PREMIERE'}, {'title':_('Archive'), 'videos_type':'ARCHIVE' }, {'title':_('Highlights'), 'videos_type':'HIGHLIGHT' }, {'title':_('Uploads'), 'videos_type':'UPLOAD' },] self.VIDEOS_SORT_TAB = [{'title':_('Popular'), 'sort':'VIEWS' }, {'title':_('Recent'), 'sort':'TIME' },] self.CLIPS_FILTERS_TAB = [{'title':_('Trending'), 'clips_filter':'TRENDING' }, {'title':_('Last day'), 'clips_filter':'LAST_DAY' }, {'title':_('Last week'), 'clips_filter':'LAST_WEEK' }, {'title':_('Last month'), 'clips_filter':'LAST_MONTH' }, {'title':_('All time'), 'clips_filter':'ALL_TIME' },] self.GAME_CAT_TAB = [{'category':'game_lang', 'next_category':'game_channels', 'title': _('Channels')}, {'category':'game_lang', 'next_category':'game_videos_types', 'title': _('Videos') }, {'category':'game_lang', 'next_category':'game_clips_filters', 'title': _('Clips') }, ]
def getArticleContent(self, cItem): printDBG("CineTO.getArticleContent [%s]" % cItem) retTab = [] otherInfo = {} url = self.getFullUrl('/request/entry') post_data = 'ID=%s' % cItem['imdb'] sts, data = self.getPage(url, post_data=post_data) if not sts: return [] title = '' desc = '' icon = '' try: data = json_loads(data, noneReplacement='', baseTypesAsString=True)['entry'] icon = self.getFullIconUrl(data.get('cover', cItem.get('icon', ''))) title = self.cleanHtmlStr(data['title']) lang = cItem.get('f_lang', '') if lang == '': # move better language at top langKeys = list(data['lang'].keys()) defLang = GetDefaultLang() if defLang not in langKeys: defLang = 'en' if defLang in langKeys: lang = defLang else: lang = langKeys[0] desc = self.cleanHtmlStr(data.get('plot_'+lang, '')) tmp = data.get('year', '') if tmp != '': otherInfo['year'] = tmp tmp = data.get('date', '') if tmp != '': otherInfo['released'] = tmp tmp = data.get('duration', '') if tmp != '': otherInfo['duration'] = tmp + ' min.' for item in [('genres', 'genres'), ('producer', 'producers'), ('director', 'directors'), ('actor', 'actors')]: tmp = ', '.join(data.get(item[0], [])) if tmp != '': otherInfo[item[1]] = tmp tmp = data['rating'] if tmp != '': otherInfo['imdb_rating'] = '%s/10' % (data['rating']) except Exception: printExc() if title == '': title = cItem['title'] if desc == '': desc = cItem.get('desc', '') if icon == '': icon = cItem.get('icon', self.DEFAULT_ICON_URL) return [{'title':self.cleanHtmlStr( title ), 'text': self.cleanHtmlStr( desc ), 'images':[{'title':'', 'url':self.getFullUrl(icon)}], 'other_info':otherInfo}]
def getSearchTypes(self): searchTypesOptions = [] searchTypesOptions.append(('English ( EN )', "en")) searchTypesOptions.append(('Français ( FR )', "fr")) searchTypesOptions.append(('Deutsch ( DE )', "de")) searchTypesOptions.append(('Español ( ES )', "es")) searchTypesOptions.append(('Polski ( PL )', "pl")) lang = GetDefaultLang() searchTypesOptions.sort(key=lambda x: -2 if x[1] == lang else 0) return searchTypesOptions
def onWindowShow(self): self.onShown.remove(self.onWindowShow) self.setTitle(_('Virtual Keyboard')) self["header"].setText(self.header) # Left list self['left_list'].setSelectionState(False) self['left_header'].hide() self['left_list'].hide() self.showSearchHistory() # Right list if self.autocomplete: self['right_header'].setText(self.autocomplete.getProviderName()) self['right_list'].setSelectionState(False) self['right_header'].hide() self['right_list'].hide() vkLayoutId = self.vkRequestedId if self.vkRequestedId else self.selectedVKLayoutId if vkLayoutId == '': e2Locale = GetDefaultLang(True) langMap = {'pl_PL': '00000415', 'en_EN': '00020409'} vkLayoutId = langMap.get(e2Locale, '') if vkLayoutId == '': for item in self.ALL_VK_LAYOUTS: if e2Locale == item[1]: vkLayoutId = item[2] break if vkLayoutId == '': e2lang = GetDefaultLang() + '_' for item in self.ALL_VK_LAYOUTS: if item[1].startswith(e2lang): vkLayoutId = item[2] break if not self.getKeyboardLayoutItem(vkLayoutId): vkLayoutId = self.DEFAULT_VK_LAYOUT['id'] self.loadKeyboardLayout(vkLayoutId) self.isAutocompleteEnabled = self.autocomplete != None self.setText(self.startText)
def tryTologin(self): printDBG('tryTologin start') connFailed = _('Connection to server failed!') sts, data = self.getPage(self.getMainUrl()) if not sts: return False, connFailed if 'logout.php' in data: return True, 'OK' login = config.plugins.iptvplayer.mrpiracy_login.value passwd = config.plugins.iptvplayer.mrpiracy_password.value post_data = { 'email': login, 'password': passwd, 'lembrar_senha': 'lembrar' } sitekey = self.cm.ph.getSearchGroups(data, 'fallback\?k=([^"]+?)"')[0] if sitekey != '': recaptcha = UnCaptchaReCaptcha_fallback(lang=GetDefaultLang()) recaptcha.HTTP_HEADER['Referer'] = self.getMainUrl() recaptcha.HTTP_HEADER['User-Agent'] = self.USER_AGENT token = recaptcha.processCaptcha(sitekey) if token == '': return False, 'NOT OK' post_data.update({ 'g-recaptcha-response': token, 'g-recaptcha-response2': token, 'url': '/' }) data = self.cm.ph.getDataBeetwenMarkers(data, '<form', '</form>', False)[1] url = self.getFullUrl( self.cm.ph.getSearchGroups(data, '''action=['"]([^'^"]+?)['"]''')[0]) params = dict(self.defaultParams) params['header'] = dict(self.HEADER) params['header']['Referer'] = self.getMainUrl() # login sts, data = self.cm.getPage(url, params, post_data) if not sts: return False, connFailed if 'logout.php' in data: return True, 'OK' else: return False, 'NOT OK'
def listChannelCategories(self, cItem, category): printDBG("Twitch.listChannelCategories") params = dict(cItem) params.update({ 'category': category, 'title': _('Random'), 'url': self.MAIN_URL + 'kraken/beta/streams/random?offset=0&on_site=1&limit=' + self.NUM_OF_ITEMS }) self.addDir(params) baseChannelUrl = self.MAIN_URL + 'kraken/streams?offset=0&broadcaster_language=%s&sce_platform=%s&on_site=1&limit=' + self.NUM_OF_ITEMS tmpTab = [(_('Top'), '', '')] userLang = GetDefaultLang() promoteItem = None # list language sts, data = self.cm.getPage('https://www.twitch.tv/directory/all') if sts: data = self.cm.ph.getDataBeetwenMarkers( data, 'header_language_dropmenu', '</div>', False)[1] data = self.cm.ph.getAllItemsBeetwenMarkers(data, '<li', '</li>', withMarkers=True, caseSensitive=False) for item in data: title = self.cleanHtmlStr(item) lang = self.cm.ph.getDataBeetwenMarkers( item, 'setByAsyncPut(', ')', False)[1].replace('"', '').replace("'", '') if lang != '': if lang != userLang: tmpTab.append((title, lang, '')) else: promoteItem = (title, lang, '') if promoteItem != None: tmpTab.insert(1, promoteItem) for item in tmpTab: params = dict(cItem) params.update({ 'category': category, 'title': item[0], 'url': baseChannelUrl % (item[1], item[2]) }) self.addDir(params)
def getLocale(self): locale = config.plugins.iptvplayer.dailymotion_localization.value if 'auto' != locale: return locale all = [('ar_AA','اÙعربÙØ©'), ('es_AR', 'Argentina'), ('en_AU', 'Australia'), ('de_AT', 'Ãsterreich'), ('nl_BE', 'België'), ('fr_BE', 'Belgique'), ('pt_BR', 'Brasil'), ('en_CA', 'Canada'), ('fr_CA', 'Canada'), ('zh_CN', 'ä¸å½'), ('fr_FR', 'France'), ('de_DE', 'Deutschland'), ('el_GR', 'Îλλάδα'), ('en_IN', 'India'), ('id_ID', 'Indonesia'), ('en_EN', 'International'), ('en_IE', 'Ireland'), ('it_IT', 'Italia'), ('ja_JP', 'æ¥æ¬'), ('ms_MY', 'Malaysia'), ('es_MX', 'México'), ('fr_MA', 'Maroc'), ('nl_NL', 'Nederland'), ('en_PK', 'Pakistan'), ('en_PH', 'Pilipinas'), ('pl_PL', 'Polska'), ('pt_PT', 'Portugal'), ('ro_RO', 'România'), ('ru_RU', 'РоÑÑиÑ'), ('en_SG', 'Singapore'), ('ko_KR', 'ëí민êµ'), ('es_ES', 'España'), ('fr_CH', 'Suisse'), ('it_CH', 'Svizzera'), ('de_CH', 'Schweiz'), ('fr_TN', 'Tunisie'), ('tr_TR', 'Türkiye'), ('en_GB', 'United Kingdom'), ('en_US', 'United States'), ('vi_VN', 'Viá»t Nam')] tmp = GetDefaultLang(True) printDBG('GetDefaultLang [%s]' % tmp) for item in all: if item[0] == tmp: locale = tmp break if 'auto' == locale: locale = 'en_EN' return locale
def getLocale(self): locale = config.plugins.iptvplayer.dailymotion_localization.value if 'auto' != locale: return locale all = [("ar_AA", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9"), ("es_AR", "Argentina"), ("en_AU", "Australia"), ("de_AT", "\xc3\x96sterreich"), ("nl_BE", "Belgi\xc3\xab"), ("fr_BE", "Belgique"), ("pt_BR", "Brasil"), ("en_CA", "Canada"), ("fr_CA", "Canada"), ("zh_CN", "\xe4\xb8\xad\xe5\x9b\xbd"), ("fr_FR", "France"), ("de_DE", "Deutschland"), ("el_GR", "\xce\x95\xce\xbb\xce\xbb\xce\xac\xce\xb4\xce\xb1"), ("en_IN", "India"), ("id_ID", "Indonesia"), ("en_EN", "International"), ("en_IE", "Ireland"), ("it_IT", "Italia"), ("ja_JP", "\xe6\x97\xa5\xe6\x9c\xac"), ("ms_MY", "Malaysia"), ("es_MX", "M\xc3\xa9xico"), ("fr_MA", "Maroc"), ("nl_NL", "Nederland"), ("en_PK", "Pakistan"), ("en_PH", "Pilipinas"), ("pl_PL", "Polska"), ("pt_PT", "Portugal"), ("ro_RO", "Rom\xc3\xa2nia"), ("ru_RU", "\xd0\xa0\xd0\xbe\xd1\x81\xd1\x81\xd0\xb8\xd1\x8f"), ("en_SG", "Singapore"), ("ko_KR", "\xeb\x8c\x80\xed\x95\x9c\xeb\xaf\xbc\xea\xb5\xad"), ("es_ES", "Espa\xc3\xb1a"), ("fr_CH", "Suisse"), ("it_CH", "Svizzera"), ("de_CH", "Schweiz"), ("fr_TN", "Tunisie"), ("tr_TR", "T\xc3\xbcrkiye"), ("en_GB", "United Kingdom"), ("en_US", "United States"), ("vi_VN", "Vi\xe1\xbb\x87t Nam")] tmp = GetDefaultLang(True) printDBG("GetDefaultLang [%s]" % tmp) for item in all: if item[0] == tmp: locale = tmp break if 'auto' == locale: locale = 'en_EN' return locale
def __init__(self, session, params={}): # params: movie_title, sub_list: [{'title':'', 'lang':'', 'url':''}] self.session = session Screen.__init__(self, session) self.params = params self.onShown.append(self.onStart) self.onClose.append(self.__onClose) 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_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, "green": self.keyGreen, }, -2) self.iconPixmap = {} for icon in ['red', 'green']: self.iconPixmap[icon] = LoadPixmap(GetIconDir(icon + '.png')) self.movieTitle = '' self.stackList = [] self.stackItems = [] self.defaultLanguage = GetDefaultLang() self.listMode = False self.downloadedSubFilePath = "" self.currItem = {} self.downloader = None self.cleanDownloader() self.workconsole = None
def __init__(self): CBaseHostClass.__init__(self, { 'history': 'cine.to', 'cookie': 'cine.to.cookie' }) self.DEFAULT_ICON_URL = 'https://cine.to/opengraph.jpg' self.USER_AGENT = 'Mozilla / 5.0 (SMART-TV; Linux; Tizen 2.4.0) AppleWebkit / 538.1 (KHTML, podobnie jak Gecko) SamsungBrowser / 1.1 TV Safari / 538.1' self.MAIN_URL = 'https://cine.to/' self.HEADER = { 'User-Agent': self.USER_AGENT, 'DNT': '1', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Referer': self.getMainUrl(), 'Accept-Language': GetDefaultLang() } self.AJAX_HEADER = dict(self.HEADER) self.AJAX_HEADER.update({ 'X-Requested-With': 'XMLHttpRequest', 'Accept-Encoding': 'gzip, deflate', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01' }) self.cacheFilters = {} self.cacheLinks = {} self.defaultParams = { 'with_metadata': True, 'header': self.HEADER, 'raw_post_data': True, 'use_cookie': True, 'load_cookie': True, 'save_cookie': True, 'cookiefile': self.COOKIE_FILE } self.MAIN_CAT_TAB = [{ 'category': 'search', 'title': _('Search'), 'search_item': True, }, { 'category': 'search_history', 'title': _('Search history'), }]
def _doLogin(self, login, password): lang = GetDefaultLang() params = [login, hex_md5(password), lang, self.USER_AGENT] sts, data = self._rpcMethodCall("LogIn", params) if sts and (None == data or 0 == len(data)): sts = False printDBG(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> data[%s]" % data) if not sts: SetIPTVPlayerLastHostError(_('Login failed!')) elif ('' != login and self._checkStatus(data, 0)) or '' == login: if 'token' in data[0]: self.loginToken = data[0]['token'] else: SetIPTVPlayerLastHostError(_('Get token failed!') + '\n' + _('Error message: \"%s\".\nError code: \"%s\".') % (self.lastApiError['code'], self.lastApiError['message']) ) else: SetIPTVPlayerLastHostError(_('Login failed!') + '\n' + _('Error message: \"%s\".\nError code: \"%s\".') % (self.lastApiError['code'], self.lastApiError['message']) )
def fillCacheFilters(self): printDBG("PodnapisiNetProvider.fillFiltersCache") self.cacheFilters = {} baseUrl = '/subtitles/search/advanced' sts, data = self.getPage(self.getFullUrl(baseUrl)) if not sts: return data = self.cm.ph.getDataBeetwenNodes(data, ('<div', '>', 'advanced_search_panel'), ('</form', '>'))[1] for filter in [{'key':'movie_type', 'marker':'movie_type'}, {'key':'episode_type', 'marker':'episode_type' }, {'key':'flags', 'marker':'flags'}, {'key':'fps', 'marker':'fps'}, {'key':'language', 'marker':'language'}]: self.cacheFilters[filter['key']] = [] tmp = self.cm.ph.getDataBeetwenMarkers(data, filter['marker'], '</select>', False)[1] tmp = self.cm.ph.getAllItemsBeetwenMarkers(tmp, '<option', '</option>', withMarkers=True, caseSensitive=False) allItemAdded = False for item in tmp: value = self.cm.ph.getSearchGroups(item, '''value=["']?([^"^'^\s^>]+?)[\s"'>]''')[0].strip() self.cacheFilters[filter['key']].append({filter['key']:value, 'title':self.cleanHtmlStr(item)}) if value == '': allItemAdded = True if not allItemAdded: self.cacheFilters[filter['key']].insert(0, {filter['key']:'', 'title':_('Any')}) # prepare default values for filters season = self.dInfo.get('season', None) episode = self.dInfo.get('episode', None) if season != None and episode != None: defaultType = 'tv-series' elif episode != None: defaultType = 'mini-series' else: defaultType = '' printDBG("season [%s] episode[%s]" % (episode, season)) defaultLanguage = GetDefaultLang() # move default values to the begining of the list for defItem in [{'key':'language', 'val':defaultLanguage}, {'key':'movie_type', 'val':defaultType}]: newList = [] promotedItem = None for item in self.cacheFilters[defItem['key']]: if None == promotedItem and defItem['val'] == item[defItem['key']]: promotedItem = item else: newList.append(item) if None != promotedItem: newList.insert(0, promotedItem) self.cacheFilters[defItem['key']] = newList
def processCaptcha(self, sitekey, refUrl, bypassCaptchaService=None, userAgent=None, baseErrMsgTab=None, beQuaiet=False): if isinstance(baseErrMsgTab, list): errorMsgTab = list(baseErrMsgTab) else: errorMsgTab = [_('Link protected with Google ReCaptcha v2')] if userAgent == None: try: userAgent = self.USER_AGENT except Exception: pass if userAgent == None: try: userAgent = self.defaultParams['header']['User-Agent'] except Exception: pass recaptcha = UnCaptchaReCaptcha_fallback(lang=GetDefaultLang()) recaptcha.HTTP_HEADER['Referer'] = refUrl if userAgent != None: recaptcha.HTTP_HEADER['User-Agent'] = userAgent token = recaptcha.processCaptcha(sitekey) if token == '': recaptcha = None if config.plugins.iptvplayer.captcha_bypass.value != '' and bypassCaptchaService == None: bypassCaptchaService = config.plugins.iptvplayer.captcha_bypass.value if bypassCaptchaService == '9kw.eu': recaptcha = UnCaptchaReCaptcha_9kw() elif bypassCaptchaService == '2captcha.com': recaptcha = UnCaptchaReCaptcha_2captcha() elif config.plugins.iptvplayer.myjd_login.value != '' and config.plugins.iptvplayer.myjd_password.value != '': recaptcha = UnCaptchaReCaptcha_myjd() if recaptcha != None: token = recaptcha.processCaptcha(sitekey, refUrl) else: errorMsgTab.append(_('Please visit %s to learn how to redirect this task to the external device.') % 'http://zadmario.gitlab.io/captcha.html') if not beQuaiet: self.sessionEx.waitForFinishOpen(MessageBox, '\n'.join(errorMsgTab), type=MessageBox.TYPE_ERROR, timeout=20) if bypassCaptchaService != None: errorMsgTab.append(_(' or ')) errorMsgTab.append(_('You can use \"%s\" or \"%s\" services for automatic solution.') % ("http://2captcha.com/", "https://9kw.eu/", ) + ' ' + _('Go to the host configuration available under blue button.')) return token, errorMsgTab
def _getLangCode(self): langCode = 'E' if config.plugins.iptvplayer.tvjworg_language.value == 'default': if self.defaultLangCode != '': return self.defaultLangCode else: sts, data = self.cm.getPage(self._getFullUrl('languages/E/web')) if sts: try: lang = GetDefaultLang() data = byteify(json.loads(data)) for item in data['languages']: if item['locale'] == lang: self.defaultLangCode = str(item['code']) langCode = self.defaultLangCode break except Exception: printExc() else: langCode = config.plugins.iptvplayer.tvjworg_language.value return langCode
def _doGetEncodingSubtitle24Callback(self, code, data): encoding = data if 0 != code or 'unknown' in encoding: encoding = '' else: encoding = encoding.strip() if GetDefaultLang() == 'pl' and encoding == 'iso-8859-2': encoding = GetPolishSubEncoding(self.tmpData['tmpFile']) elif '' == encoding: encoding = 'utf-8' fileName = '' sts = False try: f = open(self.tmpData['tmpFile']) data = f.read() f.close() subItem = self.tmpData['subItem'] try: data = data.decode(encoding).encode('UTF-8') title = self._getSubtitleNapisy24Title(subItem).replace('_', '.').replace('.srt', '').replace(' ', '.') match = re.search(r'[^.]', title) if match: title = title[match.start():] fileName = "{0}_{1}_0_{2}_{3}".format(title, 'pl', subItem['id'][2:], subItem['imdb']) fileName = self.tmpData['subDir'] + fileName + '.srt' try: with open(fileName, 'w') as f: f.write(data) sts = True except: self.lastApiError = {'code':-999, 'message':_('write error')} printExc() except: self.lastApiError = {'code':-999, 'message':_('decode error')} printExc() except: self.lastApiError = {'code':-999, 'message':_('read error')} printExc() self.outerCallback(sts, fileName)
def getSubtitles(self, cItem): printDBG("YoutubeComProvider.getSubtitles") if '' == self.youtubeId: SetIPTVPlayerLastHostError(_('The YouTube video ID is invalid.')) return from Plugins.Extensions.IPTVPlayer.libs.youtube_dl.extractor.youtube import YoutubeIE ytExtractor = YoutubeIE() # get normal langs tab = ytExtractor._get_subtitles(self.youtubeId) tab2 = ytExtractor._get_automatic_captions(self.youtubeId) for item in tab2: item['title'] = '[%s] %s' % (_('Auto-translate'), item['title']) tab.append(item) defaultLang = GetDefaultLang() promotedItem = None for item in tab: params = dict(item) if None == promotedItem and defaultLang == params['lang']: promotedItem = params else: self.addSubtitle(params) if None != promotedItem: self.addSubtitle(promotedItem, False)
def __init__(self): CBaseHostClass.__init__(self, { 'history': 'Twitch', 'cookie': 'Twitch.cookie' }) self.HTTP_HEADER = self.cm.getDefaultHeader(browser='chrome') self.defaultParams = { 'header': self.HTTP_HEADER } #, 'use_cookie': True, 'load_cookie': True, 'save_cookie': True, 'cookiefile': self.COOKIE_FILE} self.DEFAULT_ICON_URL = 'http://s.jtvnw.net/jtv_user_pictures/hosted_images/GlitchIcon_WhiteonPurple.png' self.MAIN_URL = 'https://www.twitch.tv/' self.API1_URL = 'https://api.twitch.tv/' self.API2_URL = 'https://gql.twitch.tv/' self.CHANNEL_TOKEN_URL = self.getFullUrl( '/api/channels/%s/access_token') self.LIVE_URL = 'http://usher.justin.tv/api/channel/hls/%s.m3u8?token=%s&sig=%s&allow_source=true' self.CHANNEL_TOKEN_URL = self.API1_URL + 'api/channels/%s/access_token?need_https=false&oauth_token&platform=web&player_backend=mediaplayer&player_type=site' self.VOD_TOKEN_URL = self.API1_URL + 'api/vods/%s/access_token?need_https=true&oauth_token&platform=web&player_backend=mediaplayer&player_type=site' self.VOD_URL = 'https://usher.ttvnw.net/vod/%s.m3u8?token=%s&sig=%s&allow_source=true' self.platformFilters = [{ 'title': _('All Platforms'), 'platform_type': 'all' }, { 'title': _('Xbox One'), 'platform_type': 'xbox' }, { 'title': _('PlayStation 4'), 'platform_type': 'ps4' }] self.languagesFilters = [ # nice of them to change from meaningful identifers to guid # screwing things up with the language filtering. CM { 'lang': "73cc486a-e56b-41ed-a1df-7afedbc84f6f", 'title': "العربية" }, { 'lang': "21d85c73-701f-4259-8c4e-4321265847b5", 'title': "български" }, { 'lang': "a6cddaba-f0ce-4526-9087-6de2f603a24d", 'title': "Čeština" }, { 'lang': "43e598cc-918b-4247-b02c-b13543a1eac9", 'title': "Dansk" }, { 'lang': "9166ad14-41f1-4b04-a3b8-c8eb838c6be6", 'title': "Deutsch" }, { 'lang': "902f6815-a655-4918-99e7-48c74a71feac", 'title': "Ελληνικά" }, { 'lang': "6ea6bca4-4712-4ab9-a906-e3336a9d8039", 'title': "English" }, { 'lang': "d4bb9c58-2141-4881-bcdc-3fe0505457d1", 'title': "Español" }, { 'lang': "220eb274-ab25-425b-8a9b-826103404997", 'title': "Suomi" }, { 'lang': "6f655045-9989-4ef7-8f85-1edcec42d648", 'title': "Français" }, { 'lang': "a298cca5-d408-47c7-a1e7-0c76ca878bc6", 'title': "Magyar" }, { 'lang': "5b9935eb-1e9a-4217-98ad-62bda5cff0d1", 'title': "Italiano" }, { 'lang': "6ba1d230-e52f-4d81-b1e0-41f25a8a9f5d", 'title': "日本語" }, { 'lang': "ab2975e3-b9ca-4b1a-a93e-fb61a5d5c3a4", 'title': "한국어" }, { 'lang': "e13e6734-37ae-4d85-897b-3015f0168355", 'title': "Nederlands" }, { 'lang': "5647bf35-f99e-49aa-8578-0e07d936188c", 'title': "Norsk" }, { 'lang': "f9d04efa-6e25-49bf-bf0a-da3e2addaf1b", 'title': "Polski" }, { 'lang': "39ee8140-901a-4762-bfca-8260dea1310f", 'title': "Português" }, { 'lang': "75a99c80-0f15-4159-b1fd-3812c25b4aca", 'title': "Română" }, { 'lang': "0569b171-2a2b-476e-a596-5bdfb45a1327", 'title': "Русский" }, { 'lang': "9b773670-05f8-4c06-ac99-e6649f906171", 'title': "Slovenčina" }, { 'lang': "145b073b-cb70-4e91-b170-f5fab2ebba05", 'title': "Svenska" }, { 'lang': "f19c7524-c18d-41af-9f39-034c8d0b0fee", 'title': "ภาษาไทย" }, { 'lang': "f08d5873-f0c7-4912-94ba-a41933b4c141", 'title': "Türkçe" }, { 'lang': "ba3b69fe-899c-4518-ac46-707275e3eba1", 'title': "TiếngViệt" }, { 'lang': "0c8c6543-4019-47d0-9b8a-57a81ee6ace5", 'title': "中文(粵語)" }, { 'lang': "74c92063-a389-4fd2-8460-b1bb82b04ec7", 'title': "中文" }, { 'lang': '5ad4b978-495f-4093-9461-c194f58201ab', 'title': 'American Sign Language' }, { 'lang': 'fd76c790-0505-4c4c-865a-d6bd139c0901', 'title': 'Other' } ] lang = GetDefaultLang() default = None defaultEn = None self.langItems = [] for item in self.languagesFilters: if lang == item['lang']: default = item continue if 'en' == item['lang']: defaultEn = item continue self.langItems.append(item) if defaultEn: self.langItems.insert(0, defaultEn) if default: self.langItems.insert(0, default) self.langItems.insert(0, {'title': _('All')}) self.VIDEOS_TYPES_TAB = [ { 'title': _('All') }, { 'title': _('Past premieres'), 'videos_type': 'PAST_PREMIERE' }, { 'title': _('Archive'), 'videos_type': 'ARCHIVE' }, { 'title': _('Highlights'), 'videos_type': 'HIGHLIGHT' }, { 'title': _('Uploads'), 'videos_type': 'UPLOAD' }, ] self.VIDEOS_SORT_TAB = [ { 'title': _('Popular'), 'sort': 'VIEWS' }, { 'title': _('Recent'), 'sort': 'TIME' }, ] self.CLIPS_FILTERS_TAB = [ { 'title': _('Trending'), 'clips_filter': 'TRENDING' }, { 'title': _('Last day'), 'clips_filter': 'LAST_DAY' }, { 'title': _('Last week'), 'clips_filter': 'LAST_WEEK' }, { 'title': _('Last month'), 'clips_filter': 'LAST_MONTH' }, { 'title': _('All time'), 'clips_filter': 'ALL_TIME' }, ] self.GAME_CAT_TAB = [ { 'category': 'game_lang', 'next_category': 'game_channels', 'title': _('Channels') }, { 'category': 'game_lang', 'next_category': 'game_videos_types', 'title': _('Videos') }, { 'category': 'game_lang', 'next_category': 'game_clips_filters', 'title': _('Clips') }, ]