def getListOfMyAccount(url, pagina): net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content match = re.compile( '<div id="5" class="item">\s+<a href="(.+?)">\s+<img src="(.+?)" alt="(.+?)" title="(.+?)">' ).findall(codigo_fonte) if 'favoritos.php' in url: tipo = 'kodi_favoritos' elif 'agendados.php' in url: tipo = 'agendados' elif 'vistos.php' in url: tipo = 'vistos' pprint.pprint(match) for link, imagem, nome, nome1 in match: if 'filme.php' in link: infoLabels = {'Title': nome.encode('utf8')} addVideo(nome.encode('utf8'), __SITE__ + "kodi_" + link, 3, imagem, 'filme', 0, 0, infoLabels, imagem) elif 'serie.php' in link: infoLabels = {'Title': nome.encode('utf8')} addDir(nome.encode('utf8'), __SITE__ + "kodi_" + link, 4, imagem, pagina, 'serie', infoLabels, imagem) addDir('Proximo', __SITE__ + tipo + '.php?pagina=' + str(int(pagina) + 1), 11, os.path.join(__ART_FOLDER__, __SKIN__, 'proximo.png'), int(pagina) + 1) vista_filmesSeries()
def download(url,name): legendasOn = False if 'serie.php' in url: siteBase = 'serie.php' elif 'filme.php' in url: siteBase = 'filme.php' net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content match = re.compile('<a class="btn" href="(.+?)"><img src="(.+?)"><\/a>').findall(codigo_fonte) stream, legenda = getStreamLegenda(match, siteBase, codigo_fonte) folder = xbmc.translatePath(__ADDON__.getSetting('pastaDownloads')) streamAux = clean(stream.split('/')[-1]) extensaoStream = clean(streamAux.split('.')[1]) name = name+'.'+extensaoStream if legenda != '': legendaAux = clean(legenda.split('/')[-1]) extensaoLegenda = clean(legendaAux.split('.')[1]) nomeLegenda = name+'.'+extensaoLegenda legendasOn = True Downloader.Downloader().download( os.path.join(folder,name), stream, name) if legendasOn: download_legendas(legenda, os.path.join(folder,nomeLegenda))
def getListOfMyAccount(url, pagina): net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content match = re.compile('<div id="5" class="item">\s+<a href="(.+?)">\s+<img src="(.+?)" alt="(.+?)" title="(.+?)">').findall(codigo_fonte) if 'favoritos.php' in url: tipo = 'kodi_favoritos' elif 'agendados.php' in url: tipo = 'agendados' elif 'vistos.php' in url: tipo = 'vistos' pprint.pprint(match) for link, imagem, nome, nome1 in match: if 'filme.php' in link: infoLabels = {'Title': nome.encode('utf8') } addVideo(nome.encode('utf8'), __SITE__+"kodi_"+link, 3, imagem, 'filme', 0, 0, infoLabels, imagem) elif 'serie.php' in link: infoLabels = {'Title': nome.encode('utf8')} addDir(nome.encode('utf8'), __SITE__+"kodi_"+link, 4, imagem, pagina, 'serie', infoLabels, imagem) addDir('Proximo', __SITE__+tipo+'.php?pagina='+str(int(pagina)+1), 11, os.path.join(__ART_FOLDER__, __SKIN__, 'proximo.png'), int(pagina)+1) vista_filmesSeries()
def getEpisodes(url): net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content match = re.compile('<div id="(.+?)" class="item">\s+<div class="thumb(.+?)?">\s+<a name=\'.+?\' href="(.+?)">\s+<img style="(.+?)" src="(.+?)" onError="this\.onerror=null;this\.src=\'(.+?)\';"\s+alt="(.+?)?">\s+<div class="thumb-shadow" alt="(.+?)?"><\/div>\s+<div class="thumb-effect" alt="(.+?)?"><\/div>\s+<div class="episode-number">(.+?)<\/div>').findall(codigo_fonte) temporadaNumero = re.compile('<div\s+class="season"><a\s+href="(.+?)"\s+class="slctd">(.+?)<\/a>').findall(codigo_fonte)[0][1] #actors = re.compile('<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>').findall(codigo_fonte)[0] try: plot = re.compile(u'Descrição:<\/span>(.+\s.+)<\/span>\s+<\/div>').findall(codigo_fonte)[0] except: plot = "-" #criador = re.compile('<span class="director-caption">Criador: <\/span>\s+<span class="director">\s+(.+?)<\/span>').findall(codigo_fonte)[0] serieTitulo = re.compile('<span class="original-name">- "(.+?)"<\/span>').findall(codigo_fonte)[0].encode('utf8') for lixo, lixo1, link, lixo2, imagem, imagemExterna, nome, nome1, nome2, episodioNumero in match: imdb = re.compile('imdb=(.+?)&').findall(link)[0] #infoLabels = {'Title':nome.decode('utf8'), 'Actors':actors.decode('utf8'), 'Plot':plot.decode('utf8'), 'Season':temporadaNumero, 'Episode':episodioNumero, 'Writer': criador.decode('utf8'), "Code":imdb } infoLabels = {'Title': nome.decode('utf8'), 'Season':temporadaNumero, 'Episode': episodioNumero, "Code": imdb} if 'e' in episodioNumero: episodioNumeroReal = re.compile('(.+)e').findall(episodioNumero)[0] else: episodioNumeroReal = episodioNumero addVideo('[B]Episodio '+episodioNumero+'[/B] | '+nome.encode('utf8'), __SITE__+"kodi_"+link, 3, __SITE__+imagem, 'episodio', temporadaNumero, episodioNumeroReal, infoLabels, imagemExterna, serieTitulo) vista_episodios()
def download(url, name): legendasOn = False if 'serie.php' in url: siteBase = 'serie.php' elif 'filme.php' in url: siteBase = 'filme.php' net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content match = re.compile('<a class="btn" href="(.+?)"><img src="(.+?)"><\/a>' ).findall(codigo_fonte) stream, legenda = getStreamLegenda(match, siteBase, codigo_fonte) folder = xbmc.translatePath(__ADDON__.getSetting('pastaDownloads')) streamAux = clean(stream.split('/')[-1]) extensaoStream = clean(streamAux.split('.')[1]) name = name + '.' + extensaoStream if legenda != '': legendaAux = clean(legenda.split('/')[-1]) extensaoLegenda = clean(legendaAux.split('.')[1]) nomeLegenda = name + '.' + extensaoLegenda legendasOn = True Downloader.Downloader().download(os.path.join(folder, name), stream, name) if legendasOn: download_legendas(legenda, os.path.join(folder, nomeLegenda))
def noswifi(): #obrigado darkstar pelos tiros a escura checkurl = "http://example.com" html=abrir_url_cookie(checkurl) if html.find('action="https://zon.portal.fon.com') >= 0: print "Info inicial: " + str(html) m = re.search('action="(https://zon.[^"]+)"',html) if(m == None): mensagemok('Hotspot Connector',"Actionurl não encontrado.","Volte a tentar mais tarde.") return actionUrl = m.group(1) from t0mm0.common.net import Net net=Net() net.set_cookies(cookie_nos) data = {'USERNAME' : noswifiUsername, 'PASSWORD' : noswifiPassword,'remember':'on'} ref_data = {'User-Agent':user_agent} html= net.http_POST(actionUrl,form_data=data,headers=ref_data).content.encode('latin-1','ignore') print "Teste Login: "******"error"><span>([^<]+)<br /></span></div>', html) if(m == None): try: addLink('[B]Login efectuado ou não necessário[/B]','',wtpath + art + 'noswifi.png') except: pass else: try: addLink(m.group(1),'',wtpath + art + 'noswifi.png') except: pass else: try: addLink('[B]Login efectuado ou não necessário[/B]','',wtpath + art + 'noswifi.png') except: pass
class PutlockerResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "putlocker/sockshare/filedrive/firedrive" profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'putlocker.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): if self.get_setting('login') == 'true': if self.login_stale(): self.login() self.net.set_cookies(self.cookie_file) web_url = self.get_url(host, media_id) if web_url[-1:1]=="#": web_url.replace("#",""); #find session_hash try: html = self.net.http_GET(web_url).content if "404: This file might have been moved, replaced or deleted.<" in html: raise Exception (host+": 404: This file might have been moved, replaced or deleted.") #firedrive error elif ">This file doesn't exist, or has been removed.<" in html: raise Exception (host+": This file doesn't exist, or has been removed.") #sockshare error #Shortcut for logged in users pattern = '<a href="(/.+?)" class="download_file_link" style="margin:0px 0px;">Download File</a>' link = re.search(pattern, html) if link: common.addon.log('Direct link found: %s' % link.group(1)) if 'putlocker' in host: return 'http://www.filedrive.com%s' % link.group(1) #return 'http://www.putlocker.com%s' % link.group(1) elif 'filedrive' in host: return 'http://www.filedrive.com%s' % link.group(1) elif 'firedrive' in host: return 'http://www.firedrive.com%s' % link.group(1) if 'firedrive' in host or 'filedrive' in host or 'putlocker' in host or 'sockshare' in host: try: data = {}; r = re.findall(r'type="hidden" name="(.+?)"\s* value="?(.+?)"/>', html); #data['usr_login']='' for name, value in r: data[name] = value #data['imhuman']='Proceed to video'; data['btn_download']='Proceed to video' #xbmc.sleep(2000) html = self.net.http_POST(web_url, data).content except urllib2.URLError, e: common.addon.log_error(host+': got http error %d fetching 2nd url %s' % (e.code, web_url)) return self.unresolvable(code=3, msg='Exception: %s' % e) #return False r = re.search('<a href="(.+?)" id=\'external_download\' title=\'Download This File\'>', html) if r: return urllib.unquote_plus(r.group(1)) #else: # common.addon.log_error(host+': stream url not found') # return self.unresolvable(code=0, msg='no file located') #return False r = re.search("$.post('(.+?)', function(data) {", html) if r: return urllib.unquote_plus(r.group(1)) else: common.addon.log_error(host+': stream url not found') return self.unresolvable(code=0, msg='no file located') #return False else:
class EcostreamResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "ecostream" profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'ecostream.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() self.pattern = 'http://((?:www.)?ecostream.tv)/(?:stream|embed)?/([0-9a-zA-Z]+).html' def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) try: html = self.net.http_GET(web_url).content if re.search('>File not found!<', html): msg = 'File Not Found or removed' common.addon.show_small_popup( title='[B][COLOR white]ECOSTREAM[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % msg, delay=5000, image=error_logo) return self.unresolvable(code=1, msg=msg) self.net.save_cookies(self.cookie_file) # emulate click on button "Start Stream" postHeader = ({ 'Referer': web_url, 'X-Requested-With': 'XMLHttpRequest' }) web_url = 'http://www.ecostream.tv/xhr/video/get' self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, { 'id': media_id }, headers=postHeader).content sPattern = '"url":"([^"]+)"' r = re.search(sPattern, html) if not r: raise Exception( 'Unable to resolve Ecostream link. Filelink not found.') sLinkToFile = 'http://www.ecostream.tv' + r.group(1) return urllib2.unquote(sLinkToFile) except urllib2.URLError, e: common.addon.log_error(self.name + ': got http error %d fetching %s' % (e.code, web_url)) common.addon.show_small_popup('Error', 'Http error: ' + str(e), 8000, error_logo) return self.unresolvable(code=3, msg='Exception: %s' % e) except Exception, e: common.addon.log('**** Ecostream Error occured: %s' % e) common.addon.show_small_popup( title='[B][COLOR white]ECOSTREAM[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % e, delay=5000, image=error_logo) return self.unresolvable(code=0, msg='Exception: %s' % e)
def TVShowSeasonList(url, title, year, update=''): #4000 print 'Seasons for TV Show %s' % url net = Net() cookiejar = ADDON.get_profile() cookiejar = os.path.join(cookiejar,'cookies') html = net.http_GET(url).content net.save_cookies(cookiejar) adultregex = '<div class="offensive_material">.+<a href="(.+)">I understand' r = re.search(adultregex, html, re.DOTALL) if r: print 'Adult content url detected' adulturl = BASE_URL + r.group(1) headers = {'Referer': url} net.set_cookies(cookiejar) html = net.http_GET(adulturl, headers=headers).content #.encode('utf-8', 'ignore') cnxn = sqlite.connect( DB ) cnxn.text_factory = str cursor = cnxn.cursor() if year: title = title +'('+year+')' try: imdbnum = re.search('mlink_imdb">.+?href="http://www.imdb.com/title/(tt[0-9]{7})"', html).group(1) except: imdbnum = '' seasons = re.search('tv_container(.+?)<div class="clearer', html, re.DOTALL) if not seasons: ADDON.log_error('couldn\'t find seasons') else: season_container = seasons.group(1) season_nums = re.compile('<a href=".+?">Season ([0-9]{1,2})').findall(season_container) if imdbnum and META_ON == 'true': metaget.update_meta('tvshow', title, imdbnum, year=year) season_meta = metaget.get_seasons(title, imdbnum, season_nums) if update: metaget.update_meta('tvshow', title, imdb_id='', new_imdb_id=imdbnum, year=year) seasonList = season_container.split('<h2>') num = 0 temp = {} for eplist in seasonList: r = re.search('<a.+?>(.+?)</a>', eplist) if r: season_name = r.group(1) try: temp = season_meta[num] except: temp['cover_url'] = '' listitem = xbmcgui.ListItem(season_name, iconImage=temp['cover_url'], thumbnailImage=temp['cover_url']) listitem.setInfo(type="Video", infoLabels=temp) try: listitem.setProperty('fanart_image', temp['backdrop_url']) except: pass season_name = unicode_urlencode(season_name).lower() cursor.execute('INSERT or REPLACE into seasons (season,contents) VALUES(?,?);', (season_name, eplist)) url = sys.argv[0]+ '?mode=5000'+'&season=' +season_name+ '&imdbnum='+imdbnum xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=listitem, isFolder=True) cnxn.commit() num += 1 setView('seasons', 'seasons-view') xbmcplugin.endOfDirectory(int(sys.argv[1])) cnxn.close()
class PrimeshareResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "primeshare" domains = ["primeshare.tv"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'primeshare.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) try: html = self.net.http_GET(web_url).content if re.search('>File not exist<', html): msg = 'File Not Found or removed' common.addon.show_small_popup( title='[B][COLOR white]PRIMESHARE[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % msg, delay=5000, image=error_logo) return self.unresolvable(code=1, msg=msg) self.net.save_cookies(self.cookie_file) headers = {'Referer': web_url} # wait required common.addon.show_countdown(8) self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, form_data={ 'hash': media_id }, headers=headers).content r = re.compile("clip:.*?url: '([^']+)'", re.DOTALL).findall(html) if not r: r = re.compile("download\('([^']+)'", re.DOTALL).findall(html) if not r: raise Exception( 'Unable to resolve Primeshare link. Filelink not found.') return r[0] except urllib2.URLError, e: common.addon.log_error(self.name + ': got http error %d fetching %s' % (e.code, web_url)) common.addon.show_small_popup('Error', 'Http error: ' + str(e), 8000, error_logo) return self.unresolvable(code=3, msg='Exception: %s' % e) except Exception, e: common.addon.log('**** Primeshare Error occured: %s' % e) common.addon.show_small_popup( title='[B][COLOR white]PRIMESHARE[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % e, delay=5000, image=error_logo) return self.unresolvable(code=0, msg='Exception: %s' % e)
class PutlockerResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "putlocker/sockshare" profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'putlocker.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): if self.get_setting('login') == 'true': if self.login_stale(): self.login() self.net.set_cookies(self.cookie_file) web_url = self.get_url(host, media_id) #find session_hash try: html = self.net.http_GET(web_url).content except urllib2.URLError, e: common.addon.log_error('putlocker: got http error %d fetching %s' % (e.code, web_url)) return False #Shortcut for logged in users pattern = '<a href="(/.+?)" class="download_file_link" style="margin:0px 0px;">Download File</a>' link = re.search(pattern, html) if link: print 'Direct link found: %s' % link.group(1) return 'http://www.putlocker.com%s' % link.group(1) r = re.search('value="([0-9a-f]+?)" name="hash"', html) if r: session_hash = r.group(1) else: common.addon.show_small_popup( title='[B][COLOR white]PUTLOCKER[/COLOR][/B]', msg= '[COLOR red]No such file or the file has been removed[/COLOR]', delay=8000, image=error_logo) common.addon.log_error('putlocker: session hash not found') return False #post session_hash try: html = self.net.http_POST(web_url, form_data={ 'hash': session_hash, 'confirm': 'Continue as Free User' }).content except urllib2.URLError, e: common.addon.log_error('putlocker: got http error %d posting %s' % (e.code, web_url)) return False
def karaokanta_GET(name,url): karaokanta_LOGIN() net.set_cookies(cookie_jar) html = net.http_GET(url).content match=re.compile('vID=(.+?)\.flv.+?><img src=.+?/>(.+?)<').findall(html) for URL ,name in match: name=name.replace(' ',' ') NAME=name.encode('utf-8') addDir(NAME,URL,203,'','none',1)
def getList(url, pagina): tipo = '' categoria = '' net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content.encode('utf8') if 'kodi_filmes.php' in url: tipo = 'kodi_filmes' elif 'kodi_series.php' in url: tipo = 'kodi_series' elif 'kodi_animes.php' in url: tipo = 'kodi_animes' if 'categoria=' in url: categoria = re.compile('categoria=(.+[0-9])').findall(url)[0] #print codigo_fonte if tipo == 'kodi_filmes': match = re.compile('<img src="(.+?)" alt=".+?">\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info">\s+<a href="(.+?)" class="movie-name">.+?<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info">\s+<div class="detailed-aux" style="height\: inherit\;line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Realizador:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<\/div>\s+').findall(codigo_fonte) elif tipo == 'kodi_series': match = re.compile('<img src="(.+?)" alt=".+?">\s+<div class="thumb-effect" title=".+?"><\/div>\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info">\s+<a href="(.+?)" class="movie-name">.+?<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info">\s+<div class="detailed-aux" style="height\: 20px\; line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Criador:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<\/div>\s+').findall(codigo_fonte) elif tipo == 'kodi_animes': match = re.compile('<img src="(.+?)" alt=".+?">\s+<div class="thumb-effect" title=".+?"><\/div>\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info">\s+<a href="(.+?)" class="movie-name">.+?<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info">\s+<div class="detailed-aux" style="height\: 20px\; line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Criador:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<\/div>\s+').findall(codigo_fonte) #pprint.pprint(match) if tipo == 'kodi_filmes': for imagem, link, genero, ano, nomeOriginal, realizador, elenco in match: try: infoLabels = {'Title': nomeOriginal.decode('utf8'), 'Year': ano, 'Genre': genero.decode('utf8'), 'Plot': '' } addVideo(nomeOriginal+' ('+ano+')', __SITE__+"kodi_"+link, 3, imagem, 'filme', 0, 0, infoLabels, imagem) except: pass else: for imagem, link, genero, ano, nomeOriginal, realizador, elenco in match: try: infoLabels = {'Title':nomeOriginal.decode('utf8'), 'Aired':ano, 'Plot': ''} addDir(nomeOriginal+ ' ('+ano+')', __SITE__+"kodi_"+link, 4, imagem, pagina, 'serie', infoLabels, imagem) except: pass if categoria == '': addDir('Proximo', __SITE__+tipo+'.php?pagina='+str(int(pagina)+1), 1, os.path.join(__ART_FOLDER__, __SKIN__, 'proximo.png'), int(pagina)+1) else: addDir('Proximo', __SITE__+tipo+'.php?pagina='+str(int(pagina)+1)+'&categoria='+categoria, 1, os.path.join(__ART_FOLDER__, __SKIN__, 'proximo.png'), int(pagina)+1) vista_filmesSeries()
def abrir_url_cookie(url): from t0mm0.common.net import Net net=Net() net.set_cookies(cookie_nos) try: link=net.http_GET(url).content.encode('latin-1','ignore') return link except urllib2.HTTPError, e: mensagemok('Hotspot Connector',str(urllib2.HTTPError(e.url, e.code, 'Erro a abrir página', e.hdrs, e.fp)),traducao(40200)) sys.exit(0)
def abrir_url_cookie(url,erro=True): from t0mm0.common.net import Net net=Net() net.set_cookies(cookies) try: ref_data = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Connection':'keep-alive','Host':'www.docspt.com','User-Agent':user_agent} link=net.http_GET(url,ref_data).content.encode('latin-1','ignore') return link except urllib2.HTTPError, e: if erro==True: mensagemok('docsPT',str(urllib2.HTTPError(e.url, e.code, traducao(40032), e.hdrs, e.fp)),traducao(40033)) sys.exit(0)
class EcostreamResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "ecostream" profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'ecostream.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() self.pattern = 'http://((?:www.)?ecostream.tv)/(?:stream|embed)?/([0-9a-zA-Z]+).html' def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) try: html = self.net.http_GET(web_url).content if re.search('>File not found!<',html): msg = 'File Not Found or removed' common.addon.show_small_popup(title='[B][COLOR white]ECOSTREAM[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % msg, delay=5000, image=error_logo) return self.unresolvable(code = 1, msg = msg) self.net.save_cookies(self.cookie_file) r = re.search("anlytcs='([^']+)'", html) if not r: raise Exception ('Formvalue not found') part1 = r.group(1) r = re.search("superslots='([^']+)';", html) if not r: raise Exception ('Formvalue not found') part2 = r.group(1) tpm = part1+part2 # emulate click on button "Start Stream" postHeader = ({'Referer':web_url, 'X-Requested-With':'XMLHttpRequest'}) web_url = 'http://www.ecostream.tv/xhr/video/vidureis' self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url,{'id':media_id, 'tpm':tpm}, headers = postHeader).content sPattern = '"url":"([^"]+)"' r = re.search(sPattern, html) if not r: raise Exception ('Unable to resolve Ecostream link. Filelink not found.') sLinkToFile = 'http://www.ecostream.tv'+r.group(1) return urllib2.unquote(sLinkToFile) except urllib2.URLError, e: common.addon.log_error(self.name + ': got http error %d fetching %s' % (e.code, web_url)) common.addon.show_small_popup('Error','Http error: '+str(e), 8000, error_logo) return self.unresolvable(code=3, msg='Exception: %s' % e) except Exception, e: common.addon.log('**** Ecostream Error occured: %s' % e) common.addon.show_small_popup(title='[B][COLOR white]ECOSTREAM[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % e, delay=5000, image=error_logo) return self.unresolvable(code=0, msg='Exception: %s' % e)
def abrir_url_cookie(url,parametros=None): from t0mm0.common.net import Net net=Net() net.set_cookies(cookie_wt) try: if parametros:link=net.http_POST(url,parametros).content.encode('latin-1','ignore') link=net.http_GET(url).content.encode('latin-1','ignore') return link except urllib2.HTTPError, e: mensagemok('wareztuga.tv',str(urllib2.HTTPError(e.url, e.code, traducao(40199), e.hdrs, e.fp)),traducao(40200)) sys.exit(0)
def Search(section, query, imdb): html = GetURL(BASE_URL) r = re.search('input type="hidden" name="key" value="([0-9a-f]*)"', html).group(1) search_url = BASE_URL + '/index.php?search_keywords=' search_url += urllib.quote_plus(query) search_url += '&key=' + r if section == 'tv': search_url += '&search_section=2' video_type = 'tvshow' else: video_type = 'movie' html = GetURL(search_url) r = 'class="index_item.+?href="(.+?)" title="Watch (.+?)"?\(?([0-9]{4})?\)?"?>.+?src="(.+?)"' regex = re.search(r, html, re.DOTALL) if regex: url,title,year,thumb = regex.groups() net = Net() cookiejar = addon.get_profile() cookiejar = os.path.join(cookiejar,'cookies') net.set_cookies(cookiejar) html = net.http_GET(BASE_URL + url).content net.save_cookies(cookiejar) adultregex = '<div class="offensive_material">.+<a href="(.+)">I understand' r = re.search(adultregex, html, re.DOTALL) if r: addon.log('Adult content url detected') adulturl = BASE_URL + r.group(1) headers = {'Referer': url} net.set_cookies(cookiejar) html = net.http_GET(adulturl, headers=headers).content net.save_cookies(cookiejar) for version in re.finditer('<table[^\n]+?class="movie_version(?: movie_version_alt)?">(.*?)</table>', html, re.DOTALL|re.IGNORECASE): for s in re.finditer('quality_(?!sponsored|unknown)(.*?)></span>.*?'+ 'url=(.*?)&(?:amp;)?domain=(.*?)&(?:amp;)?(.*?)'+ '"version_veiws"> ([\d]+) views</', version.group(1), re.DOTALL): q, url, host, parts, views = s.groups() q = q.upper() url = url.decode('base-64') host = host.decode('base-64') disp_title = '[%s] %s (%s views)' %(q, host, views) result = {'tag':tag, 'provider_name':display_name} qs = {'url':url, 'title':title, 'img':thumb, 'year':year, 'imdbnum':imdb} qs['video_type'] = video_type qs['strm'] = True qs['mode'] = 'PlaySource' result['li_url'] = 'plugin://plugin.video.1channel/?%s' %urllib.urlencode(qs) print result['li_url'] result['info_labels'] = {'title':disp_title} yield result
def loginAgora(): if (not __ADDON__.getSetting('login_name') or not __ADDON__.getSetting('login_password')): __ALERTA__('Live!t TV', 'Precisa de definir o seu Utilizador e Senha') abrirDefinincoesMesmo() else: try: net = Net() net.set_cookies(__COOKIE_FILE__) dados = {'username': __ADDON__.getSetting("login_name"), 'password': __ADDON__.getSetting("login_password")} codigo_fonte = net.http_POST(base_server+'/PHP/LoginAddon2.php',form_data=dados,headers=__HEADERS__).content elems = ET.fromstring(codigo_fonte) servid = '' nomeus = '' tipous = '' sucesso = '' for child in elems: if(child.tag == 'sucesso'): sucesso = child.text elif(child.tag == 'user'): for d in child: if(d.tag == 'Nome'): nomeus = d.text elif(d.tag == 'Tipo'): tipous = d.text elif(d.tag == 'Servidor'): servid = d.text if sucesso == 'utilizador': __ALERTA__('Live!t TV', 'Utilizador incorreto.') __ADDON__.openSettings() addDir2('Entrar novamente', 'url', None, None, 'Miniatura', base_server+'/Addon/Imagens/retroceder.png','','','','',os.path.join(__ART_FOLDER__, __SKIN__, 'fundo_addon.png')) xbmc.executebuiltin("Container.SetViewMode(50)") elif sucesso == 'senha': __ALERTA__('Live!t TV', 'Senha incorreta.') __ADDON__.openSettings() addDir2('Entrar novamente', 'url', None, None, 'Miniatura', base_server+'/Addon/Imagens/retroceder.png','','','','',os.path.join(__ART_FOLDER__, __SKIN__, 'fundo_addon.png')) xbmc.executebuiltin("Container.SetViewMode(50)") elif sucesso == 'ativo': __ALERTA__('Live!t TV', 'O estado do seu Utilizador encontra-se Inactivo. Para saber mais informações entre em contacto pelo email [email protected].') xbmc.executebuiltin("Container.SetViewMode(50)") elif sucesso == 'yes': if servid == '': __ALERTA__('Live!t TV', 'Não foi possível abrir a página. Por favor tente novamente mais tarde.') elif servid == 'Teste': __ALERTA__('Live!t TV', 'O seu utilizador é um servidor de teste. Logo não pode instalar a Build. Adquira um pack através do site: http://liveitkodi.com/Aquisicao e após isso terá a sua conta e pode instalar a build.') else: xbmc.executebuiltin('Notification(%s, %s, %i, %s)'%('Live!t-TV','Secção Iniciada: '+nomeus, 8000, _ICON_)) CATEGORIES() else: __ALERTA__('Live!t TV', 'Não foi possível abrir a página. Por favor tente novamente.') except: __ALERTA__('Live!t TV', 'Não foi possível abrir a página. Por favor tente novamente.')
class PrimeshareResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "primeshare" domains = ["primeshare.tv"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'primeshare.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content if re.search('>File not exist<', html): raise UrlResolver.ResolverError('File Not Found or removed') self.net.save_cookies(self.cookie_file) headers = {'Referer': web_url} # wait required common.addon.show_countdown(8) self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, form_data={ 'hash': media_id }, headers=headers).content r = re.compile("clip:.*?url: '([^']+)'", re.DOTALL).findall(html) if not r: r = re.compile("download\('([^']+)'", re.DOTALL).findall(html) if not r: raise UrlResolver.ResolverError( 'Unable to resolve Primeshare link. Filelink not found.') return r[0] def get_url(self, host, media_id): return 'http://primeshare.tv/download/%s' % (media_id) def get_host_and_id(self, url): r = re.search('http://(?:www.)(.+?)/download/([0-9A-Za-z]+)', url) if r: return r.groups() else: r = re.search('//(.+?)/download/([0-9A-Za-z]+)', url) if r: return r.groups() else: return False def valid_url(self, url, host): return re.match('http://(www.)?primeshare.tv/download/[0-9A-Za-z]+', url) or 'primeshare' in host
class EcostreamResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "ecostream" profile_path = common.profile_path cookie_file = os.path.join(profile_path, "ecostream.cookies") def __init__(self): p = self.get_setting("priority") or 100 self.priority = int(p) self.net = Net() self.pattern = "http://((?:www.)?ecostream.tv)/(?:stream|embed)?/([0-9a-zA-Z]+).html" def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) try: html = self.net.http_GET(web_url).content() if re.search(">File not found!<", html): msg = "File Not Found or removed" common.addon.show_small_popup( title="[B][COLOR white]ECOSTREAM[/COLOR][/B]", msg="[COLOR red]%s[/COLOR]" % msg, delay=5000, image=error_logo, ) return self.unresolvable(code=1, msg=msg) self.net.save_cookies(self.cookie_file) # emulate click on button "Start Stream" postHeader = {"Referer": web_url, "X-Requested-With": "XMLHttpRequest"} web_url = "http://www.ecostream.tv/xhr/video/get" self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, {"id": media_id}, headers=postHeader).content sPattern = '"url":"([^"]+)"' r = re.search(sPattern, html) if not r: raise Exception("Unable to resolve Ecostream link. Filelink not found.") sLinkToFile = "http://www.ecostream.tv" + r.group(1) return urllib2.unquote(sLinkToFile) except urllib2.URLError, e: common.addon.log_error(self.name + ": got http error %d fetching %s" % (e.code, web_url)) common.addon.show_small_popup("Error", "Http error: " + str(e), 8000, error_logo) return self.unresolvable(code=3, msg="Exception: %s" % e) except Exception, e: common.addon.log("**** Ecostream Error occured: %s" % e) common.addon.show_small_popup( title="[B][COLOR white]ECOSTREAM[/COLOR][/B]", msg="[COLOR red]%s[/COLOR]" % e, delay=5000, image=error_logo, ) return self.unresolvable(code=0, msg="Exception: %s" % e)
def pesquisa(): net = Net() net.set_cookies(__COOKIE_FILE__) dialog = xbmcgui.Dialog() server = dialog.select(u'Onde quer pesquisar?', ['Filmes', 'Series', 'Animes']) if server == 0: site = __SITE__+'kodi_procurarf.php' elif server == 1: site = __SITE__+'kodi_procurars.php' elif server == 2: site = __SITE__+'kodi_procuraranime.php' teclado = xbmc.Keyboard('', 'O que quer pesquisar?') teclado.doModal() if teclado.isConfirmed(): strPesquisa = teclado.getText() dados = {'searchBox': strPesquisa} codigo_fonte = net.http_POST(site, form_data=dados, headers=__HEADERS__).content.encode('utf8') if server == 1 or server == 2: match = re.compile('<img src="(.+?)" alt="(.+?)">\s+<div class="thumb-effect" title="(.+?)"><\/div>\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info" style="width\: 80\%\;">\s+<a href="(.+?)" class="movie-name">(.+?)<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info">\s+<div class="detailed-aux" style="height\: 20px\; line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Escritor:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>').findall(codigo_fonte) elif server == 0: match = re.compile('<img src="(.+?)" alt="(.+?)">\s+<div class="thumb-effect" title="(.+?)"><\/div>\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info" style="width\: 80\%\;">\s+<a href="(.+?)" class="movie-name">(.+?)<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info" style="width\: initial\;">\s+<div class="detailed-aux" style="height\: 20px\; line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Realizador:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>').findall(codigo_fonte) pprint.pprint(match) if match != []: for imagem, nome1, nome2, link, nome3, genero, ano, nomeOriginal, realizador, elenco in match: if server == 0: try: infoLabels = {'Title': nomeOriginal.decode('utf8'), 'Year': ano, 'Genre': genero.decode('utf8'), 'Plot': '-' } addVideo(nomeOriginal.decode('utf8')+' ('+ano+')', __SITE__+"kodi_"+link, 3, imagem, 'filme', 0, 0, infoLabels, imagem) except: pass elif server == 1 or server == 2: print nomeOriginal infoLabels = {'Title':nomeOriginal.decode('utf8'), 'Aired':ano, 'Plot': '-'} addDir(nomeOriginal+ ' ('+ano+')', __SITE__+"kodi_"+link, 4, imagem, pagina, 'serie', infoLabels, imagem) else: addDir('Voltar', 'url', None, os.path.join(__ART_FOLDER__, __SKIN__, 'retroceder.png'), 0) vista_filmesSeries()
def noswifi(): #obrigado darkstar pelos tiros a escura checkurl = "http://example.com" html = abrir_url_cookie(checkurl) if html.find('action="https://zon.portal.fon.com') >= 0: print "Info inicial: " + str(html) m = re.search('action="(https://zon.[^"]+)"', html) if (m == None): mensagemok('Hotspot Connector', "Actionurl não encontrado.", "Volte a tentar mais tarde.") return actionUrl = m.group(1) from t0mm0.common.net import Net net = Net() net.set_cookies(cookie_nos) data = { 'USERNAME': noswifiUsername, 'PASSWORD': noswifiPassword, 'remember': 'on' } ref_data = {'User-Agent': user_agent} html = net.http_POST(actionUrl, form_data=data, headers=ref_data).content.encode( 'latin-1', 'ignore') print "Teste Login: "******"error"><span>([^<]+)<br /></span></div>', html) if (m == None): try: addLink('[B]Login efectuado ou não necessário[/B]', '', wtpath + art + 'noswifi.png') except: pass else: try: addLink(m.group(1), '', wtpath + art + 'noswifi.png') except: pass else: try: addLink('[B]Login efectuado ou não necessário[/B]', '', wtpath + art + 'noswifi.png') except: pass
def abrir_url_cookie(url): from t0mm0.common.net import Net net = Net() net.set_cookies(cookie_nos) try: link = net.http_GET(url).content.encode('latin-1', 'ignore') return link except urllib2.HTTPError, e: mensagemok( 'Hotspot Connector', str( urllib2.HTTPError(e.url, e.code, 'Erro a abrir página', e.hdrs, e.fp)), traducao(40200)) sys.exit(0)
class PutlockerResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "putlocker/sockshare" profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'putlocker.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): if self.get_setting('login') == 'true': if self.login_stale(): self.login() self.net.set_cookies(self.cookie_file) web_url = self.get_url(host, media_id) #find session_hash try: html = self.net.http_GET(web_url).content except urllib2.URLError, e: common.addon.log_error('putlocker: got http error %d fetching %s' % (e.code, web_url)) return False #Shortcut for logged in users pattern = '<a href="(/.+?)" class="download_file_link" style="margin:0px 0px;">Download File</a>' link = re.search(pattern, html) if link: print 'Direct link found: %s' %link.group(1) return 'http://www.putlocker.com%s' %link.group(1) r = re.search('value="([0-9a-f]+?)" name="hash"', html) if r: session_hash = r.group(1) else: common.addon.log_error('putlocker: session hash not found') return False #post session_hash try: html = self.net.http_POST(web_url, form_data={'hash': session_hash, 'confirm': 'Continue as Free User'}).content except urllib2.URLError, e: common.addon.log_error('putlocker: got http error %d posting %s' % (e.code, web_url)) return False
def adicionarVistoSite(self): net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(self.url, headers=__HEADERS__).content if self.content == 'movie': visto = re.compile('xmlhttp\.open\(\"GET\"\,\"getvisto\.php\?id\=(.+?)\"\,true\)\;').findall(codigo_fonte)[0] siteVisto = __SITE__+'getvisto.php?id='+visto elif self.content == 'episode': visto = re.compile('<div class="episode-actions">\s+<a href="(.+?)" class="marcar">Marcar como visto<\/a><a').findall(codigo_fonte)[0] siteVisto = __SITE__+visto if visto != '': marcar = net.http_GET(siteVisto, headers=__HEADERS__).content
def abrir_url_cookie(url, parametros=None): from t0mm0.common.net import Net net = Net() net.set_cookies(cookie_wt) try: if parametros: link = net.http_POST(url, parametros).content.encode( 'latin-1', 'ignore') link = net.http_GET(url).content.encode('latin-1', 'ignore') return link except urllib2.HTTPError, e: mensagemok( 'wareztuga.tv', str(urllib2.HTTPError(e.url, e.code, traducao(40199), e.hdrs, e.fp)), traducao(40200)) sys.exit(0)
class PrimeshareResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "primeshare" domains = ["primeshare.tv"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, "primeshare.cookies") def __init__(self): p = self.get_setting("priority") or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content if re.search(">File not exist<", html): raise UrlResolver.ResolverError("File Not Found or removed") self.net.save_cookies(self.cookie_file) headers = {"Referer": web_url} # wait required common.addon.show_countdown(8) self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, form_data={"hash": media_id}, headers=headers).content r = re.compile("clip:.*?url: '([^']+)'", re.DOTALL).findall(html) if not r: r = re.compile("download\('([^']+)'", re.DOTALL).findall(html) if not r: raise UrlResolver.ResolverError("Unable to resolve Primeshare link. Filelink not found.") return r[0] def get_url(self, host, media_id): return "http://primeshare.tv/download/%s" % (media_id) def get_host_and_id(self, url): r = re.search("http://(?:www.)(.+?)/download/([0-9A-Za-z]+)", url) if r: return r.groups() else: r = re.search("//(.+?)/download/([0-9A-Za-z]+)", url) if r: return r.groups() else: return False def valid_url(self, url, host): return re.match("http://(www.)?primeshare.tv/download/[0-9A-Za-z]+", url) or "primeshare" in host
def adicionarVistoSite(self): net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(self.url, headers=__HEADERS__).content if self.content == 'movie': visto = re.compile('<a id="watched" href="(.+?)" class="watched ">Marcar como visto<span class="watch"><\/span><\/a>').findall(codigo_fonte)[0] elif self.content == 'episode': visto = re.compile('<div class="episode-actions">\s+<a href="(.+?)" class="marcar">Marcar como visto<\/a><a').findall(codigo_fonte)[0] print "VISTO" print visto if visto != '': marcar = net.http_GET(__SITE__+visto, headers=__HEADERS__).content
def getEpisodes(url): net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content match = re.compile( '<div id="(.+?)" class="item">\s+<div class="thumb(.+?)?">\s+<a name=\'.+?\' href="(.+?)">\s+<img style="(.+?)" src="(.+?)" onError="this\.onerror=null;this\.src=\'(.+?)\';"\s+alt="(.+?)?">\s+<div class="thumb-shadow" alt="(.+?)?"><\/div>\s+<div class="thumb-effect" alt="(.+?)?"><\/div>\s+<div class="episode-number">(.+?)<\/div>' ).findall(codigo_fonte) temporadaNumero = re.compile( '<div\s+class="season"><a\s+href="(.+?)"\s+class="slctd">(.+?)<\/a>' ).findall(codigo_fonte)[0][1] #actors = re.compile('<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>').findall(codigo_fonte)[0] try: plot = re.compile(u'Descrição:<\/span>(.+\s.+)<\/span>\s+<\/div>' ).findall(codigo_fonte)[0] except: plot = "-" #criador = re.compile('<span class="director-caption">Criador: <\/span>\s+<span class="director">\s+(.+?)<\/span>').findall(codigo_fonte)[0] serieTitulo = re.compile('<span class="original-name">- "(.+?)"<\/span>' ).findall(codigo_fonte)[0].encode('utf8') for lixo, lixo1, link, lixo2, imagem, imagemExterna, nome, nome1, nome2, episodioNumero in match: imdb = re.compile('imdb=(.+?)&').findall(link)[0] #infoLabels = {'Title':nome.decode('utf8'), 'Actors':actors.decode('utf8'), 'Plot':plot.decode('utf8'), 'Season':temporadaNumero, 'Episode':episodioNumero, 'Writer': criador.decode('utf8'), "Code":imdb } infoLabels = { 'Title': nome.decode('utf8'), 'Season': temporadaNumero, 'Episode': episodioNumero, "Code": imdb } if 'e' in episodioNumero: episodioNumeroReal = re.compile('(.+)e').findall(episodioNumero)[0] else: episodioNumeroReal = episodioNumero addVideo( '[B]Episodio ' + episodioNumero + '[/B] | ' + nome.encode('utf8'), __SITE__ + "kodi_" + link, 3, __SITE__ + imagem, 'episodio', temporadaNumero, episodioNumeroReal, infoLabels, imagemExterna, serieTitulo) vista_episodios()
class PrimeshareResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "primeshare" domains = [ "primeshare.tv" ] profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'primeshare.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) try: html = self.net.http_GET(web_url).content if re.search('>File not exist<',html): msg = 'File Not Found or removed' common.addon.show_small_popup(title='[B][COLOR white]PRIMESHARE[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % msg, delay=5000, image=error_logo) return self.unresolvable(code = 1, msg = msg) self.net.save_cookies(self.cookie_file) headers = {'Referer':web_url} # wait required common.addon.show_countdown(8) self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, form_data={'hash':media_id}, headers = headers).content r = re.compile("clip:.*?url: '([^']+)'",re.DOTALL).findall(html) if not r: r = re.compile("download\('([^']+)'",re.DOTALL).findall(html) if not r: raise Exception ('Unable to resolve Primeshare link. Filelink not found.') return r[0] except urllib2.URLError, e: common.addon.log_error(self.name + ': got http error %d fetching %s' % (e.code, web_url)) common.addon.show_small_popup('Error','Http error: '+str(e), 8000, error_logo) return self.unresolvable(code=3, msg='Exception: %s' % e) except Exception, e: common.addon.log('**** Primeshare Error occured: %s' % e) common.addon.show_small_popup(title='[B][COLOR white]PRIMESHARE[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % e, delay=5000, image=error_logo) return self.unresolvable(code=0, msg='Exception: %s' % e)
def abrir_url_cookie(url, erro=True): from t0mm0.common.net import Net net = Net() net.set_cookies(cookies) try: ref_data = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Connection': 'keep-alive', 'Host': 'www.docspt.com', 'User-Agent': user_agent } link = net.http_GET(url, ref_data).content.encode('latin-1', 'ignore') return link except urllib2.HTTPError, e: if erro == True: mensagemok( 'docsPT', str( urllib2.HTTPError(e.url, e.code, traducao(40032), e.hdrs, e.fp)), traducao(40033)) sys.exit(0)
def adicionarVistoSite(self): net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(self.url, headers=__HEADERS__).content if self.content == 'movie': visto = re.compile( '<a id="watched" href="(.+?)" class="watched ">Marcar como visto<span class="watch"><\/span><\/a>' ).findall(codigo_fonte)[0] elif self.content == 'episode': visto = re.compile( '<div class="episode-actions">\s+<a href="(.+?)" class="marcar">Marcar como visto<\/a><a' ).findall(codigo_fonte)[0] print "VISTO" print visto if visto != '': marcar = net.http_GET(__SITE__ + visto, headers=__HEADERS__).content
class MovreelResolver(Plugin, UrlResolver, SiteAuth, PluginSettings): implements = [UrlResolver, SiteAuth, PluginSettings] name = "movreel" profile_path = common.profile_path cookie_file = os.path.join(profile_path, '%s.cookies' % name) def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() try: os.makedirs(os.path.dirname(self.cookie_file)) except OSError: pass def login(self): if self.get_setting('login') == 'true': loginurl = 'http://movreel.com/login.html' data = { 'op': 'login', 'login': self.get_setting('username'), 'password': self.get_setting('password') } html = net.http_POST(loginurl, data).content if re.search('op=logout', html): common.addon.log('LOGIN SUCCESSFUL') self.net.save_cookies(self.cookie_file) return True else: common.addon.log('LOGIN FAILED') return False else: common.addon.log('No account info entered') return False def get_media_url(self, host, media_id): try: self.net.set_cookies(self.cookie_file) url = self.get_url(host, media_id) html = self.net.http_GET(url).content dialog = xbmcgui.DialogProgress() dialog.create('Resolving', 'Resolving Movreel Link...') dialog.update(0) common.addon.log('Movreel - Requesting GET URL: %s' % url) html = net.http_GET(url).content dialog.update(33) if re.search('This server is in maintenance mode', html): common.addon.log( '***** Movreel - Site reported maintenance mode') raise Exception('File is currently unavailable on the host') op = re.search('<input type="hidden" name="op" value="(.+?)">', html).group(1) postid = re.search('<input type="hidden" name="id" value="(.+?)">', html).group(1) method_free = re.search( '<input type="(submit|hidden)" name="method_free" (style=".*?" )*value="(.*?)">', html).group(3) method_premium = re.search( '<input type="(hidden|submit)" name="method_premium" (style=".*?" )*value="(.*?)">', html).group(3) if method_free: usr_login = '' fname = re.search( '<input type="hidden" name="fname" value="(.+?)">', html).group(1) data = { 'op': op, 'usr_login': usr_login, 'id': postid, 'referer': url, 'fname': fname, 'method_free': method_free } else: rand = re.search( '<input type="hidden" name="rand" value="(.+?)">', html).group(1) data = { 'op': op, 'id': postid, 'referer': url, 'rand': rand, 'method_premium': method_premium } print 'Movreel - Requesting POST URL: %s DATA: %s' % (url, data) html = net.http_POST(url, data).content if method_free: if re.search('<p class="err">.+?</p>', html): common.addon.log('***** Download limit reached') errortxt = re.search('<p class="err">(.+?)</p>', html).group(1) raise Exception(errortxt) dialog.update(66) op = re.search('<input type="hidden" name="op" value="(.+?)">', html).group(1) postid = re.search( '<input type="hidden" name="id" value="(.+?)">', html).group(1) rand = re.search( '<input type="hidden" name="rand" value="(.+?)">', html).group(1) method_free = re.search( '<input type="hidden" name="method_free" value="(.+?)">', html).group(1) data = { 'op': op, 'id': postid, 'rand': rand, 'referer': url, 'method_free': method_free, 'down_direct': 1 } common.addon.log('Movreel - Requesting POST URL: %s DATA: %s' % (url, data)) html = net.http_POST(url, data).content dialog.update(100) dialog.close() link = re.search( '<a id="lnk_download" href="(.+?)">Download Original Video</a>', html, re.DOTALL).group(1) return link except Exception, e: common.addon.log_error('**** Movreel Error occured: %s' % e) return False
class MovreelResolver(Plugin, UrlResolver, SiteAuth, PluginSettings): implements = [UrlResolver, SiteAuth, PluginSettings] name = "movreel" domains = ["movreel.com"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, '%s.cookies' % name) def __init__(self): p = self.get_setting('priority') or 1 self.priority = int(p) self.net = Net() try: os.makedirs(os.path.dirname(self.cookie_file)) except OSError: pass def get_media_url(self, host, media_id): self.net.set_cookies(self.cookie_file) web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content if re.search('This server is in maintenance mode', html): raise UrlResolver.ResolverError('File is currently unavailable on the host') data = {} r = re.findall(r'type="hidden" name="(.+?)" value="(.+?)"', html) if r: for name, value in r: data[name] = value data['referer'] = web_url else: raise UrlResolver.ResolverError('Cannot find data values') data['btn_download'] = 'Continue to Video' r = re.search('<span id="countdown_str">Wait <span id=".+?">(.+?)</span> seconds</span>', html) if r: wait_time = r.group(1) else: wait_time = 2 # default to 2 seconds xbmc.sleep(int(wait_time) * 1000) html = self.net.http_POST(web_url, data).content r = re.search('href="([^"]+)">Download Link', html) if r: return r.group(1) else: raise UrlResolver.ResolverError('Unable to locate Download Link') def get_url(self, host, media_id): return 'http://www.movreel.com/%s' % media_id def get_host_and_id(self, url): r = re.search('//(.+?)/([0-9a-zA-Z]+)', url) if r: return r.groups() else: return False return('host', 'media_id') def valid_url(self, url, host): if self.get_setting('enabled') == 'false': return False return (re.match('http://(www.)?movreel.com/' + '[0-9A-Za-z]+', url) or 'movreel' in host) def login(self): if self.get_setting('login') == 'true': loginurl = 'http://movreel.com' login = self.get_setting('username') password = self.get_setting('password') data = {'op': 'login', 'login': login, 'password': password} html = self.net.http_POST(loginurl, data).content if re.search('op=logout', html): self.net.save_cookies(self.cookie_file) common.addon.log('LOGIN SUCCESSFUL') return True else: common.addon.log('LOGIN FAILED') return False else: common.addon.log('No account info entered') return False def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting id="%s_login" ' % (self.__class__.__name__) xml += 'type="bool" label="login" default="false"/>\n' xml += '<setting id="%s_username" enable="eq(-1,true)" ' % (self.__class__.__name__) xml += 'type="text" label="username" default=""/>\n' xml += '<setting id="%s_password" enable="eq(-2,true)" ' % (self.__class__.__name__) xml += 'type="text" label="password" option="hidden" default=""/>\n' return xml
import storageserverdummy as StorageServer BASE_URL = "http://www.flyinhd.com" LANGS = [ 'tamil', 'hindi', 'telugu' ] addonId = 'plugin.video.flyinhd' addon = Addon( addonId, sys.argv ) addonPath = xbmc.translatePath( addon.get_profile() ) cookiePath = os.path.join( addonPath, 'cookies' ) cookieFile = os.path.join( cookiePath, "cookies.txt" ) net = Net() if not os.path.exists(cookiePath): os.makedirs(cookiePath) else: net.set_cookies( cookieFile ) cache = StorageServer.StorageServer( addonId ) cache.dbg = True cache.dbglevel = 10 def parseMoviePage( lang ): print "parseMoviePage, lang:" + lang url = BASE_URL + '/?lang=' + lang response = net.http_GET( url ) net.save_cookies( cookieFile ) movieIndex = {} url = BASE_URL + '/movies' response = net.http_GET( url ) net.save_cookies( cookieFile )
def player(name, url, iconimage, temporada, episodio, serieNome=''): pastaData = '' net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content if temporada == 0 and episodio == 0: pastaData = __PASTA_FILMES__ idIMDb = re.compile('imdb=(.+)').findall(url)[0] #ano = str(re.compile('\((.+?)\)').findall(name)[0]) ano = str( re.compile( '<span class="year"><span>\s+-\s+\(<\/span>(.+?)<span>\)'). findall(codigo_fonte)[0]) siteBase = 'filme.php' else: pastaData = __PASTA_SERIES__ ano = str( re.compile( '<span class="year"><span>\s+-\s+\(<\/span>(.+?)<span>\)'). findall(codigo_fonte)[0]) idIMDb = re.compile('imdb=(.+?)&').findall(url)[0] siteBase = 'serie.php' mensagemprogresso = xbmcgui.DialogProgress() mensagemprogresso.create('MrPiracy.xyz', u'Abrir emissão', 'Por favor aguarde...') mensagemprogresso.update(25, "", u'Obter video e legenda', "") match = re.compile( '<a id="(.+?)" class="btn(.+?)?" onclick=".+?"><img src="(.+?)"><\/a>' ).findall(codigo_fonte) stream, legenda = getStreamLegenda(match, siteBase, codigo_fonte) print "STREAM &&& LEGENDA" print stream print legenda mensagemprogresso.update(50, "", u'Prepara-te, vai começar!', "") playlist = xbmc.PlayList(1) playlist.clear() listitem = xbmcgui.ListItem(name, iconImage="DefaultVideo.png", thumbnailImage=iconimage) listitem.setInfo("Video", {"title": name}) listitem.setProperty('mimetype', 'video/x-msvideo') listitem.setProperty('IsPlayable', 'true') playlist.add(stream, listitem) xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]), succeeded=True, listitem=listitem) mensagemprogresso.update(75, "", u'Boa Sessão!!!', "") print "url: " + url + " idIMDb: " + idIMDb + " pastaData: " + pastaData + "\n temporada: " + str( temporada) + " episodio: " + str( episodio) + " \nnome: " + name + " ano:" + str( ano) + "\nstream: " + stream + " legenda: " + legenda if stream == False: __ALERTA__( 'MrPiracy.xyz', 'O servidor escolhido não disponível, escolha outro ou tente novamente mais tarde.' ) else: player = Player.Player(url=url, idFilme=idIMDb, pastaData=pastaData, temporada=temporada, episodio=episodio, nome=name, ano=ano, logo=os.path.join(__ADDON_FOLDER__, 'icon.png'), serieNome=serieNome) mensagemprogresso.close() player.play(playlist) player.setSubtitles(legenda) while player.playing: xbmc.sleep(5000) player.trackerTempo()
class SockshareResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "sockshare" domains = ["sockshare.com"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'sockshare.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): if self.get_setting('login') == 'true': if self.login_stale(): self.login() self.net.set_cookies(self.cookie_file) web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content if ">This file doesn't exist, or has been removed.<" in html: raise UrlResolver.ResolverError( host + ": This file doesn't exist, or has been removed.") elif "This file might have been moved, replaced or deleted.<" in html: raise UrlResolver.ResolverError( host + ": 404: This file might have been moved, replaced or deleted.") #Shortcut for logged in users pattern = '<a href="(/.+?)" class="download_file_link" style="margin:0px 0px;">Download File</a>' link = re.search(pattern, html) if link: common.addon.log_debug('Direct link found: %s' % link.group(1)) return 'http://www.sockshare.com%s' % link.group(1) r = re.search('value="([0-9a-f]+?)" name="hash"', html) if r: session_hash = r.group(1) else: raise UrlResolver.ResolverError( 'sockshare: session hash not found') #post session_hash html = self.net.http_POST(web_url, form_data={ 'hash': session_hash, 'confirm': 'Continue as Free User' }).content #find playlist code r = re.search('\?stream=(.+?)\'', html) if r: playlist_code = r.group(1) else: r = re.search('key=(.+?)&', html) playlist_code = r.group(1) #find download link q = self.get_setting('quality') #Try to grab highest quality link available if q == '1': #download & return link. if 'sockshare' in host: Avi = "http://sockshare.com/get_file.php?stream=%s&original=1" % playlist_code html = self.net.http_GET(Avi).content final = re.compile('url="(.+?)"').findall(html)[0].replace( '&', '&') return "%s|User-Agent=%s" % ( final, 'Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0' ) #Else grab standard flv link else: xml_url = re.sub('/(file|embed)/.+', '/get_file.php?stream=', web_url) xml_url += playlist_code html = self.net.http_GET(xml_url).content r = re.search('url="(.+?)"', html) if r: flv_url = r.group(1) else: raise UrlResolver.ResolverError( 'sockshare: stream url not found') return "%s|User-Agent=%s" % (flv_url.replace( '&', '&' ), 'Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0' ) def get_url(self, host, media_id): if 'sockshare' in host: host = 'www.sockshare.com' return 'http://%s/file/%s' % (host, media_id) def get_host_and_id(self, url): r = re.search('//(.+?)/(?:file|embed)/([0-9A-Z]+)', url) if r: return r.groups() else: return False def valid_url(self, url, host): return (re.match( 'http://(www.)?(sockshare).com/' + '(file|embed)/[0-9A-Z]+', url) or 'sockshare' in host) def login_stale(self): url = 'http://www.sockshare.com/cp.php' if not os.path.exists(self.cookie_file): return True self.net.set_cookies(self.cookie_file) source = self.net.http_GET(url).content if re.search( '(?:<span class=pro_user>\( Pro \)</span>|<span class="free_user">\( Free \)</span>)', source): common.addon.log('Putlocker account appears to be logged in.') return False else: return True #SiteAuth methods def login(self): if self.login_stale(): url = 'http://www.sockshare.com/authenticate.php?login' source = self.net.http_GET(url).content self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) captcha_img = re.search( '<td>CAPTCHA</td>.+?<td><img src="(.+?)"\s*/><br>', source, re.DOTALL).group(1) captcha_img = 'http://www.sockshare.com%s' % re.sub( '&', '&', captcha_img) local_captcha = os.path.join(common.profile_path, "captcha.img") localFile = open(local_captcha, "wb") localFile.write(self.net.http_GET(captcha_img).content) localFile.close() solver = InputWindow(captcha=local_captcha) solution = solver.get() if solution: common.addon.log('Solution provided: %s' % solution) data = { 'user': self.get_setting('username'), 'pass': self.get_setting('password'), 'captcha_code': solution, 'remember': 1, 'login_submit': 'Login' } response = self.net.http_POST(url, form_data=data) self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) else: common.addon.log('Dialog was canceled') return False if re.search('OK', source): self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) xbmc.executebuiltin( "Notification(' sockshare Pro ', ' Login successful')") return True else: return False else: return True #PluginSettings methods def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting label="Highest Quality" id="%s_quality" ' % self.__class__.__name__ xml += 'type="enum" values="FLV|Maximum" default="0" />\n' xml += '<setting id="%s_login" ' % self.__class__.__name__ xml += 'type="bool" label="login" default="false"/>\n' xml += '<setting id="%s_username" enable="eq(-1,true)" ' % self.__class__.__name__ xml += 'type="text" label="username" default=""/>\n' xml += '<setting id="%s_password" enable="eq(-2,true)" ' % self.__class__.__name__ xml += 'type="text" label="password" option="hidden" default=""/>\n' xml += '<setting id="%s_notify" ' % self.__class__.__name__ xml += 'type="bool" label="Notify on login" default="false"/>\n' return xml
class SockshareResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "sockshare" domains = ["sockshare.com"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'sockshare.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): if self.get_setting('login') == 'true': if self.login_stale(): self.login() self.net.set_cookies(self.cookie_file) web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content if ">This file doesn't exist, or has been removed.<" in html: raise UrlResolver.ResolverError (host+": This file doesn't exist, or has been removed.") elif "This file might have been moved, replaced or deleted.<" in html: raise UrlResolver.ResolverError (host+": 404: This file might have been moved, replaced or deleted.") #Shortcut for logged in users pattern = '<a href="(/.+?)" class="download_file_link" style="margin:0px 0px;">Download File</a>' link = re.search(pattern, html) if link: common.addon.log_debug('Direct link found: %s' % link.group(1)) return 'http://www.sockshare.com%s' % link.group(1) r = re.search('value="([0-9a-f]+?)" name="hash"', html) if r: session_hash = r.group(1) else: raise UrlResolver.ResolverError('sockshare: session hash not found') #post session_hash html = self.net.http_POST(web_url, form_data={'hash': session_hash, 'confirm': 'Continue as Free User'}).content #find playlist code r = re.search('\?stream=(.+?)\'', html) if r: playlist_code = r.group(1) else: r = re.search('key=(.+?)&',html) playlist_code = r.group(1) #find download link q = self.get_setting('quality') #Try to grab highest quality link available if q == '1': #download & return link. if 'sockshare' in host: Avi = "http://sockshare.com/get_file.php?stream=%s&original=1"%playlist_code html = self.net.http_GET(Avi).content final=re.compile('url="(.+?)"').findall(html)[0].replace('&','&') return "%s|User-Agent=%s"%(final,'Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0') #Else grab standard flv link else: xml_url = re.sub('/(file|embed)/.+', '/get_file.php?stream=', web_url) xml_url += playlist_code html = self.net.http_GET(xml_url).content r = re.search('url="(.+?)"', html) if r: flv_url = r.group(1) else: raise UrlResolver.ResolverError('sockshare: stream url not found') return "%s|User-Agent=%s"%(flv_url.replace('&','&'),'Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0') def get_url(self, host, media_id): if 'sockshare' in host: host = 'www.sockshare.com' return 'http://%s/file/%s' % (host, media_id) def get_host_and_id(self, url): r = re.search('//(.+?)/(?:file|embed)/([0-9A-Z]+)', url) if r: return r.groups() else: return False def valid_url(self, url, host): return (re.match('http://(www.)?(sockshare).com/' + '(file|embed)/[0-9A-Z]+', url) or 'sockshare' in host) def login_stale(self): url = 'http://www.sockshare.com/cp.php' if not os.path.exists(self.cookie_file): return True self.net.set_cookies(self.cookie_file) source = self.net.http_GET(url).content if re.search('(?:<span class=pro_user>\( Pro \)</span>|<span class="free_user">\( Free \)</span>)', source): common.addon.log('Putlocker account appears to be logged in.') return False else: return True #SiteAuth methods def login(self): if self.login_stale(): url = 'http://www.sockshare.com/authenticate.php?login' source = self.net.http_GET(url).content self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) captcha_img = re.search('<td>CAPTCHA</td>.+?<td><img src="(.+?)"\s*/><br>', source, re.DOTALL).group(1) captcha_img = 'http://www.sockshare.com%s' %re.sub('&','&',captcha_img) local_captcha = os.path.join(common.profile_path, "captcha.img" ) localFile = open(local_captcha, "wb") localFile.write(self.net.http_GET(captcha_img).content) localFile.close() solver = InputWindow(captcha=local_captcha) solution = solver.get() if solution: common.addon.log('Solution provided: %s' %solution) data = {'user':self.get_setting('username'), 'pass':self.get_setting('password'), 'captcha_code':solution, 'remember':1, 'login_submit':'Login'} response = self.net.http_POST(url, form_data=data) self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) else: common.addon.log('Dialog was canceled') return False if re.search('OK', source): self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) xbmc.executebuiltin("Notification(' sockshare Pro ', ' Login successful')") return True else: return False else: return True #PluginSettings methods def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting label="Highest Quality" id="%s_quality" ' % self.__class__.__name__ xml += 'type="enum" values="FLV|Maximum" default="0" />\n' xml += '<setting id="%s_login" ' % self.__class__.__name__ xml += 'type="bool" label="login" default="false"/>\n' xml += '<setting id="%s_username" enable="eq(-1,true)" ' % self.__class__.__name__ xml += 'type="text" label="username" default=""/>\n' xml += '<setting id="%s_password" enable="eq(-2,true)" ' % self.__class__.__name__ xml += 'type="text" label="password" option="hidden" default=""/>\n' xml += '<setting id="%s_notify" ' % self.__class__.__name__ xml += 'type="bool" label="Notify on login" default="false"/>\n' return xml
class ExashareResolver(Plugin,UrlResolver,PluginSettings): implements = [UrlResolver,SiteAuth,PluginSettings] name = "exashare" domains = [ "exashare.com" ] profile_path = common.profile_path cookie_file = os.path.join(profile_path,'%s.cookies'%name) def __init__(self): p=self.get_setting('priority') or 100 self.priority=int(p) self.net=Net() #UrlResolver methods def get_media_url(self, host, media_id): base_url = 'http://www.' + host + '.com/' + media_id headers = {'User-Agent': common.IE_USER_AGENT, 'Referer': 'http://www.' + host + '.com/'} try: html = self.net.http_GET(base_url).content except: html = self.net.http_GET(base_url, headers=headers).content if re.search("""File Not Found""", html): raise UrlResolver.ResolverError('File not found or removed') POST_Url = re.findall('form method="POST" action=\'(.*)\'',html)[0] POST_Selected = re.findall('form method="POST" action=(.*)</Form>',html,re.DOTALL)[0] POST_Data = {} POST_Data['op'] = re.findall('input type="hidden" name="op" value="(.*)"',POST_Selected)[0] POST_Data['usr_login'] = re.findall('input type="hidden" name="usr_login" value="(.*)"',POST_Selected)[0] POST_Data['id'] = re.findall('input type="hidden" name="id" value="(.*)"',POST_Selected)[0] POST_Data['fname'] = re.findall('input type="hidden" name="fname" value="(.*)"',POST_Selected)[0] POST_Data['referer'] = re.findall('input type="hidden" name="referer" value="(.*)"',POST_Selected)[0] POST_Data['hash'] = re.findall('input type="hidden" name="hash" value="(.*)"',POST_Selected)[0] POST_Data['imhuman'] = 'Proceed to video' try : html2 = self.net.http_POST(POST_Url,POST_Data).content except : html2 = self.net.http_POST(POST_Url,POST_Data,headers=headers).content stream_url = re.findall('file:\s*"([^"]+)"', html2)[0] if self.get_setting('login') == 'true': cookies = {} for cookie in self.net._cj: cookies[cookie.name] = cookie.value if len(cookies) > 0: stream_url = stream_url + '|' + urllib.urlencode({'Cookie': urllib.urlencode(cookies)}) common.addon.log('stream_url : ' + stream_url) xbmc.sleep(7000) return stream_url def get_url(self,host,media_id): return 'http://www.exashare.com/%s' % media_id def get_host_and_id(self,url): r=re.search('http://(?:www.)?(.+?).com/(?:embed\-)?([0-9A-Za-z_]+)(?:\-[0-9]+x[0-9]+.html)?',url) if r: ls=r.groups() return ls else: return False def valid_url(self, url, host): if self.get_setting('enabled')=='false' or self.get_setting('login')=='false': return False return re.match('http://(?:www.)?exashare.com/(?:embed\-)?[0-9A-Za-z]+(?:\-[0-9]+x[0-9]+.html)?',url) or 'exashare.com' in host #SiteAuth methods def needLogin(self): url='http://www.exashare.com/?op=my_account' if not os.path.exists(self.cookie_file): common.addon.log_debug('needLogin returning True') return True self.net.set_cookies(self.cookie_file) source=self.net.http_GET(url).content if re.search("""Your username is for logging in and cannot be changed""",source): common.addon.log_debug('needLogin returning False') return False else: common.addon.log_debug('needLogin returning True') return True def login(self): if (self.get_setting('login')=='true'): if self.needLogin(): common.addon.log('logging in exashare') url='http://www.exashare.com/' data={'login':self.get_setting('username'),'password':self.get_setting('password'),'op':'login','redirect':'/login.html'} headers={'User-Agent':common.IE_USER_AGENT,'Referer':url} try: source=self.net.http_POST(url,data).content except: source=self.net.http_POST(url,data,headers=headers).content if re.search('Your username is for logging in and cannot be changed',source): common.addon.log('logged in exashare') self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) return True else: common.addon.log('error logging in exashare') return False else: if os.path.exists(self.cookie_file): os.remove(self.cookie_file) return False #PluginSettings methods def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting id="ExashareResolver_login" ' xml += 'type="bool" label="Login" default="false"/>\n' xml += '<setting id="ExashareResolver_username" enable="eq(-1,true)" ' xml += 'type="text" label=" username" default=""/>\n' xml += '<setting id="ExashareResolver_password" enable="eq(-2,true)" ' xml += 'type="text" label=" password" option="hidden" default=""/>\n' return xml
def getList(url, pagina): tipo = '' categoria = '' net = Net() net.set_cookies(__COOKIE_FILE__) codigo_fonte = net.http_GET(url, headers=__HEADERS__).content.encode('utf8') if 'kodi_filmes.php' in url: tipo = 'kodi_filmes' elif 'kodi_series.php' in url: tipo = 'kodi_series' elif 'kodi_animes.php' in url: tipo = 'kodi_animes' if 'categoria=' in url: categoria = re.compile('categoria=(.+[0-9])').findall(url)[0] #print codigo_fonte if tipo == 'kodi_filmes': match = re.compile( '<img src="(.+?)" alt=".+?">\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info">\s+<a href="(.+?)" class="movie-name">.+?<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info">\s+<div class="detailed-aux" style="height\: inherit\;line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Realizador:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<\/div>\s+' ).findall(codigo_fonte) elif tipo == 'kodi_series': match = re.compile( '<img src="(.+?)" alt=".+?">\s+<div class="thumb-effect" title=".+?"><\/div>\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info">\s+<a href="(.+?)" class="movie-name">.+?<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info">\s+<div class="detailed-aux" style="height\: 20px\; line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Criador:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<\/div>\s+' ).findall(codigo_fonte) elif tipo == 'kodi_animes': match = re.compile( '<img src="(.+?)" alt=".+?">\s+<div class="thumb-effect" title=".+?"><\/div>\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info">\s+<a href="(.+?)" class="movie-name">.+?<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info">\s+<div class="detailed-aux" style="height\: 20px\; line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Criador:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<\/div>\s+' ).findall(codigo_fonte) #pprint.pprint(match) if tipo == 'kodi_filmes': for imagem, link, genero, ano, nomeOriginal, realizador, elenco in match: try: infoLabels = { 'Title': nomeOriginal.decode('utf8'), 'Year': ano, 'Genre': genero.decode('utf8'), 'Plot': '' } addVideo(nomeOriginal + ' (' + ano + ')', __SITE__ + "kodi_" + link, 3, imagem, 'filme', 0, 0, infoLabels, imagem) except: pass else: for imagem, link, genero, ano, nomeOriginal, realizador, elenco in match: try: infoLabels = { 'Title': nomeOriginal.decode('utf8'), 'Aired': ano, 'Plot': '' } addDir(nomeOriginal + ' (' + ano + ')', __SITE__ + "kodi_" + link, 4, imagem, pagina, 'serie', infoLabels, imagem) except: pass if categoria == '': addDir('Proximo', __SITE__ + tipo + '.php?pagina=' + str(int(pagina) + 1), 1, os.path.join(__ART_FOLDER__, __SKIN__, 'proximo.png'), int(pagina) + 1) else: addDir( 'Proximo', __SITE__ + tipo + '.php?pagina=' + str(int(pagina) + 1) + '&categoria=' + categoria, 1, os.path.join(__ART_FOLDER__, __SKIN__, 'proximo.png'), int(pagina) + 1) vista_filmesSeries()
class sockshareResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "sockshare" domains = ["sockshare.com"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'sockshare.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): if self.get_setting('login') == 'true': if self.login_stale(): self.login() self.net.set_cookies(self.cookie_file) web_url = self.get_url(host, media_id) #find session_hash try: html = self.net.http_GET(web_url).content if ">This file doesn't exist, or has been removed.<" in html: raise Exception( host + ": This file doesn't exist, or has been removed.") elif "This file might have been moved, replaced or deleted.<" in html: raise Exception( host + ": 404: This file might have been moved, replaced or deleted." ) #Shortcut for logged in users pattern = '<a href="(/.+?)" class="download_file_link" style="margin:0px 0px;">Download File</a>' link = re.search(pattern, html) if link: common.addon.log('Direct link found: %s' % link.group(1)) return 'http://www.sockshare.com%s' % link.group(1) r = re.search('value="([0-9a-f]+?)" name="hash"', html) if r: session_hash = r.group(1) else: raise Exception('sockshare: session hash not found') #post session_hash html = self.net.http_POST(web_url, form_data={ 'hash': session_hash, 'confirm': 'Continue as Free User' }).content #find playlist code r = re.search('\?stream=(.+?)\'', html) if r: playlist_code = r.group(1) else: r = re.search('key=(.+?)&', html) playlist_code = r.group(1) #find download link q = self.get_setting('quality') #Try to grab highest quality link available if q == '1': #download & return link. if 'sockshare' in host: Avi = "http://sockshare.com/get_file.php?stream=%s&original=1" % playlist_code html = self.net.http_GET(Avi).content final = re.compile('url="(.+?)"').findall(html)[0].replace( '&', '&') return "%s|User-Agent=%s" % ( final, 'Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0' ) #Else grab standard flv link else: xml_url = re.sub('/(file|embed)/.+', '/get_file.php?stream=', web_url) xml_url += playlist_code html = self.net.http_GET(xml_url).content r = re.search('url="(.+?)"', html) if r: flv_url = r.group(1) else: raise Exception('sockshare: stream url not found') return "%s|User-Agent=%s" % (flv_url.replace( '&', '&' ), 'Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0' ) except urllib2.URLError, e: common.addon.log_error('sockshare: got http error %d fetching %s' % (e.code, web_url)) common.addon.show_small_popup('Error', 'Http error: ' + str(e), 5000, error_logo) return self.unresolvable(code=3, msg=e) except Exception, e: common.addon.log_error('**** sockshare Error occured: %s' % e) common.addon.show_small_popup( title='[B][COLOR white]PUTLOCKER[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % e, delay=5000, image=error_logo) return self.unresolvable(code=0, msg=e)
class ExashareResolver(Plugin,UrlResolver,PluginSettings): implements = [UrlResolver,SiteAuth,PluginSettings] name = "exashare" domains = [ "exashare.com" ] profile_path = common.profile_path cookie_file = os.path.join(profile_path,'%s.cookies'%name) USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:30.0) Gecko/20100101 Firefox/30.0' def __init__(self): p=self.get_setting('priority') or 100 self.priority=int(p) self.net=Net() #UrlResolver methods def get_media_url(self, host, media_id): base_url = 'http://www.' + host + '.com/' + media_id headers = {'User-Agent': self.USER_AGENT, 'Referer': 'http://www.' + host + '.com/'} try: html = self.net.http_GET(base_url).content except: html = self.net.http_GET(base_url, headers=headers).content if re.search("""File Not Found""", html): raise UrlResolver.ResolverError('File not found or removed') POST_Url = re.findall('form method="POST" action=\'(.*)\'',html)[0] POST_Selected = re.findall('form method="POST" action=(.*)</Form>',html,re.DOTALL)[0] POST_Data = {} POST_Data['op'] = re.findall('input type="hidden" name="op" value="(.*)"',POST_Selected)[0] POST_Data['usr_login'] = re.findall('input type="hidden" name="usr_login" value="(.*)"',POST_Selected)[0] POST_Data['id'] = re.findall('input type="hidden" name="id" value="(.*)"',POST_Selected)[0] POST_Data['fname'] = re.findall('input type="hidden" name="fname" value="(.*)"',POST_Selected)[0] POST_Data['referer'] = re.findall('input type="hidden" name="referer" value="(.*)"',POST_Selected)[0] POST_Data['hash'] = re.findall('input type="hidden" name="hash" value="(.*)"',POST_Selected)[0] POST_Data['imhuman'] = 'Proceed to video' try : html2 = self.net.http_POST(POST_Url,POST_Data).content except : html2 = self.net.http_POST(POST_Url,POST_Data,headers=headers).content stream_url = re.findall('file:\s*"([^"]+)"', html2)[0] if self.get_setting('login') == 'true': cookies = {} for cookie in self.net._cj: cookies[cookie.name] = cookie.value if len(cookies) > 0: stream_url = stream_url + '|' + urllib.urlencode({'Cookie': urllib.urlencode(cookies)}) common.addon.log('stream_url : ' + stream_url) xbmc.sleep(7000) return stream_url def get_url(self,host,media_id): return 'http://www.exashare.com/%s' % media_id def get_host_and_id(self,url): r=re.search('http://(?:www.)?(.+?).com/(?:embed\-)?([0-9A-Za-z_]+)(?:\-[0-9]+x[0-9]+.html)?',url) if r: ls=r.groups() return ls else: return False def valid_url(self, url, host): if self.get_setting('enabled')=='false' or self.get_setting('login')=='false': return False return re.match('http://(?:www.)?exashare.com/(?:embed\-)?[0-9A-Za-z]+(?:\-[0-9]+x[0-9]+.html)?',url) or 'exashare.com' in host #SiteAuth methods def needLogin(self): url='http://www.exashare.com/?op=my_account' if not os.path.exists(self.cookie_file): common.addon.log_debug('needLogin returning True') return True self.net.set_cookies(self.cookie_file) source=self.net.http_GET(url).content if re.search("""Your username is for logging in and cannot be changed""",source): common.addon.log_debug('needLogin returning False') return False else: common.addon.log_debug('needLogin returning True') return True def login(self): if (self.get_setting('login')=='true'): if self.needLogin(): common.addon.log('logging in exashare') url='http://www.exashare.com/' data={'login':self.get_setting('username'),'password':self.get_setting('password'),'op':'login','redirect':'/login.html'} headers={'User-Agent':self.USER_AGENT,'Referer':url} try: source=self.net.http_POST(url,data).content except: source=self.net.http_POST(url,data,headers=headers).content if re.search('Your username is for logging in and cannot be changed',source): common.addon.log('logged in exashare') self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) return True else: common.addon.log('error logging in exashare') return False else: if os.path.exists(self.cookie_file): os.remove(self.cookie_file) return False #PluginSettings methods def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting id="ExashareResolver_login" ' xml += 'type="bool" label="Login" default="false"/>\n' xml += '<setting id="ExashareResolver_username" enable="eq(-1,true)" ' xml += 'type="text" label=" username" default=""/>\n' xml += '<setting id="ExashareResolver_password" enable="eq(-2,true)" ' xml += 'type="text" label=" password" option="hidden" default=""/>\n' return xml
class EcostreamResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "ecostream" domains = ["ecostream.tv"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, "ecostream.cookies") def __init__(self): p = self.get_setting("priority") or 100 self.priority = int(p) self.net = Net() self.pattern = "http://((?:www.)?ecostream.tv)/(?:stream|embed)?/([0-9a-zA-Z]+).html" def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) try: html = self.net.http_GET(web_url).content if re.search(">File not found!<", html): msg = "File Not Found or removed" common.addon.show_small_popup( title="[B][COLOR white]ECOSTREAM[/COLOR][/B]", msg="[COLOR red]%s[/COLOR]" % msg, delay=5000, image=error_logo, ) return self.unresolvable(code=1, msg=msg) self.net.save_cookies(self.cookie_file) web_url = "http://www.ecostream.tv/js/ecos.js" js = self.net.http_GET(web_url).content r = re.search("\$\.post\('([^']+)'[^;]+'#auth'\).html\(''\)", js) if not r: raise Exception("Posturl not found") post_url = r.group(1) r = re.search('data\("tpm",([^\)]+)\);', js) if not r: raise Exception("Postparameterparts not found") post_param_parts = r.group(1).split("+") found_parts = [] for part in post_param_parts: pattern = "%s='([^']+)'" % part.strip() r = re.search(pattern, html) if not r: raise Exception("Formvaluepart not found") found_parts.append(r.group(1)) tpm = "".join(found_parts) # emulate click on button "Start Stream" postHeader = {"Referer": web_url, "X-Requested-With": "XMLHttpRequest"} web_url = "http://www.ecostream.tv" + post_url self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, {"id": media_id, "tpm": tpm}, headers=postHeader).content sPattern = '"url":"([^"]+)"' r = re.search(sPattern, html) if not r: raise Exception("Unable to resolve Ecostream link. Filelink not found.") sLinkToFile = "http://www.ecostream.tv" + r.group(1) return urllib2.unquote(sLinkToFile) except urllib2.URLError, e: common.addon.log_error(self.name + ": got http error %d fetching %s" % (e.code, web_url)) common.addon.show_small_popup("Error", "Http error: " + str(e), 8000, error_logo) return self.unresolvable(code=3, msg="Exception: %s" % e) except Exception, e: common.addon.log("**** Ecostream Error occured: %s" % e) common.addon.show_small_popup( title="[B][COLOR white]ECOSTREAM[/COLOR][/B]", msg="[COLOR red]%s[/COLOR]" % e, delay=5000, image=error_logo, ) return self.unresolvable(code=0, msg="Exception: %s" % e)
class EcostreamResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "ecostream" domains = ["ecostream.tv"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, "ecostream.cookies") def __init__(self): p = self.get_setting("priority") or 100 self.priority = int(p) self.net = Net() self.pattern = "http://((?:www.)?ecostream.tv)/(?:stream|embed)?/([0-9a-zA-Z]+).html" def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content if re.search(">File not found!<", html): raise UrlResolver.ResolverError("File Not Found or removed") self.net.save_cookies(self.cookie_file) web_url = "http://www.ecostream.tv/js/ecoss.js" js = self.net.http_GET(web_url).content r = re.search("\$\.post\('([^']+)'[^;]+'#auth'\).html\(''\)", js) if not r: raise UrlResolver.ResolverError("Posturl not found") post_url = r.group(1) r = re.search('data\("tpm",([^\)]+)\);', js) if not r: raise UrlResolver.ResolverError("Postparameterparts not found") post_param_parts = r.group(1).split("+") found_parts = [] for part in post_param_parts: pattern = "%s='([^']+)'" % part.strip() r = re.search(pattern, html) if not r: raise UrlResolver.ResolverError("Formvaluepart not found") found_parts.append(r.group(1)) tpm = "".join(found_parts) # emulate click on button "Start Stream" postHeader = {"Referer": web_url, "X-Requested-With": "XMLHttpRequest"} web_url = "http://www.ecostream.tv" + post_url self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, {"id": media_id, "tpm": tpm}, headers=postHeader).content sPattern = '"url":"([^"]+)"' r = re.search(sPattern, html) if not r: raise UrlResolver.ResolverError("Unable to resolve Ecostream link. Filelink not found.") sLinkToFile = "http://www.ecostream.tv" + r.group(1) return urllib2.unquote(sLinkToFile) def get_url(self, host, media_id): return "http://www.ecostream.tv/stream/%s.html" % (media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url.replace("embed", "stream")) if r: return r.groups() else: return False def valid_url(self, url, host): if self.get_setting("enabled") == "false": return False return re.match(self.pattern, url) or self.name in host
class RealDebridResolver(Plugin, UrlResolver, SiteAuth, PluginSettings): implements = [UrlResolver, SiteAuth, PluginSettings] name = "realdebrid" domains = ["*"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, '%s.cookies' % name) media_url = None def __init__(self): p = self.get_setting('priority') or 1 self.priority = int(p) self.net = Net() self.hosters = None self.hosts = None try: os.makedirs(os.path.dirname(self.cookie_file)) except OSError: pass # UrlResolver methods def get_media_url(self, host, media_id): dialog = xbmcgui.Dialog() url = 'https://real-debrid.com/ajax/unrestrict.php?link=%s' % media_id.replace( '|User-Agent=Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0', '') source = self.net.http_GET(url).content jsonresult = json.loads(source) if 'generated_links' in jsonresult: generated_links = jsonresult['generated_links'] if len(generated_links) == 1: return generated_links[0][2].encode('utf-8') line = [] for link in generated_links: extension = link[0].split('.')[-1] line.append(extension.encode('utf-8')) result = dialog.select('Choose the link', line) if result != -1: link = generated_links[result][2] return link.encode('utf-8') else: raise UrlResolver.ResolverError('No generated_link') elif 'main_link' in jsonresult: return jsonresult['main_link'].encode('utf-8') else: if 'message' in jsonresult: raise UrlResolver.ResolverError( jsonresult['message'].encode('utf-8')) else: raise UrlResolver.ResolverError( 'No generated_link and no main_link') def get_url(self, host, media_id): return media_id def get_host_and_id(self, url): return 'www.real-debrid.com', url def get_all_hosters(self): if self.hosters is None: try: url = 'http://www.real-debrid.com/api/regex.php?type=all' response = self.net.http_GET(url).content.lstrip('/').rstrip( '/g') delim = '/g,/|/g\|-\|/' self.hosters = [ re.compile(host) for host in re.split(delim, response) ] except: self.hosters = [] common.addon.log_debug('RealDebrid hosters : %s' % self.hosters) return self.hosters def get_hosts(self): if self.hosts is None: try: url = 'https://real-debrid.com/api/hosters.php' response = self.net.http_GET(url).content response = response[1:-1] self.hosts = response.split('","') except: self.hosts = [] common.addon.log_debug('RealDebrid hosts : %s' % self.hosts) def valid_url(self, url, host): if self.get_setting('enabled') == 'false': return False if self.get_setting('login') == 'false': return False common.addon.log_debug('in valid_url %s : %s' % (url, host)) if url: self.get_all_hosters() for host in self.hosters: # common.addon.log_debug('RealDebrid checking host : %s' %str(host)) if re.search(host, url): common.addon.log_debug('RealDebrid Match found') return True elif host: self.get_hosts() if host in self.hosts or any(item in host for item in self.hosts): return True return False def checkLogin(self): url = 'https://real-debrid.com/api/account.php' if not os.path.exists(self.cookie_file): return True self.net.set_cookies(self.cookie_file) source = self.net.http_GET(url).content common.addon.log_debug(source) if re.search('expiration', source): common.addon.log_debug('checkLogin returning False') return False else: common.addon.log_debug('checkLogin returning True') return True # SiteAuth methods def login(self): if self.checkLogin(): try: common.addon.log_debug( 'Need to login since session is invalid') import hashlib login_data = urllib.urlencode({ 'user': self.get_setting('username'), 'pass': hashlib.md5(self.get_setting('password')).hexdigest() }) url = 'https://real-debrid.com/ajax/login.php?' + login_data source = self.net.http_GET(url).content if re.search('OK', source): self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) return True except: common.addon.log_debug('error with http_GET') dialog = xbmcgui.Dialog() dialog.ok(' Real-Debrid ', ' Unexpected error, Please try again.', '', '') else: return False else: return True # PluginSettings methods def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting id="%s_login" ' % (self.__class__.__name__) xml += 'type="bool" label="login" default="false"/>\n' xml += '<setting id="%s_username" enable="eq(-1,true)" ' % ( self.__class__.__name__) xml += 'type="text" label="username" default=""/>\n' xml += '<setting id="%s_password" enable="eq(-2,true)" ' % ( self.__class__.__name__) xml += 'type="text" label="password" option="hidden" default=""/>\n' return xml # to indicate if this is a universal resolver def isUniversal(self): return True
def pesquisa(): net = Net() net.set_cookies(__COOKIE_FILE__) dialog = xbmcgui.Dialog() server = dialog.select(u'Onde quer pesquisar?', ['Filmes', 'Series', 'Animes']) if server == 0: site = __SITE__ + 'kodi_procurarf.php' elif server == 1: site = __SITE__ + 'kodi_procurars.php' elif server == 2: site = __SITE__ + 'kodi_procuraranime.php' teclado = xbmc.Keyboard('', 'O que quer pesquisar?') teclado.doModal() if teclado.isConfirmed(): strPesquisa = teclado.getText() dados = {'searchBox': strPesquisa} codigo_fonte = net.http_POST( site, form_data=dados, headers=__HEADERS__).content.encode('utf8') if server == 1 or server == 2: match = re.compile( '<img src="(.+?)" alt="(.+?)">\s+<div class="thumb-effect" title="(.+?)"><\/div>\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info" style="width\: 80\%\;">\s+<a href="(.+?)" class="movie-name">(.+?)<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info">\s+<div class="detailed-aux" style="height\: 20px\; line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Escritor:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>' ).findall(codigo_fonte) elif server == 0: match = re.compile( '<img src="(.+?)" alt="(.+?)">\s+<div class="thumb-effect" title="(.+?)"><\/div>\s+<\/a>\s+<\/div>\s+<\/div>\s+<div class="movie-info" style="width\: 80\%\;">\s+<a href="(.+?)" class="movie-name">(.+?)<\/a>\s+<div class="clear"><\/div>\s+<div class="movie-detailed-info" style="width\: initial\;">\s+<div class="detailed-aux" style="height\: 20px\; line-height\: 20px\;">\s+<span class="genre">(.+?)<\/span>\s+<span class="year">\s+<span>\(<\/span>(.+?)<span>\)<\/span><\/span>\s+<span class="original-name">\s+-\s+"(.+?)"<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Realizador:\s+<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>\s+<div class="detailed-aux">\s+<span class="director-caption">Elenco:<\/span>\s+<span class="director">(.+?)<\/span>\s+<\/div>' ).findall(codigo_fonte) pprint.pprint(match) if match != []: for imagem, nome1, nome2, link, nome3, genero, ano, nomeOriginal, realizador, elenco in match: if server == 0: try: infoLabels = { 'Title': nomeOriginal.decode('utf8'), 'Year': ano, 'Genre': genero.decode('utf8'), 'Plot': '-' } addVideo( nomeOriginal.decode('utf8') + ' (' + ano + ')', __SITE__ + "kodi_" + link, 3, imagem, 'filme', 0, 0, infoLabels, imagem) except: pass elif server == 1 or server == 2: print nomeOriginal infoLabels = { 'Title': nomeOriginal.decode('utf8'), 'Aired': ano, 'Plot': '-' } addDir(nomeOriginal + ' (' + ano + ')', __SITE__ + "kodi_" + link, 4, imagem, pagina, 'serie', infoLabels, imagem) else: addDir('Voltar', 'url', None, os.path.join(__ART_FOLDER__, __SKIN__, 'retroceder.png'), 0) vista_filmesSeries()
def Search(section, query, imdb): html = GetURL(BASE_URL) r = re.search('input type="hidden" name="key" value="([0-9a-f]*)"', html).group(1) search_url = BASE_URL + '/index.php?search_keywords=' search_url += urllib.quote_plus(query) search_url += '&key=' + r if section == 'tv': search_url += '&search_section=2' video_type = 'tvshow' else: video_type = 'movie' html = GetURL(search_url) r = 'class="index_item.+?href="(.+?)" title="Watch (.+?)"?\(?([0-9]{4})?\)?"?>.+?src="(.+?)"' regex = re.search(r, html, re.DOTALL) if regex: url, title, year, thumb = regex.groups() net = Net() cookiejar = addon.get_profile() cookiejar = os.path.join(cookiejar, 'cookies') net.set_cookies(cookiejar) html = net.http_GET(BASE_URL + url).content net.save_cookies(cookiejar) adultregex = '<div class="offensive_material">.+<a href="(.+)">I understand' r = re.search(adultregex, html, re.DOTALL) if r: addon.log('Adult content url detected') adulturl = BASE_URL + r.group(1) headers = {'Referer': url} net.set_cookies(cookiejar) html = net.http_GET(adulturl, headers=headers).content net.save_cookies(cookiejar) for version in re.finditer( '<table[^\n]+?class="movie_version(?: movie_version_alt)?">(.*?)</table>', html, re.DOTALL | re.IGNORECASE): for s in re.finditer( 'quality_(?!sponsored|unknown)(.*?)></span>.*?' + 'url=(.*?)&(?:amp;)?domain=(.*?)&(?:amp;)?(.*?)' + '"version_veiws"> ([\d]+) views</', version.group(1), re.DOTALL): q, url, host, parts, views = s.groups() q = q.upper() url = url.decode('base-64') host = host.decode('base-64') disp_title = '[%s] %s (%s views)' % (q, host, views) result = {'tag': tag, 'provider_name': display_name} qs = { 'url': url, 'title': title, 'img': thumb, 'year': year, 'imdbnum': imdb, 'video_type': video_type, 'strm': True, 'mode': 'PlaySource' } result[ 'li_url'] = 'plugin://plugin.video.1channel/?%s' % urllib.urlencode( qs) print result['li_url'] result['info_labels'] = {'title': disp_title} yield result
class EcostreamResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "ecostream" profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'ecostream.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() self.pattern = 'http://((?:www.)?ecostream.tv)/(?:stream|embed)?/([0-9a-zA-Z]+).html' def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) try: html = self.net.http_GET(web_url).content if re.search('>File not found!<', html): msg = 'File Not Found or removed' common.addon.show_small_popup( title='[B][COLOR white]ECOSTREAM[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % msg, delay=5000, image=error_logo) return self.unresolvable(code=1, msg=msg) self.net.save_cookies(self.cookie_file) web_url = 'http://www.ecostream.tv/js/ecos.js' js = self.net.http_GET(web_url).content r = re.search("\$\.post\('([^']+)'[^;]+'#auth'\).html\(''\)", js) if not r: raise Exception('Posturl not found') post_url = r.group(1) r = re.search('data\("tpm",([^\)]+)\);', js) if not r: raise Exception('Postparameterparts not found') post_param_parts = r.group(1).split('+') found_parts = [] for part in post_param_parts: pattern = "%s='([^']+)'" % part.strip() r = re.search(pattern, html) if not r: raise Exception('Formvaluepart not found') found_parts.append(r.group(1)) tpm = ''.join(found_parts) # emulate click on button "Start Stream" postHeader = ({ 'Referer': web_url, 'X-Requested-With': 'XMLHttpRequest' }) web_url = 'http://www.ecostream.tv' + post_url self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, { 'id': media_id, 'tpm': tpm }, headers=postHeader).content sPattern = '"url":"([^"]+)"' r = re.search(sPattern, html) if not r: raise Exception( 'Unable to resolve Ecostream link. Filelink not found.') sLinkToFile = 'http://www.ecostream.tv' + r.group(1) return urllib2.unquote(sLinkToFile) except urllib2.URLError, e: common.addon.log_error(self.name + ': got http error %d fetching %s' % (e.code, web_url)) common.addon.show_small_popup('Error', 'Http error: ' + str(e), 8000, error_logo) return self.unresolvable(code=3, msg='Exception: %s' % e) except Exception, e: common.addon.log('**** Ecostream Error occured: %s' % e) common.addon.show_small_popup( title='[B][COLOR white]ECOSTREAM[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % e, delay=5000, image=error_logo) return self.unresolvable(code=0, msg='Exception: %s' % e)
class sockshareResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "sockshare" profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'sockshare.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() def get_media_url(self, host, media_id): if self.get_setting('login') == 'true': if self.login_stale(): self.login() self.net.set_cookies(self.cookie_file) web_url = self.get_url(host, media_id) #find session_hash try: html = self.net.http_GET(web_url).content if ">This file doesn't exist, or has been removed.<" in html: raise Exception (host+": This file doesn't exist, or has been removed.") elif "This file might have been moved, replaced or deleted.<" in html: raise Exception (host+": 404: This file might have been moved, replaced or deleted.") #Shortcut for logged in users pattern = '<a href="(/.+?)" class="download_file_link" style="margin:0px 0px;">Download File</a>' link = re.search(pattern, html) if link: common.addon.log('Direct link found: %s' % link.group(1)) return 'http://www.sockshare.com%s' % link.group(1) r = re.search('value="([0-9a-f]+?)" name="hash"', html) if r: session_hash = r.group(1) else: raise Exception ('sockshare: session hash not found') #post session_hash html = self.net.http_POST(web_url, form_data={'hash': session_hash, 'confirm': 'Continue as Free User'}).content #find playlist code r = re.search('\?stream=(.+?)\'', html) if r: playlist_code = r.group(1) else: r = re.search('key=(.+?)&',html) playlist_code = r.group(1) #find download link q = self.get_setting('quality') #Try to grab highest quality link available if q == '1': #download & return link. if 'sockshare' in host: Avi = "http://sockshare.com/get_file.php?stream=%s&original=1"%playlist_code html = self.net.http_GET(Avi).content final=re.compile('url="(.+?)"').findall(html)[0].replace('&','&') return "%s|User-Agent=%s"%(final,'Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0') #Else grab standard flv link else: xml_url = re.sub('/(file|embed)/.+', '/get_file.php?stream=', web_url) xml_url += playlist_code html = self.net.http_GET(xml_url).content r = re.search('url="(.+?)"', html) if r: flv_url = r.group(1) else: raise Exception ('sockshare: stream url not found') return "%s|User-Agent=%s"%(flv_url.replace('&','&'),'Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20rv%3A11.0)%20Gecko%2F20100101%20Firefox%2F11.0') except urllib2.URLError, e: common.addon.log_error('sockshare: got http error %d fetching %s' % (e.code, web_url)) common.addon.show_small_popup('Error','Http error: '+str(e), 5000, error_logo) return self.unresolvable(code=3, msg=e) except Exception, e: common.addon.log_error('**** sockshare Error occured: %s' % e) common.addon.show_small_popup(title='[B][COLOR white]PUTLOCKER[/COLOR][/B]', msg='[COLOR red]%s[/COLOR]' % e, delay=5000, image=error_logo) return self.unresolvable(code=0, msg=e)
class MovreelResolver(Plugin, UrlResolver, SiteAuth, PluginSettings): implements = [UrlResolver, SiteAuth, PluginSettings] name = "movreel" profile_path = common.profile_path cookie_file = os.path.join(profile_path, '%s.cookies' % name) def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() try: os.makedirs(os.path.dirname(self.cookie_file)) except OSError: pass def login(self): if self.get_setting('login') == 'true': loginurl = 'http://movreel.com/login.html' data = {'op': 'login', 'login': self.get_setting('username'), 'password': self.get_setting('password')} html = net.http_POST(loginurl, data).content if re.search('op=logout', html): common.addon.log('LOGIN SUCCESSFUL') self.net.save_cookies(self.cookie_file) return True else: common.addon.log('LOGIN FAILED') return False else: common.addon.log('No account info entered') return False def get_media_url(self, host, media_id): try: self.net.set_cookies(self.cookie_file) url = self.get_url(host, media_id) html = self.net.http_GET(url).content dialog = xbmcgui.DialogProgress() dialog.create('Resolving', 'Resolving Movreel Link...') dialog.update(0) common.addon.log('Movreel - Requesting GET URL: %s' % url) html = net.http_GET(url).content dialog.update(33) if re.search('This server is in maintenance mode', html): common.addon.log('***** Movreel - Site reported maintenance mode') raise Exception('File is currently unavailable on the host') op = re.search('<input type="hidden" name="op" value="(.+?)">', html).group(1) postid = re.search('<input type="hidden" name="id" value="(.+?)">', html).group(1) method_free = re.search('<input type="(submit|hidden)" name="method_free" (style=".*?" )*value="(.*?)">', html).group(3) method_premium = re.search('<input type="(hidden|submit)" name="method_premium" (style=".*?" )*value="(.*?)">', html).group(3) if method_free: usr_login = '' fname = re.search('<input type="hidden" name="fname" value="(.+?)">', html).group(1) data = {'op': op, 'usr_login': usr_login, 'id': postid, 'referer': url, 'fname': fname, 'method_free': method_free} else: rand = re.search('<input type="hidden" name="rand" value="(.+?)">', html).group(1) data = {'op': op, 'id': postid, 'referer': url, 'rand': rand, 'method_premium': method_premium} print 'Movreel - Requesting POST URL: %s DATA: %s' % (url, data) html = net.http_POST(url, data).content if method_free: if re.search('<p class="err">.+?</p>', html): common.addon.log('***** Download limit reached') errortxt = re.search('<p class="err">(.+?)</p>', html).group(1) raise Exception(errortxt) dialog.update(66) op = re.search('<input type="hidden" name="op" value="(.+?)">', html).group(1) postid = re.search('<input type="hidden" name="id" value="(.+?)">', html).group(1) rand = re.search('<input type="hidden" name="rand" value="(.+?)">', html).group(1) method_free = re.search('<input type="hidden" name="method_free" value="(.+?)">', html).group(1) data = {'op': op, 'id': postid, 'rand': rand, 'referer': url, 'method_free': method_free, 'down_direct': 1} common.addon.log('Movreel - Requesting POST URL: %s DATA: %s' % (url, data)) html = net.http_POST(url, data).content dialog.update(100) dialog.close() link = re.search('<a id="lnk_download" href="(.+?)">Download Original Video</a>', html, re.DOTALL).group(1) return link except Exception, e: common.addon.log_error('**** Movreel Error occured: %s' % e) return False
class PurevidResolver(Plugin, UrlResolver, SiteAuth, PluginSettings): implements = [UrlResolver, SiteAuth, PluginSettings] name = "purevid" domains = ["purevid.com"] pattern = '(?://|\.)(purevid\.com)/v/([0-9A-Za-z]+)' profile_path = common.profile_path pv_cookie_file = os.path.join(profile_path, '%s.cookies' % name) def __init__(self): p = self.get_setting('priority') or 1 self.priority = int(p) self.net = Net() try: os.makedirs(os.path.dirname(self.pv_cookie_file)) except OSError: pass def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content data = json.loads(html) if self.get_setting('quality') == 'FLV': url = data['clip']['bitrates'][0]['url'] else: url = data['clip']['bitrates'][-1]['url'] params = '' for val in data['plugins']['lighttpd']['params']: params += val['name'] + '=' + val['value'] + '&' url = url + '?' + params[:-1] cookies = {} for cookie in self.net._cj: cookies[cookie.name] = cookie.value url = url + '|' + urllib.urlencode({'Cookie': urllib.urlencode(cookies)}) common.addon.log_debug(url) return url def get_url(self, host, media_id): return 'http://www.purevid.com/?m=video_info_embed_flv&id=%s' % media_id def get_host_and_id(self, url): r = re.search(self.pattern, url) if r: return r.groups() else: return False def valid_url(self, url, host): return re.search(self.pattern, url) or self.name in host def needLogin(self): url = 'http://www.purevid.com/?m=main' if not os.path.exists(self.pv_cookie_file): return True self.net.set_cookies(self.pv_cookie_file) source = self.net.http_GET(url).content common.addon.log_debug(source.encode('utf-8')) if re.search("""<span>Welcome <strong>.*</strong></span>""", source) : common.addon.log_debug('needLogin returning False') return False else : common.addon.log_debug('needLogin returning True') return True def login(self): if self.needLogin() : common.addon.log('login to purevid') url = 'http://www.purevid.com/?m=login' data = {'username' : self.get_setting('username'), 'password' : self.get_setting('password')} source = self.net.http_POST(url,data).content if re.search(self.get_setting('username'), source): self.net.save_cookies(self.pv_cookie_file) self.net.set_cookies(self.pv_cookie_file) return True else: return False else : return True def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting id="PurevidResolver_login" ' xml += 'type="bool" label="Login" default="false"/>\n' xml += '<setting id="PurevidResolver_username" enable="eq(-1,true)" ' xml += 'type="text" label=" username" default=""/>\n' xml += '<setting id="PurevidResolver_password" enable="eq(-2,true)" ' xml += 'type="text" label=" password" option="hidden" default=""/>\n' xml += '<setting label="Video quality" id="PurevidResolver_quality" ' xml += 'type="labelenum" values="FLV|Maximum" default="Maximum" />\n' xml += '<setting label="This plugin calls the Purevid urlresolver - ' xml += 'change settings there." type="lsep" />\n' return xml
import storageserverdummy as StorageServer BASE_URL = "http://www.flyinhd.com" LANGS = [ 'tamil', 'hindi', 'telugu' ] addonId = 'plugin.video.flyinhd' addon = Addon( addonId, sys.argv ) addonPath = xbmc.translatePath( addon.get_profile() ) cookiePath = os.path.join( addonPath, 'cookies' ) cookieFile = os.path.join( cookiePath, "cookies.txt" ) net = Net() if not os.path.exists(cookiePath): os.makedirs(cookiePath) else: net.set_cookies( cookieFile ) cache = StorageServer.StorageServer( addonId ) cache.dbg = True cache.dbglevel = 10 def parseMoviePage( lang ): print "parseMoviePage, lang:" + lang url = BASE_URL + '/?lang=' + lang response = net.http_GET( url ) net.save_cookies( cookieFile ) movieIndex = {} url = BASE_URL + '/movies' response = net.http_GET( url ) net.save_cookies( cookieFile )
def GetSources(url, title='', img='', update='', year='', imdbnum='', video_type='', season='', episode=''): #10 url = urllib.unquote(url) print 'Title befor unquote %s' % title #title = urllib.unquote(title) #title = title.decode('utf-8') print 'Title is %s' % title print 'Playing: %s' % url net = Net() cookiejar = ADDON.get_profile() cookiejar = os.path.join(cookiejar,'cookies') html = net.http_GET(url).content net.save_cookies(cookiejar) adultregex = '<div class="offensive_material">.+<a href="(.+)">I understand' r = re.search(adultregex, html, re.DOTALL) if r: print 'Adult content url detected' adulturl = BASE_URL + r.group(1) headers = {'Referer': url} net.set_cookies(cookiejar) html = net.http_GET(adulturl, headers=headers).content #.encode('utf-8', 'ignore') if update: imdbregex = 'mlink_imdb">.+?href="http://www.imdb.com/title/(tt[0-9]{7})"' r = re.search(imdbregex, html) if r: imdbnum = r.group(1) metaget.update_meta('movie',title,imdb_id='', new_imdb_id=imdbnum,year=year) titleregex = '<meta property="og:title" content="(.*?)">' r = re.search(titleregex,html) title = r.group(1) sources = [] for version in re.finditer('<table[^\n]+?class="movie_version(?: movie_version_alt)?">(.*?)</table>', html, re.DOTALL|re.IGNORECASE): for s in re.finditer('quality_(?!sponsored|unknown)(.*?)></span>.*?'+ 'url=(.*?)&(?:amp;)?domain=(.*?)&(?:amp;)?(.*?)'+ '"version_veiws">(.*?)</', version.group(1), re.DOTALL): q, url, host,parts, views = s.groups() r = '\[<a href=".*?url=(.*?)&(?:amp;)?.*?".*?>(part [0-9]*)</a>\]' additional_parts = re.findall(r, parts, re.DOTALL|re.IGNORECASE) verified = s.group(0).find('star.gif') > -1 label = '[%s] ' % q.upper() label += host.decode('base-64') if additional_parts: label += ' Part 1' if verified: label += ' [verified]' label += ' (%s)' % views.strip() url = url.decode('base-64') host = host.decode('base-64') print 'Source found:\n quality %s\n url %s\n host %s\n views %s\n' % (q, url, host, views) try: hosted_media = urlresolver.HostedMediaFile(url=url, title=label) sources.append(hosted_media) if additional_parts: for part in additional_parts: label = ' [%s] ' % q.upper() label += host label += ' ' + part[1] if verified: label += ' [verified]' #label += ' (%s)' % views.strip() url = part[0].decode('base-64') hosted_media = urlresolver.HostedMediaFile(url=url, title=label) sources.append(hosted_media) except: print 'Error while trying to resolve %s' % url source = urlresolver.choose_source(sources) if source: stream_url = source.resolve() playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) playlist.clear() listitem = xbmcgui.ListItem(title, iconImage=img, thumbnailImage=img) playlist.add(url=stream_url, listitem=listitem) xbmc.Player().play(playlist) if ADDON.get_setting('auto-watch') == 'true': Autowatch()
class EcostreamResolver(Plugin, UrlResolver, PluginSettings): implements = [UrlResolver, PluginSettings] name = "ecostream" domains = [ "ecostream.tv" ] profile_path = common.profile_path cookie_file = os.path.join(profile_path, 'ecostream.cookies') def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() self.pattern = 'http://((?:www.)?ecostream.tv)/(?:stream|embed)?/([0-9a-zA-Z]+).html' def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content if re.search('>File not found!<', html): raise UrlResolver.ResolverError('File Not Found or removed') self.net.save_cookies(self.cookie_file) web_url = 'http://www.ecostream.tv/js/ecoss.js' js = self.net.http_GET(web_url).content r = re.search("\$\.post\('([^']+)'[^;]+'#auth'\).html\(''\)", js) if not r: raise UrlResolver.ResolverError('Posturl not found') post_url = r.group(1) r = re.search('data\("tpm",([^\)]+)\);', js) if not r: raise UrlResolver.ResolverError('Postparameterparts not found') post_param_parts = r.group(1).split('+') found_parts = [] for part in post_param_parts: pattern = "%s='([^']+)'" % part.strip() r = re.search(pattern, html) if not r: raise UrlResolver.ResolverError('Formvaluepart not found') found_parts.append(r.group(1)) tpm = ''.join(found_parts) # emulate click on button "Start Stream" postHeader = ({'Referer': web_url, 'X-Requested-With': 'XMLHttpRequest'}) web_url = 'http://www.ecostream.tv' + post_url self.net.set_cookies(self.cookie_file) html = self.net.http_POST(web_url, {'id': media_id, 'tpm': tpm}, headers=postHeader).content sPattern = '"url":"([^"]+)"' r = re.search(sPattern, html) if not r: raise UrlResolver.ResolverError('Unable to resolve Ecostream link. Filelink not found.') sLinkToFile = 'http://www.ecostream.tv' + r.group(1) return urllib2.unquote(sLinkToFile) def get_url(self, host, media_id): return 'http://www.ecostream.tv/stream/%s.html' % (media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url.replace('embed','stream')) if r: return r.groups() else: return False def valid_url(self, url, host): if self.get_setting('enabled') == 'false': return False return re.match(self.pattern, url) or self.name in host
class YouWatchResolver(Plugin, UrlResolver, SiteAuth, PluginSettings): implements = [UrlResolver, SiteAuth, PluginSettings] name = "youwatch" domains = ["youwatch.org"] profile_path = common.profile_path cookie_file = os.path.join(profile_path, '%s.cookies' % name) def __init__(self): p = self.get_setting('priority') or 100 self.priority = int(p) self.net = Net() try: os.makedirs(os.path.dirname(self.cookie_file)) except OSError: pass def get_media_url(self, host, media_id): base_url = 'http://' + host + '.org/embed-' + media_id + '.html' soup = self.net.http_GET(base_url).content html = soup.decode('utf-8') jscript = re.findall("""function\(p,a,c,k,e,d\).*return p\}(.*)\)""", html) if jscript: lsParam = eval(jscript[0].encode('utf-8')) flashvars = self.exec_javascript(lsParam) r = re.findall('file:"(.*)",provider', flashvars) if r: stream_url = r[0].encode('utf-8') if self.get_setting('login') == 'true': cookies = {} for cookie in self.net._cj: cookies[cookie.name] = cookie.value stream_url = stream_url + '|' + urllib.urlencode( {'Cookie': urllib.urlencode(cookies)}) common.addon.log_debug('stream_URL : ' + stream_url) else: raise UrlResolver.ResolverError('File Not Found or removed') else: raise UrlResolver.ResolverError('File Not Found or removed') return stream_url def get_url(self, host, media_id): return 'http://youwatch.org/%s' % media_id def get_host_and_id(self, url): r = re.search('http://(www.)?(.+?).org/embed-(.+?)-[0-9A-Za-z]+.html', url) if not r: r = re.search('http://(www.)?(.+?).org/([0-9A-Za-z]+)', url) if r: ls = r.groups() if ls[0] == 'www.' or ls[0] == None: ls = (ls[1], ls[2]) return ls else: return False def exec_javascript(self, lsParam): return re.sub('[a-zA-Z0-9]+', Base36(lsParam[3]).param36decode, str(lsParam[0])) def valid_url(self, url, host): if self.get_setting('enabled') == 'false': return False return re.match( 'http://(www.)?youwatch.org/(embed-(.+?).html|[0-9A-Za-z]+)', url) or 'youwatch' in host def login(self): if self.get_setting('login') == 'true': try: common.addon.log_debug('login to youwatch') url = 'http://youwatch.org' data = { 'op': 'login', 'login': self.get_setting('username'), 'password': self.get_setting('password') } source = self.net.http_POST(url, data).content if re.search('<b>Registred</b>', source): self.net.save_cookies(self.cookie_file) self.net.set_cookies(self.cookie_file) return True elif re.search('Incorrect Login or Password', source): common.addon.log_error( '**** Youwatch Error occured on login: Incorrect Login or Password' ) return False else: common.addon.log_error( '**** Youwatch Error occured on login: not logged') return False except Exception as e: common.addon.log_error( '**** Youwatch Error occured on login: %s' % e) else: return True def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting id="%s_login" ' % (self.__class__.__name__) xml += 'type="bool" label="Login" default="false"/>\n' xml += '<setting id="%s_username" enable="eq(-1,true)" ' % ( self.__class__.__name__) xml += 'type="text" label=" username" default=""/>\n' xml += '<setting id="%s_password" enable="eq(-2,true)" ' % ( self.__class__.__name__) xml += 'type="text" label=" password" option="hidden" default=""/>\n' return xml
class PurevidResolver(Plugin, UrlResolver, SiteAuth, PluginSettings): implements = [UrlResolver, SiteAuth, PluginSettings] name = "purevid" domains = ["purevid.com"] profile_path = common.profile_path pv_cookie_file = os.path.join(profile_path, '%s.cookies' % name) def __init__(self): p = self.get_setting('priority') or 1 self.priority = int(p) self.net = Net() try: os.makedirs(os.path.dirname(self.pv_cookie_file)) except OSError: pass #UrlResolver methods def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content data = json.loads(html) if self.get_setting('quality') == 'FLV': url = data['clip']['bitrates'][0]['url'] else: url = data['clip']['bitrates'][-1]['url'] params = '' for val in data['plugins']['lighttpd']['params']: params += val['name'] + '=' + val['value'] + '&' url = url + '?' + params[:-1] cookies = {} for cookie in self.net._cj: cookies[cookie.name] = cookie.value url = url + '|' + urllib.urlencode({'Cookie': urllib.urlencode(cookies)}) common.addon.log_debug(url) return url def get_url(self, host, media_id): return 'http://www.purevid.com/?m=video_info_embed_flv&id=%s' % media_id def get_host_and_id(self, url): r = re.search('//(.+?)/v/([0-9A-Za-z]+)', url) if r: return r.groups() else: return False def valid_url(self, url, host): if self.get_setting('login') == 'false': return False return 'purevid' in url #SiteAuth methods def needLogin(self): url = 'http://www.purevid.com/?m=main' if not os.path.exists(self.pv_cookie_file): return True self.net.set_cookies(self.pv_cookie_file) source = self.net.http_GET(url).content common.addon.log_debug(source.encode('utf-8')) if re.search("""<span>Welcome <strong>.*</strong></span>""", source) : common.addon.log_debug('needLogin returning False') return False else : common.addon.log_debug('needLogin returning True') return True def login(self): if self.needLogin() : common.addon.log('login to purevid') url = 'http://www.purevid.com/?m=login' data = {'username' : self.get_setting('username'), 'password' : self.get_setting('password')} source = self.net.http_POST(url,data).content if re.search(self.get_setting('username'), source): self.net.save_cookies(self.pv_cookie_file) self.net.set_cookies(self.pv_cookie_file) return True else: return False else : return True #PluginSettings methods def get_settings_xml(self): xml = PluginSettings.get_settings_xml(self) xml += '<setting id="PurevidResolver_login" ' xml += 'type="bool" label="Login" default="false"/>\n' xml += '<setting id="PurevidResolver_username" enable="eq(-1,true)" ' xml += 'type="text" label=" username" default=""/>\n' xml += '<setting id="PurevidResolver_password" enable="eq(-2,true)" ' xml += 'type="text" label=" password" option="hidden" default=""/>\n' xml += '<setting label="Video quality" id="PurevidResolver_quality" ' xml += 'type="labelenum" values="FLV|Maximum" default="Maximum" />\n' xml += '<setting label="This plugin calls the Purevid urlresolver - ' xml += 'change settings there." type="lsep" />\n' return xml