예제 #1
0
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()
예제 #2
0
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))
예제 #3
0
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()
예제 #4
0
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()
예제 #5
0
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))
예제 #6
0
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
예제 #7
0
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:
예제 #8
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)
            # 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)
예제 #9
0
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()
예제 #10
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)
        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)
예제 #11
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.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
예제 #12
0
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('&nbsp;',' ')
            NAME=name.encode('utf-8')
            addDir(NAME,URL,203,'','none',1)
예제 #13
0
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()
예제 #14
0
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)
예제 #15
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)
예제 #16
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)
예제 #17
0
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
예제 #19
0
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.')
예제 #20
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
예제 #21
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)
            # 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)
예제 #22
0
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()        
예제 #23
0
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
예제 #24
0
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
예제 #26
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('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
예제 #27
0
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
예제 #29
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
예제 #30
0
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)
예제 #32
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)
예제 #33
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
예제 #34
0
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
예제 #35
0
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
예제 #36
0
  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 )
예제 #37
0
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()
예제 #38
0
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(
                    '&amp;', '&')
                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(
                '&amp;', '&'
            ), '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(
                '&amp;', '&', 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('&amp;','&')
                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('&amp;','&'),'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('&amp;','&',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
예제 #40
0
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
예제 #41
0
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()
예제 #42
0
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(
                        '&amp;', '&')
                    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(
                    '&amp;', '&'
                ), '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
예제 #44
0
파일: ecostream.py 프로젝트: wljcom/dkodi
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
예제 #46
0
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
예제 #47
0
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()
예제 #48
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,
                    '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
예제 #49
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)

            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)
예제 #50
0
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('&amp;','&')
                    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('&amp;','&'),'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
예제 #53
0
  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 )
예제 #54
0
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()
예제 #55
0
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
예제 #56
0
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
예제 #57
0
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