def resolve(regex): try: vanilla = re.compile('(<regex>.+)', re.MULTILINE|re.DOTALL).findall(regex)[0] cddata = re.compile('<\!\[CDATA\[(.+?)\]\]>', re.MULTILINE|re.DOTALL).findall(regex) for i in cddata: regex = regex.replace('<![CDATA['+i+']]>', urllib.quote_plus(i)) regexs = re.compile('(<regex>.+)', re.MULTILINE|re.DOTALL).findall(regex)[0] regexs = re.compile('<regex>(.+?)</regex>', re.MULTILINE|re.DOTALL).findall(regexs) regexs = [re.compile('<(.+?)>(.*?)</.+?>', re.MULTILINE|re.DOTALL).findall(i) for i in regexs] regexs = [dict([(client.replaceHTMLCodes(x[0]), client.replaceHTMLCodes(urllib.unquote_plus(x[1]))) for x in i]) for i in regexs] regexs = [(i['name'], i) for i in regexs] regexs = dict(regexs) url = regex.split('<regex>', 1)[0].strip() url = client.replaceHTMLCodes(url) url = url.encode('utf-8') r = getRegexParsed(regexs, url) try: ln = '' ret = r[1] listrepeat = r[2]['listrepeat'] regexname = r[2]['name'] for obj in ret: try: item = listrepeat for i in range(len(obj)+1): item = item.replace('[%s.param%s]' % (regexname, str(i)), obj[i-1]) item2 = vanilla for i in range(len(obj)+1): item2 = item2.replace('[%s.param%s]' % (regexname, str(i)), obj[i-1]) item2 = re.compile('(<regex>.+?</regex>)', re.MULTILINE|re.DOTALL).findall(item2) item2 = [x for x in item2 if not '<name>%s</name>' % regexname in x] item2 = ''.join(item2) ln += '\n<item>%s\n%s</item>\n' % (item, item2) except: pass return ln except: pass if r[1] == True: return r[0] except: return
def getTVrageId(imdb, tvdb, show, year): try: from modules.indexers import trakt if not imdb.startswith('tt'): imdb = 'tt' + imdb result = trakt.getTVShowSummary(imdb) result = json.loads(result) tvrage = result['ids']['tvrage'] if tvrage == None: raise Exception() return str(tvrage) except: pass try: query = urllib.quote_plus(show) query = 'http://services.tvrage.com/feeds/search.php?show=%s' % query result = client.request(query, timeout='5') result = client.parseDOM(result, "show") show = cleantitle.tv(show) years = [str(year), str(int(year) + 1), str(int(year) - 1)] result = [ i for i in result if show == cleantitle. tv(client.replaceHTMLCodes(client.parseDOM(i, "name")[0])) and any( x in client.parseDOM(i, "started")[0] for x in years) ][0] tvrage = client.parseDOM(result, "showid")[0] return str(tvrage) except: pass
def parse(url): try: url = client.replaceHTMLCodes(url) except: pass try: url = urlparse.parse_qs(urlparse.urlparse(url).query)['u'][0] except: pass try: url = urlparse.parse_qs(urlparse.urlparse(url).query)['q'][0] except: pass return url
def strip_domain(url): try: if url.lower().startswith('http') or url.startswith('/'): url = re.findall('(?://.+?|)(/.+)', url)[0] url = client.replaceHTMLCodes(url) url = url.encode('utf-8') return url except: return
def megasesso(self, url): try: u = client.request(url) u = client.parseDOM(u, 'div', attrs={'class': 'player-iframe'}) u = [(client.parseDOM(i, 'iframe', ret='src')) for i in u] u = [(client.replaceHTMLCodes(i[0]).encode('utf-8')) for i in u] u = 'http://www.megasesso.com' + u[0] return self.generic(u) except: return
def getTVShowTranslation(self, thetvdb, lang): try: url = 'http://thetvdb.com/api/%s/series/%s/%s.xml' % ('MUQ2MkYyRjkwMDMwQzQ0NA=='.decode('base64'), thetvdb, lang) r = client.request(url) title = client.parseDOM(r, 'SeriesName')[0] title = client.replaceHTMLCodes(title) title = title.encode('utf-8') return title except: pass
def addDir(name, url, mode, iconimage, isFolder=True, isPlayable=True): try: client.replaceHTMLCodes(name) except: pass name = name.replace('&', '&') u = sys.argv[0] + "?url=" + urllib.quote_plus(url) + "&mode=" + str( mode) + "&name=" + urllib.quote_plus( name) + "&iconimage=" + urllib.quote_plus(iconimage) ok = True liz = xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage) liz.setInfo(type="Video", infoLabels={"Title": name}) liz.setProperty('fanart_image', kodi.addonfanart) if isPlayable: liz.setProperty("IsPlayable", "true") ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz, isFolder=isFolder) return ok
def getTVrageId(imdb, tvdb, show, year): try: from modules.indexers import trakt if not imdb.startswith('tt'): imdb = 'tt' + imdb result = trakt.getTVShowSummary(imdb) result = json.loads(result) tvrage = result['ids']['tvrage'] if tvrage == None: raise Exception() return str(tvrage) except: pass try: query = urllib.quote_plus(show) query = 'http://services.tvrage.com/feeds/search.php?show=%s' % query result = client.request(query, timeout='5') result = client.parseDOM(result, "show") show = cleantitle.tv(show) years = [str(year), str(int(year)+1), str(int(year)-1)] result = [i for i in result if show == cleantitle.tv(client.replaceHTMLCodes(client.parseDOM(i, "name")[0])) and any(x in client.parseDOM(i, "started")[0] for x in years)][0] tvrage = client.parseDOM(result, "showid")[0] return str(tvrage) except: pass
def resolver(url, debrid): u = url u = u.replace('filefactory.com/stream/', 'filefactory.com/file/') try: if not debrid == 'realdebrid' and not debrid == True: raise Exception() if '' in credentials()['realdebrid'].values(): raise Exception() id, secret, token, refresh = credentials()['realdebrid'][ 'id'], credentials()['realdebrid']['secret'], credentials( )['realdebrid']['token'], credentials()['realdebrid']['refresh'] USER_AGENT = 'Kodi Death Streams RD/3.0' post = urllib.urlencode({'link': u}) headers = { 'Authorization': 'Bearer %s' % token, 'User-Agent': USER_AGENT } url = 'https://api.real-debrid.com/rest/1.0/unrestrict/link' result = client.request(url, post=post, headers=headers, error=True) result = json.loads(result) if 'error' in result and result['error'] == 'bad_token': result = client.request( 'https://api.real-debrid.com/oauth/v2/token', post=urllib.urlencode({ 'client_id': id, 'client_secret': secret, 'code': refresh, 'grant_type': 'http://oauth.net/grant_type/device/1.0' }), headers={'User-Agent': USER_AGENT}, error=True) result = json.loads(result) if 'error' in result: return headers['Authorization'] = 'Bearer %s' % result['access_token'] result = client.request(url, post=post, headers=headers) result = json.loads(result) url = result['download'] return url except: pass try: if not debrid == 'premiumize' and not debrid == True: raise Exception() if '' in credentials()['premiumize'].values(): raise Exception() user, password = credentials()['premiumize']['user'], credentials( )['premiumize']['pass'] url = 'http://api.premiumize.me/pm-api/v1.php?method=directdownloadlink¶ms[login]=%s¶ms[pass]=%s¶ms[link]=%s' % ( user, password, urllib.quote_plus(u)) result = client.request(url, close=False) url = json.loads(result)['result']['location'] return url except: pass try: if not debrid == 'alldebrid' and not debrid == True: raise Exception() if '' in credentials()['alldebrid'].values(): raise Exception() user, password = credentials()['alldebrid']['user'], credentials( )['alldebrid']['pass'] login_data = urllib.urlencode({ 'action': 'login', 'login_login': user, 'login_password': password }) login_link = 'http://alldebrid.com/register/?%s' % login_data cookie = client.request(login_link, output='cookie', close=False) url = 'http://www.alldebrid.com/service.php?link=%s' % urllib.quote_plus( u) result = client.request(url, cookie=cookie, close=False) url = client.parseDOM(result, 'a', ret='href', attrs={'class': 'link_dl'})[0] url = client.replaceHTMLCodes(url) url = '%s|Cookie=%s' % (url, urllib.quote_plus(cookie)) return url except: pass try: if not debrid == 'rpnet' and not debrid == True: raise Exception() if '' in credentials()['rpnet'].values(): raise Exception() user, password = credentials()['rpnet']['user'], credentials( )['rpnet']['pass'] login_data = urllib.urlencode({ 'username': user, 'password': password, 'action': 'generate', 'links': u }) login_link = 'http://premium.rpnet.biz/client_api.php?%s' % login_data result = client.request(login_link, close=False) result = json.loads(result) url = result['links'][0]['generated'] return url except: return
def buildDir(items, content='dirs', cm=[], search=False, stopend=False, isVideo=False, isDownloadable=False, cache=True, chaturbate=False): if items == None or len(items) == 0: xbmc.executebuiltin('Dialog.Close(busydialog)') sys.exit() sysaddon = sys.argv[0] syshandle = int(sys.argv[1]) if chaturbate: import sqlite3 databases = xbmc.translatePath( os.path.join(kodi.datafolder, 'databases')) chaturbatedb = xbmc.translatePath( os.path.join(databases, 'chaturbate.db')) conn = sqlite3.connect(chaturbatedb) conn.text_factory = str c = conn.cursor() c.execute("SELECT * FROM chaturbate ORDER BY name ASC") chat_urls = [] for (chat_name, chat_url, chat_icon) in c.fetchall(): chat_urls.append(chat_url) for i in items: try: name = i['name'] if 'file_path' not in name: try: name = client.replaceHTMLCodes(name) name = kodi.sortX(name) except: pass else: name = name.replace('file_path', '') item = xbmcgui.ListItem(label=name) try: if i['description']: description = i['description'] except: description = name try: description = client.replaceHTMLCodes(description) description = kodi.sortX(description) except: pass kodi.giveColor(description, 'white', True) item.setInfo('video', {'title': name, 'plot': description}) try: name = urllib.quote_plus(name) except: name = name.replace(' ', '+') try: if i['url']: url = i['url'] else: url = 'none' except: url = 'none' if i['icon'] == None: thumb = kodi.addonicon else: thumb = i['icon'] if i['fanart'] == None: fanart = kodi.addonicon else: fanart = i['fanart'] if (not thumb == 'local') and (not fanart == 'local'): item.setArt({'icon': thumb, 'thumb': thumb, 'fanart': fanart}) else: item.setArt({'icon': url, 'thumb': url, 'fanart': fanart}) try: if i['folder']: _folder = True else: _folder = False except: _folder = True try: if i['isDownloaded']: isDownloaded = True else: isDownloaded = False except: isDownloaded = False if not isDownloadable: try: if i['isDownloadable']: isDownloadable = True else: isDownloadable = False except: isDownloadable = False if 'typeid=history' in url: url = url.replace('typeid=history', '') history = '%s?url=%s&mode=%s' \ % (sysaddon,urllib.quote_plus(url),str('24')) htext = "Remove from History" cm.append(('%s' % htext, 'xbmc.RunPlugin(' + history + ')')) if 'search_term=' in url: search_term = '%s?url=%s&mode=%s' \ % (sysaddon,urllib.quote_plus(url),str('25')) stext = "Remove Search Term" cm.append( ('%s' % stext, 'xbmc.RunPlugin(' + search_term + ')')) url = url.replace('search_term=', '') u= '%s?url=%s&mode=%s&name=%s&iconimage=%s&fanart=%s' \ % (sysaddon,urllib.quote_plus(url),str(i['mode']),name,urllib.quote_plus(thumb),urllib.quote_plus(fanart)) if chaturbate: if '|CHAT|' in url: check_url = url.split('|CHAT|')[0] else: check_url = url.split('|SPLIT|')[0] log_utils.log('URL IS %s' % (check_url), log_utils.LOGERROR) if check_url in str(chat_urls): chat = 'del' else: chat = 'add' chat_compiled = '%s?url=%s&mode=%s&name=%s&iconimage=%s&chat=%s&chatmode=%s&folder=%s' \ % (sysaddon,urllib.quote_plus(check_url),str('101'),name,urllib.quote_plus(thumb),chat,str(i['mode']),str(_folder)) if chat == 'add': ctext = "Add to" elif chat == 'del': ctext = "Remove from" cm.append(('%s Chaturbate Monitoring' % ctext, 'xbmc.RunPlugin(' + chat_compiled + ')')) try: if i['fav']: fav = i['fav'] else: fav = 'add' except: fav = 'add' try: if i['cm']: for cmitems in i['cm']: log_utils.log('%s' % (cmitems[1]), log_utils.LOGNOTICE) cm.append(('%s' % cmitems[0], 'xbmc.RunPlugin(' + cmitems[1] + ')')) except: pass favorite = '%s?url=%s&mode=%s&name=%s&iconimage=%s&fav=%s&favmode=%s&folder=%s' \ % (sysaddon,urllib.quote_plus(url),str('100'),name,urllib.quote_plus(thumb),fav,str(i['mode']),str(_folder)) if fav == 'add': ftext = "Add to" elif fav == 'del': ftext = "Remove from" cm.append(('%s %s Favorites' % (ftext, kodi.get_name()), 'xbmc.RunPlugin(' + favorite + ')')) if isDownloadable: dwnld = '%s?url=%s&mode=%s&name=%s&iconimage=%s' \ % (sysaddon,urllib.quote_plus(url),str('26'),name,urllib.quote_plus(thumb)) cm.append(('Download Video', 'xbmc.RunPlugin(' + dwnld + ')')) if isDownloaded: rmdwnld = '%s?url=%s&mode=%s&name=%s' \ % (sysaddon,urllib.quote_plus(url),str('28'),name) cm.append(('Delete Video', 'xbmc.RunPlugin(' + rmdwnld + ')')) open_set = '%s?mode=%s' \ % (sysaddon,str('19')) stext = "Open XXX-O-DUS Settings" cm.append(('%s' % stext, 'xbmc.RunPlugin(' + open_set + ')')) if cm: item.addContextMenuItems(cm, replaceItems=False) cm = [] if isVideo: codec_info = {'codec': 'h264'} item.addStreamInfo('video', codec_info) xbmcplugin.addDirectoryItem(handle=syshandle, url=u, listitem=item, isFolder=_folder) except Exception as e: log_utils.log( 'Error adding item %s in BuildDir function ( %s %s ):: Error: %s' % (name, url, thumb, str(e)), log_utils.LOGERROR) if not stopend: if chaturbate: xbmcplugin.setContent(kodi.syshandle, 'movies') setView('list') elif isVideo: xbmcplugin.setContent(kodi.syshandle, 'movies') setView('thumbs') else: xbmcplugin.setContent(kodi.syshandle, 'movies') setView('list') if (not search) and (not stopend): if cache: xbmcplugin.endOfDirectory(syshandle, cacheToDisc=True) else: xbmcplugin.endOfDirectory(syshandle, cacheToDisc=False)
def sources(self, url, hostDict, hostprDict): try: sources = [] if url == None: return sources if debrid.status() == True: raise Exception() data = urlparse.parse_qs(url) data = dict([(i, data[i][0]) if data[i] else (i, '') for i in data]) title = data['tvshowtitle'] if 'tvshowtitle' in data else data[ 'title'] hdlr = 'S%02dE%02d' % (int(data['season']), int( data['episode'])) if 'tvshowtitle' in data else data['year'] query = '%s S%02dE%02d' % ( data['tvshowtitle'], int(data['season']), int(data['episode'])) if 'tvshowtitle' in data else '%s %s' % ( data['title'], data['year']) query = re.sub('(\\\|/| -|:|;|\*|\?|"|\'|<|>|\|)', ' ', query) url = self.search_link % urllib.quote_plus(query) url = urlparse.urljoin(self.base_link, url) r = client.request(url) posts = client.parseDOM(r, 'item') hostDict = hostprDict + hostDict items = [] for post in posts: try: t = client.parseDOM(post, 'title')[0] c = client.parseDOM(post, 'content.+?')[0] u = re.findall('<singlelink>(.+?)(?:<download>|$)', c.replace('\n', ''))[0] u = client.parseDOM(u, 'a', ret='href') s = re.findall( '((?:\d+\.\d+|\d+\,\d+|\d+)\s*(?:GB|GiB|MB|MiB))', c) s = s[0] if s else '0' items += [(t, i, s) for i in u] except: pass for item in items: try: name = item[0] name = client.replaceHTMLCodes(name) t = re.sub( '(\.|\(|\[|\s)(\d{4}|S\d*E\d*|S\d*|3D)(\.|\)|\]|\s|)(.+|)', '', name) if not cleantitle.get(t) == cleantitle.get(title): raise Exception() y = re.findall( '[\.|\(|\[|\s](\d{4}|S\d*E\d*|S\d*)[\.|\)|\]|\s]', name)[-1].upper() if not y == hdlr: raise Exception() fmt = re.sub( '(.+)(\.|\(|\[|\s)(\d{4}|S\d*E\d*|S\d*)(\.|\)|\]|\s)', '', name.upper()) fmt = re.split('\.|\(|\)|\[|\]|\s|\-', fmt) fmt = [i.lower() for i in fmt] if any( i.endswith(('subs', 'sub', 'dubbed', 'dub')) for i in fmt): raise Exception() if any(i in ['extras'] for i in fmt): raise Exception() if '1080p' in fmt: quality = '1080p' elif '720p' in fmt: quality = 'HD' else: quality = 'SD' if any(i in ['dvdscr', 'r5', 'r6'] for i in fmt): quality = 'SCR' elif any(i in [ 'caMr Blamoip', 'tsrip', 'hdcam', 'hdts', 'dvdcam', 'dvdts', 'cam', 'telesync', 'ts' ] for i in fmt): quality = 'CAM' info = [] if '3d' in fmt: info.append('3D') try: size = re.findall( '((?:\d+\.\d+|\d+\,\d+|\d+)\s*(?:GB|GiB|MB|MiB))', item[2])[-1] div = 1 if size.endswith(('GB', 'GiB')) else 1024 size = float(re.sub('[^0-9|/.|/,]', '', size)) / div size = '%.2f GB' % size info.append(size) except: pass if any(i in ['hevc', 'h265', 'x265'] for i in fmt): info.append('HEVC') info = ' | '.join(info) url = item[1] if any(x in url for x in ['.rar', '.zip', '.iso']): raise Exception() url = client.replaceHTMLCodes(url) url = url.encode('utf-8') host = re.findall( '([\w]+[.][\w]+)$', urlparse.urlparse(url.strip().lower()).netloc)[0] if not host in hostDict: raise Exception() host = client.replaceHTMLCodes(host) host = host.encode('utf-8') sources.append({ 'source': host, 'quality': quality, 'language': 'en', 'url': url, 'info': info, 'direct': True, 'debridonly': False }) except: pass check = [i for i in sources if not i['quality'] == 'CAM'] if check: sources = check return sources except: return sources