def search(params,url,category): logger.info("[programastv.py] search") keyboard = xbmc.Keyboard('') keyboard.doModal() if (keyboard.isConfirmed()): tecleado = keyboard.getText() if len(tecleado)>0: #convert to HTML tecleado = tecleado.replace(" ", "+") searchUrl = "http://programastvonline.blogspot.com/search?q="+tecleado itemlist=[] itemlist.append( Item(channel=CHANNELNAME, title=tecleado , action="parsear", url="http://programastvonline.blogspot.com/search?q="+tecleado, folder=True) ) #searchresults(params,searchUrl,category) xbmctools.renderItems(itemlist, params, url, category) xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category=category ) # Disable sorting... xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) # End of directory... xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def novedades(params,url,category): logger.info("[anifenix.py] novedades") itemlist = getnovedades(params,url,category) xbmctools.renderItems(itemlist, params, url, category)
def mainlist(params,url,category): logger.info("[anifenix.py] mainlist") itemlist = getmainlist(params,url,category) xbmctools.renderItems(itemlist, params, url, category)
def capitulos(params,url,category): logger.info("[anifenix.py] capitulos") itemlist = getcapitulos(params,url,category) xbmctools.renderItems(itemlist, params, url, category)
def parsear(params,url,category): logger.info("[programastv.py] parsear") itemlist = parse(params,url,category) xbmctools.renderItems(itemlist, params, url, category)
def searchvideos(params, url, category): logger.info("[programastv.py] parse") # ------------------------------------------------------ # Descarga la página # ------------------------------------------------------ data = scrapertools.cachePage(url) #logger.info(data) # ------------------------------------------------------ # Extrae las entradas # ------------------------------------------------------ #quitamos a partir de los comentarios data=data[0:data.index('class=\'post-footer\'>')] videos=servertools.findvideos(data) #xbmc.output( videos[0][2] + " es 02") #xbmc.output( videos[1][2] + " es 12") #TODO extract plot y thumbnail if len(videos)>0: if (videos[0][2] == "Megavideo") and (videos[1][2] == "Megaupload"): xbmc.output("asumimos que solo hay un video con dos mirrors") patronvideos = 'class=\'post-title entry-title\'>.+?<a href=\'.+?\'>(.+?)</a>' matches = re.compile(patronvideos,re.DOTALL).findall(data) xbmc.output(matches[0]) xbmctools.addnewvideo( CHANNELNAME , "play" , category , "Megavideo" , matches[0] , videos[0][1] , "" , "" ) xbmctools.addnewvideo( CHANNELNAME , "play" , category , "Megaupload" , matches[0] , videos[1][1] , "" , "" ) elif len(videos)==1: if re.search('&xtp=(.+?)_VIDEO',videos[0][1]): patronvideos = '&xtp=(.+?)_VIDEO' matches = re.compile(patronvideos,re.DOTALL).findall(data) videos[0][1]=matches[0] xbmc.output("aqui estamos") patronvideos = 'class=\'post-title entry-title\'>.+?<a href=\'.+?\'>(.+?)</a>' matches = re.compile(patronvideos,re.DOTALL).findall(data) xbmctools.addnewvideo( CHANNELNAME , "play" , category , videos[0][2] , matches[0] , videos[0][1] , "" , "" ) else: xbmc.output("hay mas de 1 video") for video in videos: if video[2].find("youtube")!=-1: continue #xbmc.output(video[2] + video[1] + " 2 + 1") indexvideo=data.index(video[1]) #xbmc.output(str(indexvideo)) #if (video[2]=="Megaupload"): # #xbmc.output(str(indexvideo)) # indexvideo=data.rindex(">-",0,indexvideo) # #xbmc.output(str(indexvideo)) indexvideo1=data.rindex(">-",0,indexvideo) #xbmc.output(str(indexvideo1)) indexvideo2=data.rindex(">-",0,indexvideo1) #xbmc.output(str(indexvideo2)) #xbmc.output(data[indexvideo2+1:indexvideo1]) nombre=re.sub('<.+?>','',data[indexvideo2+3:indexvideo1-5]) while re.search('egaupl', nombre) or re.search('egavid', nombre): indexvideo3=data.rindex(">-",0, indexvideo2) nombre=re.sub('<.+?>','',data[indexvideo3+3:indexvideo2-5]) indexvideo2=indexvideo3 xbmctools.addnewvideo( CHANNELNAME , "play" , category , video[2] , nombre + " " + video[2] , video[1] , "" , "" ) else: xbmc.output("es un listado") #xbmc.output(data) data=data[data.index('class=\'post-header-line-1\'')+33:] #xbmc.output(data) xbmc.output("aqui llego") p = MyParser() p.feed(data) p.close() itemlist = [] for k, v in p.anchors.items(): print k, "=>", v if re.search('programastvonline.blogspot.com',v[0]): itemlist.append( Item(channel=CHANNELNAME, title=k , action="parsear", url=v[0], folder=True) ) xbmctools.renderItems(itemlist, params, url, category) #'egaupl', nombre) #myparser=MyParser(data) #myparser.parse(data) #links = myparser.get_hyperlinks() # get the hyperlinks list #xbmc.output(str(len(links))) # print all the links #descriptions = myparser.get_descriptions() # get the hyperlinks list #xbmc.output("b",descriptions) # print all the links #xbmc.output("aqui llego 1") #post-header-line-1 #format = formatter.NullFormatter() # create default formatter #htmlparser = LinksExtractor(format) # create new parser object # for video in listavideos: # videotitle = video[0] # scrapedurl = video[1] # server = video[2] # xbmctools.addnewvideo( CHANNELNAME , "play" , category , server , title.strip()+" "+match[1]+" "+match[2]+" "+videotitle , scrapedurl , thumbnail , plot ) # ------------------------------------------------------------------------------------ # Busca los enlaces a los videos # ------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------ # Label (top-right)... xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category=category ) # Disable sorting... xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_NONE ) # End of directory... xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
def run(): import sys logger.info("[tvalacarta.py] run") # Verifica si el path de usuario del plugin está creado if not os.path.exists(config.get_data_path()): logger.debug("[tvalacarta.py] Path de usuario no existe, se crea: "+config.get_data_path()) os.mkdir(config.get_data_path()) # Imprime en el log los parámetros de entrada logger.info("[tvalacarta.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("[tvalacarta.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" ): if config.get_setting("updatechannels")=="true": try: from core import updater actualizado = updater.updatechannel("channelselector") if actualizado: import xbmcgui advertencia = xbmcgui.Dialog() advertencia.ok("tvalacarta",config.get_localized_string(30064)) except: pass import channelselector as plugin plugin.mainlist(params, url, category) # Actualizar version elif ( action=="update" ): try: from core import updater updater.update(params) except ImportError: logger.info("[pelisalacarta.py] Actualizacion automática desactivada") import channelselector as plugin plugin.listchannels(params, url, category) elif (action=="channeltypes"): import channelselector as plugin plugin.channeltypes(params,url,category) elif (action=="listchannels"): 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: if action=="mainlist" and config.get_setting("updatechannels")=="true": try: from core import updater actualizado = updater.updatechannel(params.get("channel")) if actualizado: import xbmcgui advertencia = xbmcgui.Dialog() advertencia.ok("plugin",params.get("channel"),config.get_localized_string(30063)) except: pass # La acción puede estar en el core, o ser un canal regular. El buscador es un canal especial que está en pelisalacarta regular_channel_path = os.path.join( config.get_runtime_path(), PLUGIN_NAME , 'channels' , params.get("channel")+".py" ) core_channel_path = os.path.join( config.get_runtime_path(), 'core' , params.get("channel")+".py" ) if params.get("channel")=="buscador": import pelisalacarta.buscador as channel elif os.path.exists( regular_channel_path ): exec "import pelisalacarta.channels."+params.get("channel")+" as channel" elif os.path.exists( core_channel_path ): exec "from core import "+params.get("channel")+" as channel" generico = False # Esto lo he puesto asi porque el buscador puede ser generico o normal, esto estará asi hasta que todos los canales sean genericos if category == "Buscador_Generico": generico = True else: 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" if params.has_key("extradata"): extra = urllib.unquote_plus( params.get("extradata") ) else: extra = "" if params.has_key("subtitle"): subtitle = urllib.unquote_plus( params.get("subtitle") ) else: subtitle = "" from core.item import Item item = Item(channel=params.get("channel"), title=title , url=url, thumbnail=thumbnail , plot=plot , server=server, category=category, extra=extra, subtitle=subtitle) if item.subtitle!="": logger.info("Descargando subtítulos de "+item.subtitle) from core import downloadtools ficherosubtitulo = os.path.join( config.get_data_path() , "subtitulo.srt" ) if os.path.exists(ficherosubtitulo): os.remove(ficherosubtitulo) downloadtools.downloadfile(item.subtitle, ficherosubtitulo ) config.set_setting("subtitulo","true") else: logger.info("Sin subtitulos") from core import xbmctools if action=="play": # Si el canal tiene una acción "play" tiene prioridad try: itemlist = channel.play(item) if len(itemlist)>0: item = itemlist[0] except: import sys for line in sys.exc_info(): logger.error( "%s" % line ) xbmctools.playvideo(params.get("channel"),item.server,item.url,item.category,item.title,item.thumbnail,item.plot,subtitle=item.subtitle) else: 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: import sys 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.get_localized_string(30050) # "No se puede conectar con el sitio web" ok = ventana_error.ok ("plugin", 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.get_localized_string(30051) % e.code) # "El sitio web no funciona correctamente (error http %d)" ok = ventana_error.ok ("plugin", texto)
def secciones(params,url,category): logger.info("[programastv.py] seccions") itemlist = getsecciones(params,url,category) xbmctools.renderItems(itemlist, params, url, category)
def run(): logger.info("[tvalacarta.py] run") # Verifica si el path de usuario del plugin está creado if not os.path.exists(config.DATA_PATH): logger.debug("[tvalacarta.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("[tvalacarta.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("[tvalacarta.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" ): try: import updater updater.update(params) except ImportError: logger.info("[pelisalacarta.py] Actualizacion automática desactivada") 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: if action=="mainlist" and config.get_setting("updatechannels")=="true": from core import downloadtools actualizado = downloadtools.updatechannel(params.get("channel")) if actualizado: import xbmcgui advertencia = xbmcgui.Dialog() advertencia.ok("pelisalacarta",params.get("channel"),config.get_localized_string(30063)) exec "import tvalacarta.channels."+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" if params.has_key("extradata"): extra = urllib.unquote_plus( params.get("extradata") ) else: extra = "" from core import xbmctools if action=="play": xbmctools.playvideo(params.get("channel"),server,url,category,title,thumbnail,plot) else: from core.item import Item item = Item(channel=params.get("channel"), title=title , url=url, thumbnail=thumbnail , plot=plot , server=server, extra=extra) exec "itemlist = channel."+action+"(item)" xbmctools.renderItems(itemlist, params, url, category) except urllib2.URLError,e: 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.get_localized_string(30050) # "No se puede conectar con el sitio web" ok = ventana_error.ok ("tvalacarta", 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.get_localized_string(30051) % e.code) # "El sitio web no funciona correctamente (error http %d)" ok = ventana_error.ok ("tvalacarta", texto) else: pass
def run(): logger.info("[tvalacarta.py] run") # Verifica si el path de usuario del plugin está creado if not os.path.exists(config.DATA_PATH): logger.debug("[tvalacarta.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("[tvalacarta.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("[tvalacarta.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"): try: import updater updater.update(params) except ImportError: logger.info( "[pelisalacarta.py] Actualizacion automática desactivada") 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: if action == "mainlist" and config.get_setting( "updatechannels") == "true": from core import downloadtools actualizado = downloadtools.updatechannel( params.get("channel")) if actualizado: import xbmcgui advertencia = xbmcgui.Dialog() advertencia.ok("pelisalacarta", params.get("channel"), config.get_localized_string(30063)) exec "import tvalacarta.channels." + 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" if params.has_key("extradata"): extra = urllib.unquote_plus(params.get("extradata")) else: extra = "" from core import xbmctools if action == "play": xbmctools.playvideo(params.get("channel"), server, url, category, title, thumbnail, plot) else: from core.item import Item item = Item(channel=params.get("channel"), title=title, url=url, thumbnail=thumbnail, plot=plot, server=server, extra=extra) exec "itemlist = channel." + action + "(item)" xbmctools.renderItems(itemlist, params, url, category) except urllib2.URLError, e: 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.get_localized_string( 30050) # "No se puede conectar con el sitio web" ok = ventana_error.ok("tvalacarta", 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.get_localized_string(30051) % e.code ) # "El sitio web no funciona correctamente (error http %d)" ok = ventana_error.ok("tvalacarta", texto) else: pass
def playByID(params,url,category): logger.info("[megalivewall.py] listchannel") itemlist = getplayByID(params,url,category) if len(itemlist)>0: xbmctools.renderItems(itemlist, params, url, category,isPlayable='true')
def listchannel(params,url,category): logger.info("[megalivewall.py] listchannel") itemlist = getlistchannel(params,url,category) xbmctools.renderItems(itemlist, params, url, category,isPlayable='true')
def listfavorites(params,url,category): logger.info("[megalivewall.py] listfavorites") itemlist = getlistfavorites(params,url,category) if len(itemlist)>0: xbmctools.renderItems(itemlist, params, url, category,isPlayable='true')
def listcategory(params,url,category): logger.info("[megalivewall.py] listcategory") itemlist = getlistcategory(params,url,category) xbmctools.renderItems(itemlist, params, url, category)
def mainlist(params,url,category): logger.info("[megalivewall.py] mainlist") itemlist = getmainlist(params,url,category) xbmctools.renderItems(itemlist, params, url, category)