def listar_busquedas(params,url,category): print "listar_busquedas()" channel2 = "" # Despliega las busquedas anteriormente guardadas try: presets = config.getSetting("presets_buscados") channel_preset = params.get("channel") if channel_preset != CHANNELNAME: channel2 = channel_preset print "channel_preset :%s" %channel_preset accion = params.get("action") matches = "" if "|" in presets: matches = presets.split("|") addfolder( "buscador" , config.getLocalizedString(30103)+"..." , matches[0] , "por_teclado", channel2 ) # Buscar else: addfolder( "buscador" , config.getLocalizedString(30103)+"..." , "" , "por_teclado", channel2 ) if len(matches)>0: for match in matches: title=scrapedurl = match addfolder( channel_preset , title , scrapedurl , "searchresults" ) elif presets != "": title = scrapedurl = presets addfolder( channel_preset , title , scrapedurl , "searchresults" ) except: addfolder( "buscador" , config.getLocalizedString(30103)+"..." , "" , "por_teclado" , channel2 ) # Cierra el directorio xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category=category ) xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def addnewvideo( canal , accion , category , server , title , url , thumbnail, plot ,Serie="",duration="",IsPlayable='false',context = 0): contextCommands = [] if DEBUG: try: logger.info('[xbmctools.py] addnewvideo( "'+canal+'" , "'+accion+'" , "'+category+'" , "'+server+'" , "'+title+'" , "' + url + '" , "'+thumbnail+'" , "'+plot+'")" , "'+Serie+'")"') except: logger.info('[xbmctools.py] addnewvideo(<unicode>)') listitem = xbmcgui.ListItem( title, iconImage="DefaultVideo.png", thumbnailImage=thumbnail ) listitem.setInfo( "video", { "Title" : title, "Plot" : plot, "Duration" : duration, "Studio" : canal } ) if IsPlayable == 'true': #Esta opcion es para poder utilizar el xbmcplugin.setResolvedUrl() listitem.setProperty('IsPlayable', 'true') #listitem.setProperty('fanart_image',os.path.join(IMAGES_PATH, "cinetube.png")) if context == 1: #El uno añade al menu contextual la opcion de guardar en megalive un canal a favoritos addItemCommand = "XBMC.RunPlugin(%s?channel=%s&action=%s&category=%s&title=%s&url=%s&thumbnail=%s&plot=%s&server=%s&Serie=%s)" % ( sys.argv[ 0 ] , canal , "saveChannelFavorites" , urllib.quote_plus( category ) , urllib.quote_plus( title ) , urllib.quote_plus( url ) , urllib.quote_plus( thumbnail ) , urllib.quote_plus( plot ) , server , Serie) contextCommands.append((config.getLocalizedString(30301),addItemCommand)) if context == 2:#El dos añade al menu contextual la opciones de eliminar y/o renombrar un canal en favoritos addItemCommand = "XBMC.RunPlugin(%s?channel=%s&action=%s&category=%s&title=%s&url=%s&thumbnail=%s&plot=%s&server=%s&Serie=%s)" % ( sys.argv[ 0 ] , canal , "deleteSavedChannel" , urllib.quote_plus( category ) , urllib.quote_plus( title ) , urllib.quote_plus( url ) , urllib.quote_plus( thumbnail ) , urllib.quote_plus( plot ) , server , Serie) contextCommands.append((config.getLocalizedString(30302),addItemCommand)) addItemCommand = "XBMC.RunPlugin(%s?channel=%s&action=%s&category=%s&title=%s&url=%s&thumbnail=%s&plot=%s&server=%s&Serie=%s)" % ( sys.argv[ 0 ] , canal , "renameChannelTitle" , urllib.quote_plus( category ) , urllib.quote_plus( title ) , urllib.quote_plus( url ) , urllib.quote_plus( thumbnail ) , urllib.quote_plus( plot ) , server , Serie) contextCommands.append((config.getLocalizedString(30303),addItemCommand)) if len (contextCommands) > 0: listitem.addContextMenuItems ( contextCommands, replaceItems=False) try: title = title.encode ("utf-8") #This only aplies to unicode strings. The rest stay as they are. plot = plot.encode ("utf-8") except: pass itemurl = '%s?channel=%s&action=%s&category=%s&title=%s&url=%s&thumbnail=%s&plot=%s&server=%s&Serie=%s' % ( sys.argv[ 0 ] , canal , accion , urllib.quote_plus( category ) , urllib.quote_plus( title ) , urllib.quote_plus( url ) , urllib.quote_plus( thumbnail ) , urllib.quote_plus( plot ) , server , Serie) #logger.info("[xbmctools.py] itemurl=%s" % itemurl) xbmcplugin.addDirectoryItem( handle = pluginhandle, url=itemurl, listitem=listitem, isFolder=False)
def getmainlist(params, url, category): logger.info("[cinetube.py] getmainlist") itemlist = [] itemlist.append( Item(channel=CHANNELNAME, title=config.getLocalizedString(30401), action="listWall", url="http://www.megalive.com/", folder=True)) itemlist.append( Item(channel=CHANNELNAME, title=config.getLocalizedString(30402), action="listcategory", url="http://www.megalive.com/?c=streams", folder=True)) itemlist.append( Item(channel=CHANNELNAME, title=config.getLocalizedString(30403), action="listfavorites", url="", folder=True)) itemlist.append( Item(channel=CHANNELNAME, title=config.getLocalizedString(30404), action="playByID", url="", folder=True)) return itemlist
def buscartrailer(params,url,category): print "[trailertools.py] Modulo: buscartrailer()" thumbnail = "" solo = "false" videotitle = title = urllib.unquote_plus( params.get("title") ).strip() if ":]" in videotitle: solo = "true" videotitle = re.sub("\[[^\]]+\]","",videotitle).strip() if config.getLocalizedString(30110) in videotitle: #"Buscar trailer para" videotitle = videotitle.replace(config.getLocalizedString(30110),"").strip() if config.getLocalizedString(30111) in videotitle: #"Insatisfecho?, busca otra vez : " videotitle = videotitle.replace(config.getLocalizedString(30111),"").strip() listavideos = GetTrailerbyKeyboard(videotitle.strip(),category) else: listavideos = gettrailer(videotitle.strip().strip(),category,solo) if len(listavideos)>0: for video in listavideos: titulo = video[1] url = video[0] thumbnail = video[2] duracion = video[3] xbmctools.addnewvideo( "trailertools" , "youtubeplay" , category , "Directo" , titulo , url , thumbnail , "Ver Video","",duracion ) xbmctools.addnewfolder( CHANNELNAME , "buscartrailer" , category , config.getLocalizedString(30111)+" "+videotitle , url , os.path.join(IMAGES_PATH, 'trailertools.png'), "" ) #"Insatisfecho?, busca otra vez : " # Propiedades xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category=category ) xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def alertanomegauploadlow(server): advertencia = xbmcgui.Dialog() #'La calidad elegida no esta disponible', 'o el video ha sido borrado', #'Prueba a reproducir en otra calidad' resultado = advertencia.ok( config.getLocalizedString(30055), config.getLocalizedString(30061), config.getLocalizedString(30062) )
def listar_busquedas(params,url,category): print "listar_busquedas()" channel2 = "" # Despliega las busquedas anteriormente guardadas try: presets = config.getSetting("presets_buscados") channel_preset = params.get("channel") if channel_preset != CHANNELNAME: channel2 = channel_preset print "channel_preset :%s" %channel_preset accion = params.get("action") matches = "" if "|" in presets: matches = presets.split("|") addfolder( "buscador" , config.getLocalizedString(30103)+"..." , matches[0] , "por_teclado", channel2 ) # Buscar else: addfolder( "buscador" , config.getLocalizedString(30103)+"..." , "" , "por_teclado", channel2 ) if len(matches)>0: for match in matches: title=scrapedurl = match addfolder( channel_preset , title , scrapedurl , "searchresults" ) elif presets != "": title = scrapedurl = presets addfolder( channel_preset , title , scrapedurl , "searchresults" ) except: addfolder( "buscador" , config.getLocalizedString(30103)+"..." , "" , "por_teclado" , channel2 ) # Cierra el directorio xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category=category ) xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def listchannels(params,url,category): logger.info("[channelselector.py] listchannels") # Verifica actualizaciones solo en el primer nivel try: import updater except ImportError: logger.info("[channelselector.py] No disponible modulo actualizaciones") else: if config.getSetting("updatecheck2") == "true": logger.info("[channelselector.py] Verificar actualizaciones activado") updater.checkforupdates() else: logger.info("[channelselector.py] Verificar actualizaciones desactivado") # addfolder("Antena3","a3","mainlist") # addfolder("ADNStream","adnstream","mainlist") # addfolder("Barcelona TV","barcelonatv","mainlist") # addfolder("Clan TV","clantv","mainlist") # addfolder("El cine de las 3 mellizas","tresmellizas","mainlist") # addfolder("Boing","boing","mainlist") # #addfolder("Totlol","totlol","mainlist") # addfolder("EITB","eitb","mainlist") # addfolder("Extremadura TV","extremaduratv","mainlist") # addfolder("Hogarutil","hogarutil","mainlist") # addfolder("Plus TV","plus","mainlist") # addfolder("Andalucia TV","rtva","mainlist") # addfolder("TVE","rtve","mainlist") # addfolder("TVE Programas","rtveprogramas","mainlist") # addfolder("TVE Mediateca","rtvemediateca","mainlist") # #addfolder("TV Azteca","tva","mainlist") # addfolder("Berria TB","berriatb","mainlist") # addfolder("Earth TV","earthtv","mainlist") # addfolder("Euronews","euronews","mainlist") # addfolder("Comunidad Valenciana","rtvv","mainlist") # #addfolder("Terra TV","terratv","mainlist") # addfolder("Turbonick","turbonick","mainlist") # addfolder("TV3","tv3","mainlist") # addfolder("TVG","tvg","mainlist") # addfolder("Mallorca TV","tvmallorca","mainlist") # addfolder("Meristation","meristation","mainlist") # addfolder("7rm","sieterm","mainlist") # addfolder("Televisión Canaria","rtvc","mainlist") # addfolder("Internautas TV","internautastv","mainlist") # addfolder("Publico.tv","publicotv","mainlist") addfolder("Σκαι: Οι Νεοι Φακελοι","skai_folders","mainlist") addfolder("Σκαι TV","skai_tv","mainlist") cadena = config.getLocalizedString(30100) logger.info("cadena="+cadena) addfolder(cadena,"configuracion","mainlist") # Configuracion if (parametrizacion.DOWNLOAD_ENABLED): addfolder(config.getLocalizedString(30101),"descargados","mainlist") # Descargas addfolder(config.getLocalizedString(30102),"favoritos","mainlist") # Favoritos # Label (top-right)... xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category="Canales" ) xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def alertnoencontrado(titulo): advertencia = xbmcgui.Dialog() #'Trailer no encontrado' #'El Trailer para "%s"' #'no se ha podido localizar.' #'�Deseas seguir buscando con el teclado?' tituloq = '"'+titulo+'"' resultado = advertencia.yesno(config.getLocalizedString(30114), config.getLocalizedString(30115) % tituloq, config.getLocalizedString(30116),config.getLocalizedString(30117)) return(resultado)
def getmainlist(params,url,category): logger.info("[cinetube.py] getmainlist") itemlist = [] itemlist.append( Item(channel=CHANNELNAME, title=config.getLocalizedString(30401) , action="listWall", url="http://www.megalive.com/" , folder=True) ) itemlist.append( Item(channel=CHANNELNAME, title= config.getLocalizedString(30402) , action="listcategory", url="http://www.megalive.com/?c=streams", folder=True) ) itemlist.append( Item(channel=CHANNELNAME, title=config.getLocalizedString(30403) , action="listfavorites" , url="" , folder=True) ) itemlist.append( Item(channel=CHANNELNAME, title=config.getLocalizedString(30404) , action="playByID" , url="" , folder=True) ) return itemlist
def alertnoencontrado(titulo): advertencia = xbmcgui.Dialog() #'Trailer no encontrado' #'El Trailer para "%s"' #'no se ha podido localizar.' #'�Deseas seguir buscando con el teclado?' tituloq = '"' + titulo + '"' resultado = advertencia.yesno(config.getLocalizedString(30114), config.getLocalizedString(30115) % tituloq, config.getLocalizedString(30116), config.getLocalizedString(30117)) return (resultado)
def mainlist(params,url,category): """Lists the main categories of the channel """ logger.debug("[tvshac.py] mainlist") # Categories List test = config.getLocalizedString(30900) xbmctools.addnewfolder( CHANNELNAME , "ListaSeries" , "Series" , str(getStr(30901)) , "http://tvshack.cc/tv" , thumbnail="" , plot="" ) # <string id="30901">Series TV (VO)</string> xbmctools.addnewfolder( CHANNELNAME , "ListaDetallada" , "Cine" , config.getLocalizedString(30902) , "http://tvshack.cc/movies" , thumbnail="" , plot="" ) xbmctools.addnewfolder( CHANNELNAME , "ListaDetallada" , "Documentales" , getStr(30903) , "http://tvshack.cc/documentaries" , thumbnail="" , plot="" ) xbmctools.addnewfolder( CHANNELNAME , "ListaSeries" , "Anime" , getStr(30904) , "http://tvshack.cc/anime" , thumbnail="" , plot="" ) xbmctools.addnewfolder( CHANNELNAME , "ListaSeries" , "Musica" , getStr(30905) , "http://tvshack.cc/music" , thumbnail="" , plot="" ) xbmctools.addnewfolder( CHANNELNAME , "Buscar" , "" , getStr(30906) , "http://tvshack.cc/search/" , thumbnail=SEARCH_THUMBNAIL , plot="" ) FinalizaPlugin (pluginhandle,category)
def GetTrailerbyKeyboard(titulo,category): print "[trailertools.py] Modulo: GetTrailerbyKeyboard(titulo = %s , category = %s)" % (titulo,category) devuelve = [] keyboard = xbmc.Keyboard('default','heading') keyboard.setDefault(titulo) if titulo == "": keyboard.setHeading(config.getLocalizedString(30112)) #"Introduce el Titulo a buscar" else: keyboard.setHeading(config.getLocalizedString(30113)) #'Puedes recortar el titulo � bien cambiar a otro idioma' keyboard.doModal() if (keyboard.isConfirmed()): tecleado = keyboard.getText() if len(tecleado)>0: devuelve = gettrailer(tecleado,category) return devuelve else:return [] else:return []
def mainlist(params, url, category): """Lists the main categories of the channel """ logger.debug("[tvshac.py] mainlist") # Categories List test = config.getLocalizedString(30900) xbmctools.addnewfolder( CHANNELNAME, "ListaSeries", "Series", str(getStr(30901)), "http://tvshack.bz/tv", thumbnail="", plot="") # <string id="30901">Series TV (VO)</string> xbmctools.addnewfolder(CHANNELNAME, "ListaDetallada", "Cine", config.getLocalizedString(30902), "http://tvshack.bz/movies", thumbnail="", plot="") xbmctools.addnewfolder(CHANNELNAME, "ListaDetallada", "Documentales", getStr(30903), "http://tvshack.bz/documentaries", thumbnail="", plot="") # xbmctools.addnewfolder( CHANNELNAME , "ListaSeries" , "Anime" , getStr(30904) , "http://tvshack.bz/anime" , thumbnail="" , plot="" ) # xbmctools.addnewfolder( CHANNELNAME , "ListaSeries" , "Musica" , getStr(30905) , "http://tvshack.bz/music" , thumbnail="" , plot="" ) #La música y el anime han desaparecido tras el último traslado de la web. xbmctools.addnewfolder(CHANNELNAME, "Buscar", "", getStr(30906), "http://tvshack.bz/search/", thumbnail=SEARCH_THUMBNAIL, plot="") FinalizaPlugin(pluginhandle, category)
def getplayByID(params,url,category): logger.info("[megalivewall.py] plyByID") tecleado = "" default = "" itemlist = [] tecleado = string.upper(teclado(heading=config.getLocalizedString(30405))) if len(tecleado)>0: url,thumbnail = megalive.getLiveUrl(tecleado,1) if len(url)>0: itemlist.append( Item(channel=CHANNELNAME, action="play" , title=tecleado , url=tecleado, thumbnail=thumbnail, plot="", show = tecleado, folder=False , context = True)) return itemlist
def mainlist(params,url,category): logger.info("[channelselector.py] mainlist") # Verifica actualizaciones solo en el primer nivel try: import updater except ImportError: logger.info("[channelselector.py] No disponible modulo actualizaciones") else: if config.getSetting("updatecheck2") == "true": logger.info("[channelselector.py] Verificar actualizaciones activado") updater.checkforupdates() else: logger.info("[channelselector.py] Verificar actualizaciones desactivado") idioma = config.getSetting("languagefilter") logger.info("[channelselector.py] idioma=%s" % idioma) langlistv = [config.getLocalizedString(30025),config.getLocalizedString(30026),config.getLocalizedString(30027),config.getLocalizedString(30028),config.getLocalizedString(30029)] try: idiomav = langlistv[int(idioma)] except: idiomav = langlistv[0] #logger.info("[channelselector.py] idiomav=%s" % idiomav) addfolder(config.getLocalizedString(30118)+" ("+idiomav+")","channelselector","channeltypes") #searchwebs=": Cinetube,Peliculasyonkis,Cinegratis,tumejortv.com,Peliculas21,Cine15,Seriesyonkis,Yotix.tv,DocumaniaTV,Discoverymx,Stagevu,tu.tv" #channelslist.append([ config.getLocalizedString(30103)+searchwebs , "buscador" , "Buscador" , "" , "B" ])# Buscador addfolder(config.getLocalizedString(30103),"buscador" ,"mainlist") addfolder(config.getLocalizedString(30128),"trailertools" ,"mainlist") addfolder(config.getLocalizedString(30102),"favoritos" ,"mainlist") if (DOWNLOAD_ENABLED): addfolder(config.getLocalizedString(30101),"descargados","mainlist") addfolder(config.getLocalizedString(30100),"configuracion" ,"mainlist") addfolder(config.getLocalizedString(30104),"ayuda" ,"mainlist") # Label (top-right)... import xbmcplugin xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category="" ) xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def buscartrailer(params, url, category): print "[trailertools.py] Modulo: buscartrailer()" thumbnail = "" solo = "false" videotitle = title = urllib.unquote_plus(params.get("title")).strip() if ":]" in videotitle: solo = "true" videotitle = re.sub("\[[^\]]+\]", "", videotitle).strip() if config.getLocalizedString(30110) in videotitle: #"Buscar trailer para" videotitle = videotitle.replace(config.getLocalizedString(30110), "").strip() if config.getLocalizedString( 30111) in videotitle: #"Insatisfecho?, busca otra vez : " videotitle = videotitle.replace(config.getLocalizedString(30111), "").strip() listavideos = GetTrailerbyKeyboard(videotitle.strip(), category) else: listavideos = gettrailer(videotitle.strip().strip(), category, solo) if len(listavideos) > 0: for video in listavideos: titulo = video[1] url = video[0] thumbnail = video[2] duracion = video[3] xbmctools.addnewvideo("trailertools", "youtubeplay", category, "Directo", titulo, url, thumbnail, "Ver Video", "", duracion) xbmctools.addnewfolder(CHANNELNAME, "buscartrailer", category, config.getLocalizedString(30111) + " " + videotitle, url, os.path.join(IMAGES_PATH, 'trailertools.png'), "") #"Insatisfecho?, busca otra vez : " # Propiedades xbmcplugin.setPluginCategory(handle=int(sys.argv[1]), category=category) xbmcplugin.addSortMethod(handle=int(sys.argv[1]), sortMethod=xbmcplugin.SORT_METHOD_NONE) xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True)
def addfolder( canal , nombre , url , accion , channel2 = "" ): logger.info('[buscador.py] addfolder( "'+nombre+'" , "' + url + '" , "'+accion+'")"') listitem = xbmcgui.ListItem( nombre , iconImage="DefaultFolder.png") itemurl = '%s?channel=%s&action=%s&category=%s&url=%s&channel2=%s' % ( sys.argv[ 0 ] , canal , accion , urllib.quote_plus(nombre) , urllib.quote_plus(url),channel2 ) if accion != "por_teclado": contextCommands = [] DeleteCommand = "XBMC.RunPlugin(%s?channel=buscador&action=borrar_busqueda&title=%s&url=%s)" % ( sys.argv[ 0 ] , urllib.quote_plus( nombre ) , urllib.quote_plus( url ) ) contextCommands.append((config.getLocalizedString( 30300 ),DeleteCommand)) listitem.addContextMenuItems ( contextCommands, replaceItems=False) xbmcplugin.addDirectoryItem( handle = pluginhandle, url = itemurl , listitem=listitem, isFolder=True)
def addfolder( canal , nombre , url , accion , channel2 = "" ): logger.info('[buscador.py] addfolder( "'+nombre+'" , "' + url + '" , "'+accion+'")"') listitem = xbmcgui.ListItem( nombre , iconImage="DefaultFolder.png") itemurl = '%s?channel=%s&action=%s&category=%s&url=%s&channel2=%s' % ( sys.argv[ 0 ] , canal , accion , urllib.quote_plus(nombre) , urllib.quote_plus(url),channel2 ) if accion != "por_teclado": contextCommands = [] DeleteCommand = "XBMC.RunPlugin(%s?channel=buscador&action=borrar_busqueda&title=%s&url=%s)" % ( sys.argv[ 0 ] , urllib.quote_plus( nombre ) , urllib.quote_plus( url ) ) contextCommands.append((config.getLocalizedString( 30300 ),DeleteCommand)) listitem.addContextMenuItems ( contextCommands, replaceItems=False) xbmcplugin.addDirectoryItem( handle = pluginhandle, url = itemurl , listitem=listitem, isFolder=True)
def GetTrailerbyKeyboard(titulo, category, solo="false"): print "[trailertools.py] Modulo: GetTrailerbyKeyboard(titulo = %s , category = %s)" % ( titulo, category) devuelve = [] keyboard = xbmc.Keyboard('default', 'heading') keyboard.setDefault(titulo) if titulo == "": keyboard.setHeading( config.getLocalizedString(30112)) #"Introduce el Titulo a buscar" else: keyboard.setHeading( config.getLocalizedString(30113) ) #'Puedes recortar el titulo � bien cambiar a otro idioma' keyboard.doModal() if (keyboard.isConfirmed()): tecleado = keyboard.getText() if len(tecleado) > 0: devuelve = gettrailer(tecleado, category, solo) return devuelve else: return [] else: return []
def channeltypes(params,url,category): logger.info("[channelselector.py] channeltypes") addfolder(config.getLocalizedString(30121),"channelselector","listchannels","*") # Todos addfolder(config.getLocalizedString(30122),"channelselector","listchannels","F") # Películas addfolder(config.getLocalizedString(30123),"channelselector","listchannels","S") # Series addfolder(config.getLocalizedString(30124),"channelselector","listchannels","A") # Anime addfolder(config.getLocalizedString(30125),"channelselector","listchannels","D") # Dibujos addfolder(config.getLocalizedString(30126),"channelselector","listchannels","M") # Música addfolder(config.getLocalizedString(30127),"channelselector","listchannels","G") # Servidores # Label (top-right)... xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category="" ) xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def channeltypes(params,url,category): logger.info("[channelselector.py] channeltypes") addfolder(config.getLocalizedString(30121),"channelselector","listchannels","*") # Todos addfolder(config.getLocalizedString(30122),"channelselector","listchannels","F") # Películas addfolder(config.getLocalizedString(30123),"channelselector","listchannels","S") # Series addfolder(config.getLocalizedString(30124),"channelselector","listchannels","A") # Anime addfolder(config.getLocalizedString(30125),"channelselector","listchannels","D") # Dibujos addfolder(config.getLocalizedString(30126),"channelselector","listchannels","M") # Música addfolder(config.getLocalizedString(30127),"channelselector","listchannels","G") # Servidores # Label (top-right)... import xbmcplugin xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category="" ) xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def getplayByID(params, url, category): logger.info("[megalivewall.py] plyByID") tecleado = "" default = "" itemlist = [] tecleado = string.upper(teclado(heading=config.getLocalizedString(30405))) if len(tecleado) > 0: url, thumbnail = megalive.getLiveUrl(tecleado, 1) if len(url) > 0: itemlist.append( Item(channel=CHANNELNAME, action="play", title=tecleado, url=tecleado, thumbnail=thumbnail, plot="", show=tecleado, folder=False, context=True)) return itemlist
def listado(item): logger.info("[totlol.py] listado") # Descarga la página data = scrapertools.cachePage(item.url) #logger.info(data) patron = '<select class="subnavbarform" name="vdoorderby"[^>]+>(.*?)</select>' matches = re.compile(patron,re.DOTALL).findall(data) #if DEBUG: scrapertools.printMatches(matches) data = matches[0] patron = "<option.*?value=([^>]+)>(.*?)</option>" matches = re.compile(patron,re.DOTALL).findall(data) ''' <select class="subnavbarform" name="vdoorderby" onchange="location.href = this[this.selectedIndex].value;"> <option value="http://www.totlol.com/videos?&orderby=df&u=&c=&search_id=&catid=0">- All Categories -</option> <option value='http://www.totlol.com/videos?&catid=1&u=&c=&search_id='>Animals</option><option value='http://www.totlol.com/videos?&catid=6&u=&c=&search_id='>Animated</option><option value='http://www.totlol.com/videos?&catid=16&u=&c=&search_id='>Classic</option><option value='http://www.totlol.com/videos?&catid=17&u=&c=&search_id='>Dance</option><option value='http://www.totlol.com/videos?&catid=13&u=&c=&search_id='>Educational</option><option value='http://www.totlol.com/videos?&catid=24&u=&c=&search_id='>Filmed or Live action</option><option value='http://www.totlol.com/videos?&catid=8&u=&c=&search_id='>Food and Drinks</option><option value='http://www.totlol.com/videos?&catid=2&u=&c=&search_id='>Funny</option><option value='http://www.totlol.com/videos?&catid=9&u=&c=&search_id='>Games and Sports</option><option value='http://www.totlol.com/videos?&catid=7&u=&c=&search_id='>Holidays and Special Events</option><option value='http://www.totlol.com/videos?&catid=26&u=&c=&search_id='>Movie</option><option value='http://www.totlol.com/videos?&catid=23&u=&c=&search_id='>Music</option><option value='http://www.totlol.com/videos?&catid=14&u=&c=&search_id='>Places</option><option value='http://www.totlol.com/videos?&catid=19&u=&c=&search_id='>Puppets Etc.</option><option value='http://www.totlol.com/videos?&catid=3&u=&c=&search_id='>Songs</option><option value='http://www.totlol.com/videos?&catid=15&u=&c=&search_id='>Stories</option><option value='http://www.totlol.com/videos?&catid=4&u=&c=&search_id='>Transportation</option><option value='http://www.totlol.com/videos?&catid=27&u=&c=&search_id='>TV show</option><option value='http://www.totlol.com/videos?&catid=20&u=&c=&search_id='>Videos of Babies or Infants</option><option value='http://www.totlol.com/videos?&catid=22&u=&c=&search_id='>Videos of Kindergarten or School Kids</option><option value='http://www.totlol.com/videos?&catid=21&u=&c=&search_id='>Videos of Toddlers or Preschoolers</option><option value='http://www.totlol.com/videos?&catid=25&u=&c=&search_id='>Videos of Tweens or Teens</option> </select> ''' itemlist = [] import config itemlist.append( Item(channel=CHANNELNAME, title=config.getLocalizedString(30103) , action="search" , folder=True) ) for match in matches: scrapedtitle = match[1] scrapedurl = scrapertools.entityunescape(match[0][1:-1]) scrapedthumbnail = "" scrapedplot = "" #if (DEBUG): logger.info("title=["+scrapedtitle+"], url=["+scrapedurl+"], thumbnail=["+scrapedthumbnail+"]") # Añade al listado itemlist.append( Item(channel=CHANNELNAME, title=scrapedtitle , action="listado" , url=scrapedurl, thumbnail=scrapedthumbnail, plot=scrapedplot , folder=True) ) return itemlist
def run(): logger.info("[pelisalacarta.py] run") # Verifica si el path de usuario del plugin está creado if not os.path.exists(config.DATA_PATH): logger.debug("[pelisalacarta.py] Path de usuario no existe, se crea: "+config.DATA_PATH) os.mkdir(config.DATA_PATH) # Imprime en el log los parámetros de entrada logger.info("[pelisalacarta.py] sys.argv=%s" % str(sys.argv)) # Crea el diccionario de parametros params = dict() if len(sys.argv)>=2 and len(sys.argv[2])>0: params = dict(part.split('=') for part in sys.argv[ 2 ][ 1: ].split('&')) logger.info("[pelisalacarta.py] params=%s" % str(params)) # Extrae la url de la página if (params.has_key("url")): url = urllib.unquote_plus( params.get("url") ) else: url='' # Extrae la accion if (params.has_key("action")): action = params.get("action") else: action = "selectchannel" # Extrae el server if (params.has_key("server")): server = params.get("server") else: server = "" # Extrae la categoria if (params.has_key("category")): category = urllib.unquote_plus( params.get("category") ) else: if params.has_key("channel"): category = params.get("channel") else: category = "" # Extrae la serie if (params.has_key("Serie")): serie = params.get("Serie") else: serie = "" logger.info("[pelisalacarta.py] url="+url+", action="+action+", server="+server+", category="+category+", serie="+serie) #JUR - Gestión de Errores de Internet (Para que no casque el plugin # si no hay internet (que queda feo) try: # Accion por defecto - elegir canal if ( action=="selectchannel" ): import channelselector as plugin plugin.mainlist(params, url, category) # Actualizar version elif ( action=="update" ): try: import updater updater.update(params) except ImportError: logger.info("[pelisalacarta.py] Actualizacion automática desactivada") import channelselector as plugin plugin.mainlist(params, url, category) # Reproducir un STRM elif (action=="strm"): import xbmctools xbmctools.playstrm(params, url, category) # El resto de acciones vienen en el parámetro "action", y el canal en el parámetro "channel" else: # Actualiza el canal si ha cambiado if action=="mainlist" and config.getSetting("updatechannels")=="true": try: import updater actualizado = updater.updatechannel(params.get("channel")) if actualizado: import xbmcgui advertencia = xbmcgui.Dialog() advertencia.ok("pelisalacarta",params.get("channel"),config.getLocalizedString(30063)) except: logger.info("Actualización de canales desactivada") # Ejecuta el canal exec "import "+params.get("channel")+" as channel" generico = False try: generico = channel.isGeneric() except: generico = False print "generico=" , generico # Es un canal específico de xbmc if not generico: exec "channel."+action+"(params, url, category)" # Es un canal genérico else: if params.has_key("title"): title = urllib.unquote_plus( params.get("title") ) else: title = "" if params.has_key("thumbnail"): thumbnail = urllib.unquote_plus( params.get("thumbnail") ) else: thumbnail = "" if params.has_key("plot"): plot = urllib.unquote_plus( params.get("plot") ) else: plot = "" if params.has_key("server"): server = urllib.unquote_plus( params.get("server") ) else: server = "directo" import xbmctools if action=="play": xbmctools.playvideo(params.get("channel"),server,url,category,title,thumbnail,plot) else: from item import Item item = Item(channel=params.get("channel"), title=title , url=url, thumbnail=thumbnail , plot=plot , server=server) if action!="findvideos": exec "itemlist = channel."+action+"(item)" else: # Intenta ejecutar una posible funcion "findvideos" del canal try: exec "itemlist = channel."+action+"(item)" # Si no funciona, lanza el método genérico para detectar vídeos except: itemlist = findvideos(item) xbmctools.renderItems(itemlist, params, url, category) except urllib2.URLError,e: for line in sys.exc_info(): logger.error( "%s" % line ) import xbmcgui ventana_error = xbmcgui.Dialog() # Agarra los errores surgidos localmente enviados por las librerias internas if hasattr(e, 'reason'): logger.info("Razon del error, codigo: %d , Razon: %s" %(e.reason[0],e.reason[1])) texto = config.getLocalizedString(30050) # "No se puede conectar con el sitio web" ok = ventana_error.ok ("pelisalacarta", texto) # Agarra los errores con codigo de respuesta del servidor externo solicitado elif hasattr(e,'code'): logger.info("codigo de error HTTP : %d" %e.code) texto = (config.getLocalizedString(30051) % e.code) # "El sitio web no funciona correctamente (error http %d)" ok = ventana_error.ok ("pelisalacarta", texto) else: pass
def listchannels(params,url,category): logger.info("[channelselector.py] listchannels") # Verifica actualizaciones solo en el primer nivel try: import updater except ImportError: logger.info("[pelisalacarta.py] No disponible modulo actualizaciones") else: if config.getSetting("updatecheck2") == "true": logger.info("[channelselector.py] Verificar actualizaciones activado") updater.checkforupdates() else: logger.info("[channelselector.py] Verificar actualizaciones desactivado") # Añade los canales addfolder("Cinetube","cinetube","mainlist") addfolder("Peliculasyonkis","peliculasyonkis","mainlist") #addfolder("Divx Online","divxonline","mainlist") # added by ermanitu addfolder("Cinegratis","cinegratis","mainlist") addfolder("tumejortv.com","tumejortv","mainlist") addfolder("Peliculas21","peliculas21","mainlist") addfolder("Dospuntocerovision","dospuntocerovision","mainlist") addfolder("Cine15","cine15","mainlist") #addfolder("Eduman Movies","edumanmovies","mainlist") #addfolder("SesionVIP","sesionvip","mainlist") addfolder("Peliculasid","peliculasid","mainlist") addfolder("Cinegratis24h","cinegratis24h","mainlist") addfolder("Cine-Adicto","cineadicto","mainlist") #addfolder("PelisFlv","pelisflv","mainlist") # de momento queda apartado por falta de tiempo addfolder("NoloMires","nolomires","mainlist") addfolder("NewDivx","newdivx","mainlist") #addfolder("Pelis-Sevillista56","sevillista","mainlist") addfolder("FilmesOnlineBr [Portugues]","filmesonlinebr","mainlist") addfolder("TVShack.net (VO)","tvshack","mainlist") addfolder("DeLaTV","delatv","mainlist") addfolder("Pelis24","pelis24","mainlist") addfolder("Veocine","veocine","mainlist") addfolder("Pintadibujos","pintadibujos","mainlist") if config.getSetting("enableadultmode") == "true": addfolder("PeliculasEroticas","peliculaseroticas","mainlist") addfolder("MocosoftX","mocosoftx","mainlist") addfolder("Anifenix.com","anifenix","mainlist") addfolder("tuporno.tv","tupornotv","mainlist") addfolder("Descarga Cine Clásico","descargacineclasico","mainlist") addfolder("Capitan Cinema","capitancinema","mainlist") addfolder("Film Streaming [IT]","filmstreaming","mainlist") addfolder("No Megavideo","nomegavideo","mainlist") addfolder("LetMeWatchThis","letmewatchthis","mainlist") addfolder("Seriesyonkis","seriesyonkis","mainlist","Series") #Modificado por JUR para añadir la categoría addfolder("Seriespepito","seriespepito","mainlist") #addfolder("seriesonline.us","seriesonline","mainlist") addfolder("Series21","series21","mainlist") #addfolder("Newcineonline","newcineonline","mainlist") addfolder("CastTV","casttv","mainlist") addfolder("Ver Telenovelas Online","vertelenovelasonline","mainlist") addfolder("Anime Foros","animeforos","mainlist") addfolder("Yotix.tv","yotix","mainlist") addfolder("MCAnime","mcanime","mainlist") addfolder("Animetakus","animetakus","mainlist") addfolder("Ver-anime","veranime","mainlist") addfolder("Watchanimeon [EN]","watchanimeon","mainlist") addfolder("Animeid","animeid","mainlist") addfolder("Ovasid","ovasid","mainlist") addfolder("dibujosanimadosgratis.net","dibujosanimadosgratis","mainlist") addfolder("DocumaniaTV","documaniatv","mainlist") addfolder("DocumentariesTV [EN]","documentariestv","mainlist") addfolder("Documentalesyonkis","documentalesyonkis","mainlist") addfolder("Documentalesatonline","documentalesatonline","mainlist") addfolder("Discoverymx.Wordpress","discoverymx","mainlist") addfolder("Gratisdocumentales","gratisdocumentales","mainlist") addfolder("Redes.tv","redestv","mainlist") addfolder("Buscador de Trailers (Youtube)","trailertools","mainlist") addfolder("ecartelera (Trailers)","ecarteleratrailers","mainlist") addfolder("Stagevu","stagevusite","mainlist") addfolder("tu.tv","tutvsite","mainlist") addfolder("Megavideo","megavideosite","mainlist") addfolder("Megaupload","megauploadsite","mainlist") addfolder(config.getLocalizedString(30100),"configuracion","mainlist") # Configuracion if (parametrizacion.DOWNLOAD_ENABLED): addfolder(config.getLocalizedString(30101),"descargados","mainlist") # Descargas addfolder(config.getLocalizedString(30102),"favoritos","mainlist") # Favoritos addfolder(config.getLocalizedString(30103),"buscador","mainlist") # Buscador addfolder(config.getLocalizedString(30104),"ayuda","mainlist") # Ayuda #addfolder("Kochikame","kochikame","mainlist") #addfolder("PeliculasHD","peliculashd","mainlist") #addfolder("Wuapi","wuapisite","mainlist") #addfolder("Frozen Layer","frozenlayer","mainlist") # Label (top-right)... xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category="Canales" ) xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def run(): logger.info("[GreekTV.py] run") # Verifica si el path de usuario del plugin est� creado if not os.path.exists(config.DATA_PATH): logger.debug("[GreekTV.py] Path de usuario no existe, se crea: "+config.DATA_PATH) os.mkdir(config.DATA_PATH) # Imprime en el log los par�metros de entrada logger.info("[GreekTV.py] sys.argv=%s" % str(sys.argv)) # Crea el diccionario de parametros params = dict() if len(sys.argv)>=2 and len(sys.argv[2])>0: params = dict(part.split('=') for part in sys.argv[ 2 ][ 1: ].split('&')) logger.info("[GreekTV.py] params=%s" % str(params)) # Extrae la url de la p�gina if (params.has_key("url")): url = urllib.unquote_plus( params.get("url") ) else: url='' # Extrae la accion if (params.has_key("action")): action = params.get("action") else: action = "selectchannel" # Extrae el server if (params.has_key("server")): server = params.get("server") else: server = "" # Extrae la categoria if (params.has_key("category")): category = urllib.unquote_plus( params.get("category") ) else: if params.has_key("channel"): category = params.get("channel") else: category = "" try: # Accion por defecto - elegir canal if ( action=="selectchannel" ): import channelselector as plugin plugin.listchannels(params, url, category) # Actualizar version elif ( action=="update" ): import updater updater.update(params) import channelselector as plugin plugin.listchannels(params, url, category) # El resto de acciones vienen en el par�metro "action", y el canal en el par�metro "channel" else: exec "import "+params.get("channel")+" as channel" generico = False try: generico = channel.isGeneric() except: generico = False print "generico=" , generico if not generico: exec "channel."+action+"(params, url, category)" else: if params.has_key("title"): title = urllib.unquote_plus( params.get("title") ) else: title = "" if params.has_key("thumbnail"): thumbnail = urllib.unquote_plus( params.get("thumbnail") ) else: thumbnail = "" if params.has_key("plot"): plot = urllib.unquote_plus( params.get("plot") ) else: plot = "" if params.has_key("server"): server = urllib.unquote_plus( params.get("server") ) else: server = "directo" import xbmctools if action=="play": xbmctools.playvideo(params.get("channel"),server,url,category,title,thumbnail,plot) else: from item import Item item = Item(channel=params.get("channel"), title=title , url=url, thumbnail=thumbnail , plot=plot , server=server) exec "itemlist = channel."+action+"(item)" xbmctools.renderItems(itemlist, params, url, category) except urllib2.URLError,e: ventana_error = xbmcgui.Dialog() # Agarra los errores surgidos localmente enviados por las librerias internas if hasattr(e, 'reason'): logger.info("Razon del error, codigo: %d , Razon: %s" %(e.reason[0],e.reason[1])) texto = config.getLocalizedString(30050) # "No se puede conectar con el sitio web" ok = ventana_error.ok ("pelisalacarta", texto) # Agarra los errores con codigo de respuesta del servidor externo solicitado elif hasattr(e,'code'): logger.info("codigo de error HTTP : %d" %e.code) texto = (config.getLocalizedString(30051) % e.code) # "El sitio web no funciona correctamente (error http %d)" ok = ventana_error.ok ("pelisalacarta", texto) else: pass
def listarvideos(params,url,category,data): titulo = params.get("title") logger.info("[dospuntocerovision.py] listarvideos ") plot = params.get("plot") patronmovshare = 'href="(http://www.movshare.net/.*?)"[^>]+>(.*?)<' patronmegavideoflv= 'href="(http://www.megavideoflv.com/.*?)"' patronmegavideo = 'href="http://www.megavideo.com/.*?v=([A-Z0-9]{8})\&.*?>(.*?)</a>' patronmegavideo2 = 'http\:\/\/www.mega(?:(?:video)|(?:upload))?\.com/(?:(?:v/)|\?(?:s=.+?&(?:amp;)?)?((?:(?:v\=)|(?:d\=))))?([A-Z0-9]{8}).*?>(.*?)</a>(.*?)<' patronvideo = '<a onblur=.+?href="[^"]+">.*?<.*?src="([^"]+)".*? alt=.*?;">(.*?)</div>' patroncinegratis = 'href="(http://www.cinegratis24h.com/.*?)"' patronflv = 'flashvars="file=(http.*?.flv)' scrapedtitle = urllib.unquote_plus(titulo) scrapedthumbnail = "" scrapedplot = "" patrontitle = "post-title entry-title\'>[^<]+<[^>]+>(.+?)</a>" matches = re.compile(patrontitle,re.DOTALL).findall(data) for match in matches: scrapedtitle = match #------------------------------------------------------------------------------- matchesvideo = re.compile(patronvideo,re.DOTALL).findall(data) for match in matchesvideo: scrapedthumbnail = match[0] scrapedplot = match [1] scrapedplot = re.sub("<[^>]+>"," ",scrapedplot) scrapedplot = scrapedplot.replace("¿","�") scrapedplot = acentos(scrapedplot) if not urllib.unquote_plus(titulo) in ("�ltimas pel�culas" , "P�gina siguiente") : detalle = "Esta opcion permite buscar el trailer en youtube para esta pelicula y muestra hasta seis titulos mas aproximados si los hay \n " xbmctools.addnewfolder( "trailertools" , "buscartrailer" , category ,config.getLocalizedString(30110)+" "+scrapedtitle , titulo , os.path.join(IMAGES_PATH, 'trailertools.png'), detalle ) #Buscar trailer para #------------------------------------------------------------------------------- ''' matchesmegavideo = re.compile(patronmegavideo,re.DOTALL).findall(data) # busca los links de megavideo #logger.info("videos Match " +matchesmegavideo[0]) for match in matchesmegavideo: scrapedurl = match[0] # A�ade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Megavideo" , scrapedtitle+" - "+match[1]+" - (Megavideo)" , scrapedurl , scrapedthumbnail , scrapedplot ) ''' #http://www.megavideo.com/?v=0I5DDHA8 #http://www.megavideo.com/?s=dospuntocerovision&v=R30GGEMG&confirmed=1 matchesmegavideo = re.compile(patronmegavideo2,re.DOTALL).findall(data) # busca los links de megavideo for match in matchesmegavideo: scrapedurl = match[1] #titulo = re.sub("<[^>]+>","",match[0]) #titulo = titulo.replace("<a href=","") #titulo = titulo.replace("<a style=","") #titulo = titulo.replace("<span style=","") #titulo = titulo.replace("<div style=","") if "megavideo" in match[2]:titulo="" else: titulo = match[2] + " " + match[3] if "v" in match[0]: xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Megavideo" , scrapedtitle+" - "+titulo+" - (Megavideo)" , scrapedurl , scrapedthumbnail , scrapedplot ) elif "d" in match[0]: xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Megaupload" , scrapedtitle+" - "+titulo+" - (Megaupload)" , scrapedurl , scrapedthumbnail , scrapedplot ) #------------------------------------------------------------------------------- matchescinegratis= re.compile(patroncinegratis,re.DOTALL).findall(data) # busca los links de la pagina de cinegratis24h.com if len(matchescinegratis)>0: #logger.info("videos Match " +matchescinegratis[0]) data1 = scrapertools.cachePage(matchescinegratis[0]) matchesflv = re.compile(patronflv,re.DOTALL).findall(data1) c = 0 for match in matchesflv: c = c + 1 scrapedurl = match # A�ade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Directo" , scrapedtitle +" - "+"parte "+str(c)+" (FLV) (V.O.S.)", scrapedurl , scrapedthumbnail , scrapedplot ) #------------------------------------------------------------------------------- matchesmegavideoflv = re.compile(patronmegavideoflv,re.DOTALL).findall(data) # Busca los link de megavideoflv.com if len(matchesmegavideoflv)>0: #logger.info("videos Match " +matchesmegavideoflv[0]) data1 = scrapertools.cachePage(matchesmegavideoflv[0]) matchesflv = re.compile(patronflv,re.DOTALL).findall(data1) c = 0 for match in matchesflv: c = c + 1 scrapedurl = match # A�ade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Directo" , scrapedtitle +" - "+"parte "+str(c)+" (FLV)", scrapedurl , scrapedthumbnail , scrapedplot ) matchesmovshare = re.compile(patronmovshare,re.DOTALL).findall(data) if len(matchesmovshare)>0: #import movshare total = len(matchesmovshare) for match in matchesmovshare: logger.info("movshare link : "+match[0]) import movshare if "#" in match[0]: urlsplited = match[0].split("#") scrapedurl = urlsplited[0] else: scrapedurl = match[0] if len(scrapedurl)>0: xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Movshare" , scrapedtitle +" - "+match[1]+" (Movshare)", scrapedurl , scrapedthumbnail , scrapedplot ) #------------------------------------------------------------------------------- matchesvideoflv = re.compile(patronflv,re.DOTALL).findall(data) # busca los link flashvar directos if len(matchesvideoflv)>0: for match in matchesvideoflv: scrapedurl = match # A�ade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Directo" , scrapedtitle +" - "+"Directo (FLV)", scrapedurl , scrapedthumbnail , scrapedplot ) # Busca la lista de los videos documentales de suricato.com para youtube patronyoutube = '<param name="movie" value="http://www.youtube.com/p/(.*?)\&' matchyoutube = re.compile(patronyoutube,re.DOTALL).findall(data) if len(matchyoutube)>0: for match in matchyoutube: listyoutubeurl = 'http://www.youtube.com/view_play_list?p='+match data1 = scrapertools.cachePage(listyoutubeurl) newpatronyoutube = '<a href="(.*?)".*?<img src="(.*?)".*?alt="([^"]+)"' matchnewyoutube = re.compile(newpatronyoutube,re.DOTALL).findall(data1) if len(matchnewyoutube)>0: for match2 in matchnewyoutube: scrapedthumbnail = match2[1] scrapedtitle = match2[2] scrapedurl = match2[0] logger.info(" lista de links encontrados U "+str(len(matchnewyoutube))) xbmctools.addnewvideo( CHANNELNAME , "youtubeplay" , category , "Directo" , scrapedtitle +" - "+"(youtube) ", scrapedurl , scrapedthumbnail , scrapedplot ) #------------------------------------------------------------------------------- patronyoutube = '<a href="http://www.youtube.com(/watch\?v\=.*?)".*?>(.*?)</a>' matchyoutube = re.compile(patronyoutube,re.DOTALL).findall(data) for match in matchyoutube: scrapedtitle = match[1] scrapedtitle = re.sub("<[^>]+>"," ",scrapedtitle) scrapedurl = match[0] xbmctools.addnewvideo( CHANNELNAME , "youtubeplay" , category , "Directo" , scrapedtitle +" - "+"(youtube) ", scrapedurl , scrapedthumbnail , scrapedplot ) # busca los link directos de Google patrongoogle = 'href="(http://video.google.com/videoplay.*?)"' matchesgoogle = re.compile(patrongoogle,re.DOTALL).findall(data) for match in matchesgoogle: urllink = "http://www.flashvideodownloader.org/download.php?u="+match logger.info(" Url = "+urllink[0]) data1 = scrapertools.cachePage(urllink) newpatron = '</script><div.*?<a href="(.*?)" title="Click to Download">' newmatches = re.compile(newpatron,re.DOTALL).findall(data1) if len(newmatches)>0: scrapedurl = newmatches[0] xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Directo" , scrapedtitle +" - "+"(Google) ", scrapedurl , scrapedthumbnail , scrapedplot ) # busca las url de los videos alojados en tu.tv patronvideotv = '(http://www.tu.tv/videos/.*?)"><img src="(.*?)" alt="(.*?)".*?' #logger.info("dataa "+data) matchestv = re.compile(patronvideotv,re.DOTALL).findall(data) for match in matchestv: xbmctools.addnewfolder( CHANNELNAME , "listvideosTVmirror" , category , match[2] , match[0] , match[1], scrapedplot ) # Busca las URLs de los videos alojados en videoweed patronvideos = 'href="(http://www.videoweed.com/file/[^"]+)" target="_blank">(.*?)</a>' matchesweed = re.compile(patronvideos,re.DOTALL).findall(data) if len(matchesweed)>0: for match in matchesweed: scrapedurl = match[0] xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "videoweed" , scrapedtitle +" - "+match[1]+" (Videoweed)", scrapedurl , scrapedthumbnail , scrapedplot )
def alertnodisponibleserver(server): advertencia = xbmcgui.Dialog() # 'El vídeo ya no está en %s' , 'Prueba en otro servidor o en otro canal' resultado = advertencia.ok( config.getLocalizedString(30055),(config.getLocalizedString(30057)%server),config.getLocalizedString(30058))
def alerterrorpagina(): advertencia = xbmcgui.Dialog() #'Error en el sitio web' #'No se puede acceder por un error en el sitio web' resultado = advertencia.ok(config.getLocalizedString(30059) , config.getLocalizedString(30060))
def playvideoEx(canal,server,url,category,title,thumbnail,plot,desdefavoritos,desdedescargados,desderrordescargas,strmfile=False,Serie=""): logger.info("[xbmctools.py] playvideo") logger.info("[xbmctools.py] playvideo canal="+canal) logger.info("[xbmctools.py] playvideo server="+server) logger.info("[xbmctools.py] playvideo url="+url) logger.info("[xbmctools.py] playvideo category="+category) logger.info("[xbmctools.py] playvideo serie="+Serie) # Parametrizacion especifica import parametrizacion # Abre el diálogo de selección opciones = [] default_action = config.getSetting("default_action") # Los vídeos de Megavídeo sólo se pueden ver en calidad alta con cuenta premium # Los vídeos de Megaupload sólo se pueden ver con cuenta premium, en otro caso pide captcha if (server=="Megavideo" or server=="Megaupload") and config.getSetting("megavideopremium")=="true": opciones.append(config.getLocalizedString(30150)+" ["+server+"]") # "Ver en calidad alta" # Si la accion por defecto es "Ver en calidad alta", la seleccion se hace ya if default_action=="2": seleccion = len(opciones)-1 # Los vídeos de Megavídeo o Megaupload se pueden ver en calidad baja sin cuenta premium, aunque con el límite if (server=="Megavideo" or server=="Megaupload"): opciones.append(config.getLocalizedString(30152)+" [Megavideo]") # "Ver en calidad baja" # Si la accion por defecto es "Ver en calidad baja", la seleccion se hace ya if default_action=="1": seleccion = len(opciones)-1 else: opciones.append(config.getLocalizedString(30151)+" ["+server+"]") # "Ver en calidad normal" # Si la accion por defecto es "Ver en calidad baja", la seleccion se hace ya if default_action<>"0": #Si hay alguna calidad elegida (alta o baja) seleccionarmos esta para los no megavideo seleccion = len(opciones)-1 if (parametrizacion.DOWNLOAD_ENABLED): opciones.append(config.getLocalizedString(30153)) # "Descargar" if desdefavoritos: opciones.append(config.getLocalizedString(30154)) # "Quitar de favoritos" else: opciones.append(config.getLocalizedString(30155)) # "Añadir a favoritos" if (parametrizacion.DOWNLOAD_ENABLED): if desdedescargados: opciones.append(config.getLocalizedString(30156)) # "Quitar de lista de descargas" else: opciones.append(config.getLocalizedString(30157)) # "Añadir a lista de descargas" opciones.append(config.getLocalizedString(30158)) # "Enviar a JDownloader" if default_action=="3": seleccion = len(opciones)-1 if (parametrizacion.DOWNLOAD_ENABLED): if desderrordescargas: opciones.append(config.getLocalizedString(30159)) # "Borrar descarga definitivamente" opciones.append(config.getLocalizedString(30160)) # "Pasar de nuevo a lista de descargas" if not strmfile: if category in LIBRARY_CATEGORIES: opciones.append(config.getLocalizedString(30161)) # "Añadir a Biblioteca" # Busqueda de trailers en youtube if not canal in ["Trailer","ecarteleratrailers"]: opciones.append(config.getLocalizedString(30162)) # "Buscar Trailer" # Si la accion por defecto es "Preguntar", pregunta if default_action=="0": dia = xbmcgui.Dialog() seleccion = dia.select(config.getLocalizedString(30163), opciones) # "Elige una opción" #dia.close() logger.info("seleccion=%d" % seleccion) logger.info("seleccion=%s" % opciones[seleccion]) # No ha elegido nada, lo más probable porque haya dado al ESC if seleccion==-1: if strmfile: #Para evitar el error "Uno o más elementos fallaron" al cancelar la selección desde fichero strm listitem = xbmcgui.ListItem( title, iconImage="DefaultVideo.png", thumbnailImage=thumbnail) xbmcplugin.setResolvedUrl(int(sys.argv[ 1 ]),False,listitem) # JUR Added if config.getSetting("subtitulo") == "true": config.setSetting("subtitulo", "false") return if opciones[seleccion]==config.getLocalizedString(30158): # "Enviar a JDownloader" if server=="Megaupload": d = {"web": "http://www.megaupload.com/?d=" + url} else: d = {"web": "http://www.megavideo.com/?v=" + url} import scrapertools data = scrapertools.cachePage(config.getSetting("jdownloader")+"/action/add/links/grabber0/start1/"+urllib.urlencode(d)+ " " +thumbnail) return # Ver en calidad alta if opciones[seleccion].startswith(config.getLocalizedString(30150)): # "Ver en calidad alta" if server=="Megaupload": mediaurl = servertools.getmegauploadhigh(url) else: mediaurl = servertools.getmegavideohigh(url) # Ver (calidad baja megavideo o resto servidores) elif opciones[seleccion].startswith(config.getLocalizedString(30151)) or opciones[seleccion].startswith(config.getLocalizedString(30152)): # Ver en calidad (normal o baja) if server=="Megaupload": mediaurl = servertools.getmegauploadlow(url) if mediaurl == "": alertanomegauploadlow(server) return elif server=="Megavideo": # Advertencia límite 72 minutos megavideo if config.getSetting("megavideopremium")=="false": advertencia = xbmcgui.Dialog() resultado = advertencia.ok(config.getLocalizedString(30052) , config.getLocalizedString(30053) , config.getLocalizedString(30054)) mediaurl = servertools.getmegavideolow(url) else: mediaurl = servertools.findurl(url,server) # Descargar elif opciones[seleccion]==config.getLocalizedString(30153): # "Descargar" if server=="Megaupload": if config.getSetting("megavideopremium")=="false": mediaurl = servertools.getmegauploadlow(url) else: mediaurl = servertools.getmegauploadhigh(url) elif server=="Megavideo": if config.getSetting("megavideopremium")=="false": mediaurl = servertools.getmegavideolow(url) else: mediaurl = servertools.getmegavideohigh(url) else: mediaurl = servertools.findurl(url,server) import downloadtools keyboard = xbmc.Keyboard(downloadtools.limpia_nombre_excepto_1(title)) keyboard.doModal() if (keyboard.isConfirmed()): title = keyboard.getText() downloadtools.downloadtitle(mediaurl,title) return # TODO: Mover a modulo favoritos elif opciones[seleccion]==config.getLocalizedString(30154): #"Quitar de favoritos" # La categoría es el nombre del fichero en favoritos os.remove(urllib.unquote_plus( category )) advertencia = xbmcgui.Dialog() resultado = advertencia.ok(config.getLocalizedString(30102) , title , config.getLocalizedString(30105)) # 'Se ha quitado de favoritos' return # TODO: Mover a modulo descargadoslist elif opciones[seleccion]==config.getLocalizedString(30159): #"Borrar descarga definitivamente" # La categoría es el nombre del fichero en favoritos os.remove(urllib.unquote_plus( category )) advertencia = xbmcgui.Dialog() resultado = advertencia.ok(config.getLocalizedString(30101) , title , config.getLocalizedString(30106)) # 'Se ha quitado de la lista' return # TODO: Mover a modulo descargadoslist elif opciones[seleccion]==config.getLocalizedString(30160): #"Pasar de nuevo a lista de descargas": import descargadoslist # La categoría es el nombre del fichero en favoritos, así que lee el fichero titulo,thumbnail,plot,server,url = descargadoslist.readbookmarkfile(urllib.unquote_plus( category ),"") # Lo añade a la lista de descargas descargadoslist.savebookmark(title,url,thumbnail,server,plot) # Y lo borra de la lista de errores os.remove(urllib.unquote_plus( category )) advertencia = xbmcgui.Dialog() resultado = advertencia.ok(config.getLocalizedString(30101) , title , config.getLocalizedString(30107)) # 'Ha pasado de nuevo a la lista de descargas' return # TODO: Mover a modulo favoritos elif opciones[seleccion]==config.getLocalizedString(30155): #"Añadir a favoritos": import favoritos import downloadtools keyboard = xbmc.Keyboard(downloadtools.limpia_nombre_excepto_1(title)) keyboard.doModal() if keyboard.isConfirmed(): title = keyboard.getText() favoritos.savebookmark(title,url,thumbnail,server,plot) advertencia = xbmcgui.Dialog() resultado = advertencia.ok(config.getLocalizedString(30102) , title , config.getLocalizedString(30108)) # 'se ha añadido a favoritos' return # TODO: Mover a modulo descargadoslist elif opciones[seleccion]==config.getLocalizedString(30156): #"Quitar de lista de descargas": # La categoría es el nombre del fichero en la lista de descargas os.remove(urllib.unquote_plus( category )) advertencia = xbmcgui.Dialog() resultado = advertencia.ok(config.getLocalizedString(30101) , title , config.getLocalizedString(30106)) # 'Se ha quitado de lista de descargas' return # TODO: Mover a modulo descargadoslist elif opciones[seleccion]==config.getLocalizedString(30157): #"Añadir a lista de descargas": import descargadoslist import downloadtools keyboard = xbmc.Keyboard(downloadtools.limpia_nombre_excepto_1(title)) keyboard.doModal() if keyboard.isConfirmed(): title = keyboard.getText() descargadoslist.savebookmark(title,url,thumbnail,server,plot) advertencia = xbmcgui.Dialog() resultado = advertencia.ok(config.getLocalizedString(30101) , title , config.getLocalizedString(30109)) # 'se ha añadido a la lista de descargas' return elif opciones[seleccion]==config.getLocalizedString(30161): #"Añadir a Biblioteca": # Library import library library.savelibrary(title,url,thumbnail,server,plot,canal=canal,category=category,Serie=Serie) return elif opciones[seleccion]==config.getLocalizedString(30162): #"Buscar Trailer": config.setSetting("subtitulo", "false") xbmc.executebuiltin("Container.Update(%s?channel=%s&action=%s&category=%s&title=%s&url=%s&thumbnail=%s&plot=%s&server=%s)" % ( sys.argv[ 0 ] , "trailertools" , "buscartrailer" , urllib.quote_plus( category ) , urllib.quote_plus( title ) , urllib.quote_plus( url ) , urllib.quote_plus( thumbnail ) , urllib.quote_plus( "" ) , server )) return # Si no hay mediaurl es porque el vídeo no está :) logger.info("[xbmctools.py] mediaurl="+mediaurl) if mediaurl=="": alertnodisponibleserver(server) return # Crea un listitem para pasárselo al reproductor # Obtención datos de la Biblioteca (solo strms que estén en la biblioteca) if strmfile: logger.info("[xbmctools.py] 1") listitem = getLibraryInfo(mediaurl) else: logger.info("[xbmctools.py] 2") listitem = xbmcgui.ListItem( title, iconImage="DefaultVideo.png", thumbnailImage=thumbnail) listitem.setInfo( "video", { "Title": title, "Plot" : plot , "Studio" : canal , "Genre" : category } ) # Lanza el reproductor if strmfile: #Si es un fichero strm no hace falta el play logger.info("[xbmctools.py] 3") xbmcplugin.setResolvedUrl(int(sys.argv[ 1 ]),True,listitem) else: logger.info("[xbmctools.py] 4") launchplayer(mediaurl, listitem) if (config.getSetting("subtitulo") == "true") and (opciones[seleccion].startswith("Ver")): xbmc.Player().setSubtitles(os.path.join( config.DATA_PATH, 'subtitulo.srt' ) ) config.setSetting("subtitulo", "false")
def alertnodisponible(): advertencia = xbmcgui.Dialog() #'Vídeo no disponible' #'No se han podido localizar videos en la página del canal' resultado = advertencia.ok(config.getLocalizedString(30055) , config.getLocalizedString(30056))
def run(): logger.info("[pelisalacarta.py] run") # Verifica si el path de usuario del plugin está creado if not os.path.exists(config.DATA_PATH): logger.debug( "[pelisalacarta.py] Path de usuario no existe, se crea: " + config.DATA_PATH) os.mkdir(config.DATA_PATH) # Imprime en el log los parámetros de entrada logger.info("[pelisalacarta.py] sys.argv=%s" % str(sys.argv)) # Crea el diccionario de parametros params = dict() if len(sys.argv) >= 2 and len(sys.argv[2]) > 0: params = dict(part.split('=') for part in sys.argv[2][1:].split('&')) logger.info("[pelisalacarta.py] params=%s" % str(params)) # Extrae la url de la página if (params.has_key("url")): url = urllib.unquote_plus(params.get("url")) else: url = '' # Extrae la accion if (params.has_key("action")): action = params.get("action") else: action = "selectchannel" # Extrae el server if (params.has_key("server")): server = params.get("server") else: server = "" # Extrae la categoria if (params.has_key("category")): category = urllib.unquote_plus(params.get("category")) else: if params.has_key("channel"): category = params.get("channel") else: category = "" # Extrae la serie if (params.has_key("Serie")): serie = params.get("Serie") else: serie = "" logger.info("[pelisalacarta.py] url=" + url + ", action=" + action + ", server=" + server + ", category=" + category + ", serie=" + serie) #JUR - Gestión de Errores de Internet (Para que no casque el plugin # si no hay internet (que queda feo) try: # Accion por defecto - elegir canal if (action == "selectchannel"): import channelselector as plugin plugin.mainlist(params, url, category) # Actualizar version elif (action == "update"): try: import updater updater.update(params) except ImportError: logger.info( "[pelisalacarta.py] Actualizacion automática desactivada") import channelselector as plugin plugin.mainlist(params, url, category) # Reproducir un STRM elif (action == "strm"): import xbmctools xbmctools.playstrm(params, url, category) # El resto de acciones vienen en el parámetro "action", y el canal en el parámetro "channel" else: # Actualiza el canal si ha cambiado if action == "mainlist" and config.getSetting( "updatechannels") == "true": try: import updater actualizado = updater.updatechannel(params.get("channel")) if actualizado: import xbmcgui advertencia = xbmcgui.Dialog() advertencia.ok("pelisalacarta", params.get("channel"), config.getLocalizedString(30063)) except: for line in sys.exc_info(): logger.error("%s" % line) logger.info("Actualización de canales desactivada") # Ejecuta el canal exec "import " + params.get("channel") + " as channel" generico = False try: generico = channel.isGeneric() except: generico = False print "generico=", generico # Es un canal específico de xbmc if not generico: exec "channel." + action + "(params, url, category)" # Es un canal genérico else: if params.has_key("title"): title = urllib.unquote_plus(params.get("title")) else: title = "" if params.has_key("thumbnail"): thumbnail = urllib.unquote_plus(params.get("thumbnail")) else: thumbnail = "" if params.has_key("plot"): plot = urllib.unquote_plus(params.get("plot")) else: plot = "" if params.has_key("server"): server = urllib.unquote_plus(params.get("server")) else: server = "directo" if params.has_key("extradata"): extradata = urllib.unquote_plus(params.get("extradata")) else: extradata = "" if params.has_key("category"): category = urllib.unquote_plus(params.get("category")) else: category = "" if params.has_key("Serie"): Serie = urllib.unquote_plus(params.get("Serie")) else: Serie = "" import xbmctools if action == "play": xbmctools.playvideo(params.get("channel"), server, url, category, title, thumbnail, plot) else: from item import Item item = Item(channel=params.get("channel"), title=title, url=url, thumbnail=thumbnail, plot=plot, server=server, category=category, extra=extradata) if action != "findvideos": exec "itemlist = channel." + action + "(item)" else: # Intenta ejecutar una posible funcion "findvideos" del canal try: exec "itemlist = channel." + action + "(item)" # Si no funciona, lanza el método genérico para detectar vídeos except: itemlist = findvideos(item) xbmctools.renderItems(itemlist, params, url, category) except urllib2.URLError, e: for line in sys.exc_info(): logger.error("%s" % line) import xbmcgui ventana_error = xbmcgui.Dialog() # Agarra los errores surgidos localmente enviados por las librerias internas if hasattr(e, 'reason'): logger.info("Razon del error, codigo: %d , Razon: %s" % (e.reason[0], e.reason[1])) texto = config.getLocalizedString( 30050) # "No se puede conectar con el sitio web" ok = ventana_error.ok("pelisalacarta", texto) # Agarra los errores con codigo de respuesta del servidor externo solicitado elif hasattr(e, 'code'): logger.info("codigo de error HTTP : %d" % e.code) texto = ( config.getLocalizedString(30051) % e.code ) # "El sitio web no funciona correctamente (error http %d)" ok = ventana_error.ok("pelisalacarta", texto) else: pass
def run(): logger.info("[pelisalacarta.py] run") # Verifica si el path de usuario del plugin está creado if not os.path.exists(config.DATA_PATH): logger.debug("[pelisalacarta.py] Path de usuario no existe, se crea: "+config.DATA_PATH) os.mkdir(config.DATA_PATH) # Imprime en el log los parámetros de entrada logger.info("[pelisalacarta.py] sys.argv=%s" % str(sys.argv)) # Crea el diccionario de parametros params = dict() if len(sys.argv)>=2 and len(sys.argv[2])>0: params = dict(part.split('=') for part in sys.argv[ 2 ][ 1: ].split('&')) logger.info("[pelisalacarta.py] params=%s" % str(params)) # Extrae la url de la página if (params.has_key("url")): url = urllib.unquote_plus( params.get("url") ) else: url='' # Extrae la accion if (params.has_key("action")): action = params.get("action") else: action = "selectchannel" # Extrae el server if (params.has_key("server")): server = params.get("server") else: server = "" # Extrae la categoria if (params.has_key("category")): category = urllib.unquote_plus( params.get("category") ) else: if params.has_key("channel"): category = params.get("channel") else: category = "" # Extrae la serie if (params.has_key("Serie")): serie = params.get("Serie") else: serie = "" logger.info("[pelisalacarta.py] url="+url+", action="+action+", server="+server+", category="+category+", serie="+serie) #JUR - Gestión de Errores de Internet (Para que no casque el plugin # si no hay internet (que queda feo) try: # Accion por defecto - elegir canal if ( action=="selectchannel" ): import channelselector as plugin plugin.mainlist(params, url, category) # Actualizar version elif ( action=="update" ): try: import updater updater.update(params) except ImportError: logger.info("[pelisalacarta.py] Actualizacion automática desactivada") import channelselector as plugin plugin.mainlist(params, url, category) # Reproducir un STRM elif (action=="strm"): import xbmctools xbmctools.playstrm(params, url, category) # El resto de acciones vienen en el parámetro "action", y el canal en el parámetro "channel" else: exec "import "+params.get("channel")+" as plugin" exec "plugin."+action+"(params, url, category)" except urllib2.URLError,e: ventana_error = xbmcgui.Dialog() # Agarra los errores surgidos localmente enviados por las librerias internas if hasattr(e, 'reason'): logger.info("Razon del error, codigo: %d , Razon: %s" %(e.reason[0],e.reason[1])) texto = config.getLocalizedString(30050) # "No se puede conectar con el sitio web" ok = ventana_error.ok ("pelisalacarta", texto) # Agarra los errores con codigo de respuesta del servidor externo solicitado elif hasattr(e,'code'): logger.info("codigo de error HTTP : %d" %e.code) texto = (config.getLocalizedString(30051) % e.code) # "El sitio web no funciona correctamente (error http %d)" ok = ventana_error.ok ("pelisalacarta", texto) else: pass
def listarvideos(params,url,category,data): titulo = params.get("title") logger.info("[dospuntocerovision.py] listarvideos ") plot = params.get("plot") patronmovshare = 'href="(http://www.movshare.net/.*?)"[^>]+>(.*?)<' patronmegavideoflv= 'href="(http://www.megavideoflv.com/.*?)"' patronmegavideo = 'href="http://www.megavideo.com/.*?v=(.*?)\&.*?>(.*?)</a>' patronmegavideo2 = '(<b[^"]+|<b[^<]+<b[^"]+)".*?http\:\/\/www.megavideo.com/\?(v\=|d\=)([A-Z0-9]{8})".*?>(.*?)</a>(.*?)<' patronvideo = "<a href='.*?'>(.*?)<.*?src=\"([^\"]+)\".*? alt=.*?;\">(.*?)</div>" patroncinegratis = 'href="(http://www.cinegratis24h.com/.*?)"' patronflv = 'flashvars="file=(http.*?.flv)' scrapedtitle = "" scrapedthumbnail = "" scrapedplot = "" #------------------------------------------------------------------------------- matchesvideo = re.compile(patronvideo,re.DOTALL).findall(data) for match in matchesvideo: scrapedtitle = match[0] scrapedthumbnail = match[1] scrapedplot = match [2] scrapedplot = re.sub("<[^>]+>"," ",scrapedplot) scrapedplot = scrapedplot.replace("¿","�") scrapedplot = acentos(scrapedplot) if DEBUG and ("+" == plot): detalle = "Esta opcion permite buscar el trailer en youtube para esta pelicula y muestra hasta seis titulos mas aproximados si los hay \n " xbmctools.addnewfolder( "trailertools" , "buscartrailer" , category ,config.getLocalizedString(30110)+" "+scrapedtitle , titulo , os.path.join(IMAGES_PATH, 'trailertools.png'), detalle ) #Buscar trailer para #------------------------------------------------------------------------------- matchesmegavideo = re.compile(patronmegavideo,re.DOTALL).findall(data) # busca los links de megavideo #http://www.megavideo.com/?s=dospuntocerovision&v=R30GGEMG&confirmed=1 #logger.info("videos Match " +matchesmegavideo[0]) for match in matchesmegavideo: scrapedurl = match[0] # A�ade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Megavideo" , scrapedtitle+" - "+match[1]+" - (Megavideo)" , scrapedurl , scrapedthumbnail , scrapedplot ) #http://www.megavideo.com/?v=0I5DDHA8 matchesmegavideo = re.compile(patronmegavideo2,re.DOTALL).findall(data) # busca los links de megavideo for match in matchesmegavideo: scrapedurl = match[2] titulo = re.sub("<[^>]+>","",match[0]) titulo = titulo.replace("<a href=","") titulo = titulo.replace("<a style=","") titulo = titulo.replace("<span style=","") titulo = titulo.replace("<div style=","") if "megavideo" in match[3]:titulo=titulo +match[4] else: titulo = titulo+match[3]+match[4] if "v" in match[1]: xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Megavideo" , scrapedtitle+" - "+titulo+" - (Megavideo)" , scrapedurl , scrapedthumbnail , scrapedplot ) elif "d" in match[1]: xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Megaupload" , scrapedtitle+" - "+titulo+" - (Megaupload)" , scrapedurl , scrapedthumbnail , scrapedplot ) #------------------------------------------------------------------------------- matchescinegratis= re.compile(patroncinegratis,re.DOTALL).findall(data) # busca los links de la pagina de cinegratis24h.com if len(matchescinegratis)>0: #logger.info("videos Match " +matchescinegratis[0]) data1 = scrapertools.cachePage(matchescinegratis[0]) matchesflv = re.compile(patronflv,re.DOTALL).findall(data1) c = 0 for match in matchesflv: c = c + 1 scrapedurl = match # A�ade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Directo" , scrapedtitle +" - "+"parte "+str(c)+" (FLV) (V.O.S.)", scrapedurl , scrapedthumbnail , scrapedplot ) #------------------------------------------------------------------------------- matchesmegavideoflv = re.compile(patronmegavideoflv,re.DOTALL).findall(data) # Busca los link de megavideoflv.com if len(matchesmegavideoflv)>0: #logger.info("videos Match " +matchesmegavideoflv[0]) data1 = scrapertools.cachePage(matchesmegavideoflv[0]) matchesflv = re.compile(patronflv,re.DOTALL).findall(data1) c = 0 for match in matchesflv: c = c + 1 scrapedurl = match # A�ade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Directo" , scrapedtitle +" - "+"parte "+str(c)+" (FLV)", scrapedurl , scrapedthumbnail , scrapedplot ) matchesmovshare = re.compile(patronmovshare,re.DOTALL).findall(data) if len(matchesmovshare)>0: #import movshare total = len(matchesmovshare) for match in matchesmovshare: logger.info("movshare link : "+match[0]) import movshare if "#" in match[0]: urlsplited = match[0].split("#") scrapedurl = urlsplited[0] else: scrapedurl = match[0] if len(scrapedurl)>0: xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Movshare" , scrapedtitle +" - "+match[1]+" (Movshare)", scrapedurl , scrapedthumbnail , scrapedplot ) #------------------------------------------------------------------------------- matchesvideoflv = re.compile(patronflv,re.DOTALL).findall(data) # busca los link flashvar directos if len(matchesvideoflv)>0: for match in matchesvideoflv: scrapedurl = match # A�ade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Directo" , scrapedtitle +" - "+"Directo (FLV)", scrapedurl , scrapedthumbnail , scrapedplot ) # Busca la lista de los videos documentales de suricato.com para youtube patronyoutube = '<param name="movie" value="http://www.youtube.com/p/(.*?)\&' matchyoutube = re.compile(patronyoutube,re.DOTALL).findall(data) if len(matchyoutube)>0: for match in matchyoutube: listyoutubeurl = 'http://www.youtube.com/view_play_list?p='+match data1 = scrapertools.cachePage(listyoutubeurl) newpatronyoutube = '<a href="(.*?)".*?<img src="(.*?)".*?alt="([^"]+)"' matchnewyoutube = re.compile(newpatronyoutube,re.DOTALL).findall(data1) if len(matchnewyoutube)>0: for match2 in matchnewyoutube: scrapedthumbnail = match2[1] scrapedtitle = match2[2] scrapedurl = match2[0] logger.info(" lista de links encontrados U "+str(len(matchnewyoutube))) xbmctools.addnewvideo( CHANNELNAME , "youtubeplay" , category , "Directo" , scrapedtitle +" - "+"(youtube) ", scrapedurl , scrapedthumbnail , scrapedplot ) #------------------------------------------------------------------------------- patronyoutube = '<a href="http://www.youtube.com(/watch\?v\=.*?)".*?>(.*?)</a>' matchyoutube = re.compile(patronyoutube,re.DOTALL).findall(data) for match in matchyoutube: scrapedtitle = match[1] scrapedtitle = re.sub("<[^>]+>"," ",scrapedtitle) scrapedurl = match[0] xbmctools.addnewvideo( CHANNELNAME , "youtubeplay" , category , "Directo" , scrapedtitle +" - "+"(youtube) ", scrapedurl , scrapedthumbnail , scrapedplot ) # busca los link directos de Google patrongoogle = 'href="(http://video.google.com/videoplay.*?)"' matchesgoogle = re.compile(patrongoogle,re.DOTALL).findall(data) for match in matchesgoogle: urllink = "http://www.flashvideodownloader.org/download.php?u="+match logger.info(" Url = "+urllink[0]) data1 = scrapertools.cachePage(urllink) newpatron = '</script><div.*?<a href="(.*?)" title="Click to Download">' newmatches = re.compile(newpatron,re.DOTALL).findall(data1) if len(newmatches)>0: scrapedurl = newmatches[0] xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "Directo" , scrapedtitle +" - "+"(Google) ", scrapedurl , scrapedthumbnail , scrapedplot ) # busca las url de los videos alojados en tu.tv patronvideotv = '(http://www.tu.tv/videos/.*?)"><img src="(.*?)" alt="(.*?)".*?' #logger.info("dataa "+data) matchestv = re.compile(patronvideotv,re.DOTALL).findall(data) for match in matchestv: xbmctools.addnewfolder( CHANNELNAME , "listvideosTVmirror" , category , match[2] , match[0] , match[1], scrapedplot ) # Busca las URLs de los videos alojados en videoweed patronvideos = 'href="(http://www.videoweed.com/file/[^"]+)" target="_blank">(.*?)</a>' matchesweed = re.compile(patronvideos,re.DOTALL).findall(data) if len(matchesweed)>0: for match in matchesweed: scrapedurl = match[0] xbmctools.addnewvideo( CHANNELNAME , "detail" , category , "videoweed" , scrapedtitle +" - "+match[1]+" (Videoweed)", scrapedurl , scrapedthumbnail , scrapedplot )
def listvideos(params,url,category): logger.info("[peliculas21.py] listvideos") if url=="": url = "http://www.peliculas21.com" # Descarga la página data = scrapertools.cachePage(url) #logger.info(data) #title = urllib.unquote_plus(params.get("title")) #thumbnail = urllib.unquote_plus(params.get("thumbnail")) #plot = urllib.unquote_plus(params.get("plot")) # Busca el area donde estan los videos y la descripcion patronvideos = '<div class="peliculadoblaje">(.*?)<!-- FIN #content-->' matches = re.compile(patronvideos,re.DOTALL).findall(data) # busca el titulo y el thumbnail patronvideos = '<img src="([^"]+)"[^>]+>[^<]+<[^>]+>([^<]+)</div>' matches2 = re.compile(patronvideos,re.DOTALL).findall(matches[0]) for match in matches2: title = match[1] thumbnail = urlparse.urljoin(url,match[0]) plot = "" patronvideos = '<b>Duración:</b>(.*?)<br />' duracion = re.compile(patronvideos,re.DOTALL).findall(matches[0]) if len(duracion)>0:plot = "Duracion:"+duracion[0] + "\n" patronvideos = '<b>Género:</b>(.*?)<br />' genero = re.compile(patronvideos,re.DOTALL).findall(matches[0]) if len(genero)>0:plot = plot + "Genero: "+genero[0] +"\n" patronvideos = '<b>Sinopsis:</b>(.*?)</div>' sinopsis = re.compile(patronvideos,re.DOTALL).findall(matches[0]) # Busca los actores matchesactores = buscactores(matches[0]) if len(matchesactores)>0: plot = plot + "Actores: " c = 0 actores = "ACTORES DE ESTA PELICULA :\n\n" for match in matchesactores: c = c + 1 actores = actores + "-"+match[1] + "\n" if c == 3: plot = plot + match[1] + "\n" elif c == 4: plot = plot + "* " + match[1]+" " else: plot = plot + match[1]+ " , " plot = plot + "\nSinopsis: " + sinopsis[0] plot = re.sub("<[^>]+>"," ",plot) # Busca el trailer patronvideos = '<param name="movie" value="([^"]+)"></param>' matchtrailer = re.compile(patronvideos,re.DOTALL).findall(matches[0]) if len(matchtrailer)>0: for match in matchtrailer: # Añade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "youtubeplay" , category ,"Directo", "Ver El Trailer de : "+title , match , thumbnail, plot ) else: import trailertools print title s = unicode( title, "latin-1" ) # Añade al listado de XBMC xbmctools.addnewfolder( "trailertools" , "buscartrailer" , category , config.getLocalizedString(30110)+" "+title , url , os.path.join(IMAGES_PATH, 'trailertools.png'), plot ) # Buscar trailer para matchesBK = matches[0] # Extrae las entradas (videos) para megavideo con tipo de audio patronvideos = '<span style="font-size:12px;"><strong>(.*?)</strong></span><br/>.*?' patronvideos += '<span.*?>.*?<a href="http\:\/\/www.megavideo.com\/[\?v=|v/]+([A-Z0-9]{8}).*?" target="_blank">1</a>.</span><br />' matches = re.compile(patronvideos,re.DOTALL).findall(matches[0]) scrapertools.printMatches(matches) encontrados = set() for match in matches: if match[1] not in encontrados: encontrados.add(match[1]) # Titulo scrapedtitle = title + " - [" +scrapertools.entityunescape(match[0])+ "]" + " (Megavideo)" # URL scrapedurl = match[1] # Thumbnail scrapedthumbnail = thumbnail # Argumento scrapedplot = plot # Depuracion if (DEBUG): logger.info("scrapedtitle="+scrapedtitle) logger.info("scrapedurl="+scrapedurl) logger.info("scrapedthumbnail="+scrapedthumbnail) # Añade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "play" , category ,"Megavideo", scrapedtitle , scrapedurl , scrapedthumbnail, scrapedplot ) if len(matches)==0: listavideos = servertools.findvideos(data) encontrados = set() for titulo,scrapedurl,servidor in listavideos: if scrapedurl.strip() not in encontrados: encontrados.add(scrapedurl.strip()) xbmctools.addnewvideo( CHANNELNAME , "play" , category ,servidor, title+ " - %s" % titulo , scrapedurl , thumbnail, plot ) ''' <span class="bloque-uploader">Anónimo</span> <span class="bloque-doblaje"><img src="../images/esp.gif" class="bandera" /></span> <span class="bloque-link">Opción 8: <a href="javascript:goTo('aHR0cDovL3d3dy5tZWdhdmlkZW8uY29tLz92PTVOM0JYOVMx', 'megavideo.com')" rel="nofollow">Ver película</a></span> ''' patronvideos = '<span class="bloque-doblaje">(.+?)</span>[^<]+' patronvideos +='<span class="bloque-link">[^<]+<a href="javascript\:goTo\(\'([^\']+)\'\, \'([^\']+)\'\)"(.+?)</span>' #patronvideos +='(?:\| <a href="javascript\:goTo\(\'([^\']+)\'\, \'([^\']+)\'\)".*?)</span>' matches = re.compile(patronvideos,re.DOTALL).findall(data) scrapertools.printMatches(matches) for match in matches: # URL if "megavideo" in match[2]: server = "Megavideo" elif "megaupload" in match[2]: server = "Megaupload" if "esp.gif" in match[0]: doblaje = "Español" else: doblaje = match[0].strip() base64 = decrypt21.Base64() try: url2 = re.compile("javascript\:goTo\(\'([^\']+)\'\, \'([^\']+)\'\)").findall(match[3])[0] scrapedurl2 = base64._extract_code(base64.decode(url2[0])) scrapedurl = base64._extract_code(base64.decode(match[1])) part1 = " Parte 1 " part2 = " Parte 2 " scrapedtitle2 = title + part2+ " - [" +doblaje+ "]" + " ("+server+")" #print match[3] except: scrapedurl = base64._extract_code(base64.decode(match[1])) part1 = "" part2 = "" scrapedtitle = title + part1+ " - [" +doblaje+ "]" + " ("+server+")" # Thumbnail scrapedthumbnail = thumbnail # Argumento scrapedplot = plot # Depuracion if (DEBUG): logger.info("scrapedtitle="+scrapedtitle) logger.info("scrapedurl="+scrapedurl) logger.info("scrapedthumbnail="+scrapedthumbnail) # Añade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "play" , category ,server, scrapedtitle , scrapedurl , scrapedthumbnail, scrapedplot ) if part2: xbmctools.addnewvideo( CHANNELNAME , "play" , category ,server, scrapedtitle2 , scrapedurl2 , scrapedthumbnail, scrapedplot ) # Extrae las entradas (videos) directos patronvideos = 'flashvars="file=([^\&]+)\&controlbar=over' matches = re.compile(patronvideos,re.DOTALL).findall(data) scrapertools.printMatches(matches) if len(matches)>0: data1 = scrapertools.cachePage(matches[0]) #logger.info(data) patron = 'author">(.*?)</media:credit>.*?<media\:content url="([^"]+)"' matches = re.compile(patron,re.DOTALL).findall(data1) scrapertools.printMatches(matches) for match in matches: # Añade al listado de XBMC xbmctools.addnewvideo( CHANNELNAME , "play" , category , "Directo" , title +" - ["+match[0]+"]"+ " (Directo)" , match[1] , thumbnail , plot ) # Busca otras peliculas relacionadas con los actores if len(matchesactores)>0: titulo = "Busca otros Films de los actores de esta pelicula" xbmctools.addnewfolder( CHANNELNAME , "listaractores" , category , titulo , matchesBK , thumbnail, actores ) # Lista peliculas relacionadas titulo = "Ver Peliculas Relacionadas" matches = buscarelacionados(matchesBK) plot2 = "PELICULAS RELACIONADAS :\n\n" for match in matches: plot2 = plot2 + "-"+match[1]+"\n" xbmctools.addnewfolder( CHANNELNAME , "listarelacionados" , category , titulo , matchesBK , thumbnail, plot2 ) # Label (top-right)... xbmcplugin.setPluginCategory( handle=pluginhandle, category=category ) # Disable sorting... xbmcplugin.addSortMethod( handle=pluginhandle, sortMethod=xbmcplugin.SORT_METHOD_NONE ) # End of directory... xbmcplugin.endOfDirectory( handle=pluginhandle, succeeded=True )
def channels_list(): channelslist = [] channelslist.append([ "Cinetube" , "cinetube" , "" , "ES" , "F" ]) channelslist.append([ "Peliculasyonkis" , "peliculasyonkis" , "" , "ES" , "F" ]) channelslist.append([ "Cinegratis" , "cinegratis" , "" , "ES" , "F,S,A,D" ]) channelslist.append([ "tumejortv.com" , "tumejortv" , "" , "ES" , "F,S" ]) channelslist.append([ "Peliculas21" , "peliculas21" , "" , "ES" , "F" ]) channelslist.append([ "Dospuntocerovision" , "dospuntocerovision" , "" , "ES" , "F,S" ]) channelslist.append([ "Cine15" , "cine15" , "" , "ES" , "F" ]) channelslist.append([ "Peliculasid" , "peliculasid" , "" , "ES" , "F" ]) channelslist.append([ "Cinegratis24h" , "cinegratis24h" , "" , "ES" , "F" ]) channelslist.append([ "Cine-Adicto" , "cineadicto" , "" , "ES" , "F,D" ]) channelslist.append([ "PelisFlv" , "pelisflv" , "" , "ES" , "F" ]) channelslist.append([ "NoloMires" , "nolomires" , "" , "ES" , "F" ]) channelslist.append([ "NewDivx" , "newdivx" , "" , "ES" , "F,D" ]) channelslist.append([ "Peliculas Online FLV" , "peliculasonlineflv" , "" , "ES" , "F,D" ]) channelslist.append([ "FilmesOnlineBr" , "filmesonlinebr" , "" , "PT" , "F" ]) channelslist.append([ "TVShack.cc (VO)" , "tvshack" , "" , "EN" , "F,S,A,D,M" ]) channelslist.append([ "DeLaTV" , "delatv" , "" , "ES" , "F" ]) channelslist.append([ "Pelis24" , "pelis24" , "" , "ES" , "F,S" ]) channelslist.append([ "Veocine" , "veocine" , "" , "ES" , "F,A,D" ]) channelslist.append([ "Pintadibujos" , "pintadibujos" , "" , "ES" , "F,A" ]) channelslist.append([ "Pelis Pekes" , "pelispekes" , "" , "ES" , "F,A" ]) channelslist.append([ "Descarga Cine Clásico" , "descargacineclasico" , "" , "ES" , "F,S" ]) channelslist.append([ "Capitan Cinema" , "capitancinema" , "" , "ES" , "F" ]) channelslist.append([ "Film Streaming" , "filmstreaming" , "" , "IT" , "F,A" ]) channelslist.append([ "No Megavideo" , "nomegavideo" , "" , "ES" , "F" ]) channelslist.append([ "LetMeWatchThis" , "letmewatchthis" , "" , "EN" , "F,S" ]) channelslist.append([ "Cineblog01" , "cineblog01" , "" , "IT" , "F,S,A" ]) channelslist.append([ "Seriesyonkis" , "seriesyonkis" , "Series" , "ES" , "S,A" ]) #Modificado por JUR para añadir la categoría channelslist.append([ "Seriespepito" , "seriespepito" , "" , "ES" , "S" ]) channelslist.append([ "Series21" , "series21" , "" , "ES" , "S" ]) channelslist.append([ "DeLaTV Series" , "bancodeseries" , "" , "ES" , "S" ]) channelslist.append([ "CastTV" , "casttv" , "" , "ES,EN" , "S" ]) channelslist.append([ "Ver Telenovelas Online", "vertelenovelasonline" , "" , "ES" , "S" ]) channelslist.append([ "Anime Foros" , "animeforos" , "" , "ES", "A" ]) channelslist.append([ "Yotix.tv" , "yotix" , "" , "ES" , "A" ]) channelslist.append([ "MCAnime" , "mcanime" , "" , "ES" , "A" ]) channelslist.append([ "Animetakus" , "animetakus" , "" , "ES" , "A" ]) channelslist.append([ "Ver-anime" , "veranime" , "" , "ES" , "A" ]) channelslist.append([ "Watchanimeon" , "watchanimeon" , "" , "EN" , "A" ]) channelslist.append([ "Animeid" , "animeid" , "" , "ES" , "A" ]) channelslist.append([ "Ovasid" , "ovasid" , "" , "ES" , "A" ]) channelslist.append([ "dibujosanimadosgratis" , "dibujosanimadosgratis", "" , "ES" , "A" ]) channelslist.append([ "DocumaniaTV" , "documaniatv" , "" , "ES" , "D" ]) channelslist.append([ "DocumentariesTV" , "documentariestv" , "" , "EN", "D" ]) channelslist.append([ "Documentalesyonkis" , "documentalesyonkis" , "" , "ES" , "D" ]) channelslist.append([ "Documentalesatonline" , "documentalesatonline" , "" , "ES" , "D" ]) channelslist.append([ "Discoverymx.Wordpress" , "discoverymx" , "" , "ES" , "D" ]) channelslist.append([ "Gratisdocumentales" , "gratisdocumentales" , "" , "ES" , "D" ]) channelslist.append([ "Programas TV Online" , "programastv" , "" , "ES" , "D" ]) channelslist.append([ "Redes.tv" , "redestv" , "" , "ES" , "D" ]) channelslist.append([ "Trailers ecartelera" , "ecarteleratrailers" , "" , "ES,EN" , "F" ]) channelslist.append([ config.getLocalizedString(30128), "trailertools" , "" , "" , "F" ]) channelslist.append([ "Stagevu" , "stagevusite" , "" , "" , "G" ]) channelslist.append([ "tu.tv" , "tutvsite" , "" , "ES", "G" ]) channelslist.append([ "Megavideo" , "megavideosite" , "" , "" , "G" ]) channelslist.append([ "Megaupload" , "megauploadsite" , "" , "" , "G" ]) if config.getSetting("enableadultmode") == "true": channelslist.append([ "PeliculasEroticas" , "peliculaseroticas" , "" , "ES" , "F" ]) channelslist.append([ "MocosoftX" , "mocosoftx" , "" , "ES" , "F" ]) channelslist.append([ "Anifenix.com" , "anifenix" , "" , "ES" , "F" ]) channelslist.append([ "tuporno.tv" , "tupornotv" , "" , "ES" , "F" ]) #channelslist.append([ "Divx Online" , "divxonline" , "" , "ES" , "F" ]) # added by ermanitu #channelslist.append([ "Eduman Movies" , "edumanmovies" , "" , "ES" , "F" ]) #channelslist.append([ "SesionVIP" , "sesionvip" , "" , "ES" , "F" ]) #channelslist.append([ "Pelis-Sevillista56" , "sevillista" , "" , "ES" , "F" ]) #channelslist.append([ "seriesonline.us" , "seriesonline" , "" , "ES" , "S" ]) #channelslist.append([ "Newcineonline" , "newcineonline" , "" , "ES" , "S" ]) #channelslist.append([ "PeliculasHD" , "peliculashd" , "" , "ES" , "F" ]) #channelslist.append([ "Wuapi" , "wuapisite" , "" , "ES" , "F" ]) #channelslist.append([ "Frozen Layer" , "frozenlayer" , "" , "ES" , "A" ]) return channelslist