Página 1 de 3

Actualización de SimpleTV

Publicado: 07 Mar 2013, 12:03
por ferniskywalker
Hay un proyecto de Chitawar en el que actualiza la lista de SimpleTv cada 5 Minutos.
He intentado modificar SimpleTv.py para que lea la lista de un directorio de mi ordenador y no me ha funcionado.

Trabajo con Ubuntu 12.04 y me gustaría poder cargar la lista de un archivo que yo renombraría para que tuviese el mismo nombre, pero que cambia el contenido.

Podría alguien decirme como hacerlo??.

El directorio es:
/home/usuario/descargas/nombrearchivo.m3u

Muchas gracias

Re: Actualización de SimpleTV

Publicado: 07 Mar 2013, 17:52
por losedes
Me uno a la peticion pero con un AppleTV2! Seria la bomba! He estado en su blog y la verdad es que si se pudiera implementar seria genial! Para mi el unico problema de este plugin es lo rapido que dejan de funcionar los enlaces. Si en cambio tenemos una lista actualizada automaticamente cada 5 minutos...el resultado seria la bomba!


Jeeeeeesus!!!!!! Ayuda!!!!! Que te vaaaa a guuuuuustaaaaarrrrrrrr :lol: :lol: :lol: :lol: :lol:

Re: Actualización de SimpleTV

Publicado: 08 Mar 2013, 13:52
por carri69
Yo lo he estado mirando y la verdad es que es un trabajo muy bueno. Jesús nos podrá decir cómo lo ve para mywebtv.

Re: Actualización de SimpleTV

Publicado: 10 Mar 2013, 08:37
por jesus
Es lo mismo que se hace con TVenLinux, aunque el formato es distinto.

Le echo un vistazo, tampoco me gusta mucho tener que actualizar el canal de TVenLinux cada vez que cambia. Lo lógico sería leerlos online ambos.

Gracias por el aviso, son buenas noticias :)

Re: Actualización de SimpleTV

Publicado: 10 Mar 2013, 18:19
por bittor
TVenLinux no se actualiza muy a menudo, pero esta lista se actualiza varias veces al día, por lo que tener la lista localmente en el disco duro no tiene mucho sentido a no ser que no esté disponible online.

He modificado el canal de SimpleTV para que se descargue esa lista y si no está disponible se la descargue de otra página distinta pero la lista es exactamente la misma con los mismos canales y datos, si tampoco pudiera se usaría una copia local de la última vez que se bajara la lista.

De esta manera siempre tendríamos los canales disponibles, aunque en el caso de usar el archivo local los canales quedarían desactualizados, pero los canales oficiales de las cadenas todavía seguirían funcionando durante una temporada.

No sé por qué se mostraban sólo los canales rtmp, así que he quitado esa limitación y se mostrarán todos los canales, de esta manera se podrá ver el canal Real Madrid TV entre otros :)

La versión que he hecho es multiplataforma y no sé si funcionará en mywebtv.

No lo he probado mucho, pero parece que funciona bien.

Jesús, ¿te lo paso para que le eches un vistazo?

Re: Actualización de SimpleTV

Publicado: 10 Mar 2013, 19:00
por losedes
No esperéis al próximo viernes por favor!!!!!! Agregad el archivo por aquí!!! ;)

Re: Actualización de SimpleTV

Publicado: 10 Mar 2013, 22:50
por ferniskywalker
No es necesario hacer demasiado, el programa está hecho, modifica el archivo simpletv.py dentro deL directorio channels y dime donde poner la ruta del archivo descargado. Lo demás lo tienes hecho.

Muchas gracias

Re: Actualización de SimpleTV

Publicado: 10 Mar 2013, 22:53
por losedes
Si claro! Eso es precisamente lo que necesito saber! ;)

Re: Actualización de SimpleTV

Publicado: 11 Mar 2013, 09:08
por bittor
ferniskywalker escribió:No es necesario hacer demasiado, el programa está hecho, modifica el archivo simpletv.py dentro deL directorio channels y dime donde poner la ruta del archivo descargado. Lo demás lo tienes hecho.
Ya sé que con el archivo simpletv.py es suficiente, pero mis cambios funcionan en la versión tvalacarta-rss y no sé si también funcionarán en mywebtv porque lo he convertido a canal multiplataforma y las librerías del plugin son distintas, por eso le decía a Jesús que si quería echarle un vistazo por si necesita una adaptación.

Re: Actualización de SimpleTV

Publicado: 11 Mar 2013, 19:46
por bittor
Bueno, aquí esta el simpletv.py a ver si os funciona.
El directorio donde se guarda la lista localmente es el directorio "streams" donde está el archivo "TVenLinux.sh".

Está hecho rápidamente, así que es posible que haya algún fallo o alguna parte sea mejorable, pero lo acabo de probar y la lista de canales se actualiza correctamente.

No uso mywebtv, así que no puedo daros soporte si no os funciona, aunque el código está comentado y es fácil de modificar.

Código: Seleccionar todo

# -*- coding: iso-8859-1 -*-
#------------------------------------------------------------
# mywebtv - XBMC Plugin
# Canal SimpleTV
# http://blog.tvalacarta.info/plugin-xbmc/mywebtv/
#------------------------------------------------------------

import urlparse,urllib2,urllib,re
import os
import sys
from core import scrapertools
from core import config
from core import logger
from core.item import Item

DEBUG = True
CHANNELNAME = "simpletv"

# Prioridad al cargar listas. 1=Archivo local, 0=URL's de internet y si no funcionan archivo local
simpletv_pri_local = 0

simpletv_urls = [
    'http://playlist.iptvonline.cu.cc/',
    'http://juanin.co.nf/mokolist.m3u'
]

# Archivo local
simpletv_local = os.path.join( config.get_runtime_path() , "streams" , "simpletv.m3u" )

def isGeneric():
    return True

def mainlist(item):
    logger.info("[simpletv.py] mainlist")

    lista_correcta = False
    if simpletv_pri_local == 0:
        # Descargar las distintas páginas que tienen las listas hasta que una sea válida
        for page_url in simpletv_urls:
            if lista_correcta: 
                print "Lista simpletv detectada"
                break

            print "Probando url: %s" % page_url
            data = scrapertools.cachePage(page_url)
        
            # Revisar si es un formulario para descargar la lista
            patron = '<form .*?method="post" action="(.*?)">.*?submit name="(.*?)" value="(.*?)"'
            matches = re.compile(patron,re.DOTALL).findall(data)
            if len(matches)==0:
                # Revisar si es una lista
                if re.search("#EXTINF:-1", data): lista_correcta = True
            else:
                if DEBUG: print "Formulario detectado"
                for match in matches:
                    page_url = "%s%s" % (page_url, str(match[0]))
                    page_post = "%s=%s" % (str(match[1]), str(match[2]))
                    if DEBUG: print "page_url: %s\npage_post: %s" % (page_url, page_post)
                    data = scrapertools.cachePage( page_url, post=page_post )
                    # Revisar si es una lista
                    if re.search("#EXTINF:-1", data): lista_correcta = True

    # Si no ha encontrado ninguna lista, leemos el archivo local
    # y si la ha encontrado la guardamos en el archivo local
    if not lista_correcta:
        import os.path
        if os.path.exists(simpletv_local):
            print "Leyendo archivo local de simpletv"
            f = open(simpletv_local)
            data = f.read()
            f.close()
        else:
            print "ERROR: No existe archivo local de simpletv"
            return []
    else:
        print "Guardando archivo local de simpletv"
        f = open(simpletv_local,"w")
        f.write(data)
        f.flush()
        f.close()
        
    # Busca el bloque con los canales
    itemlist = []
    patron = '#EXTINF:-1 \$ExtFilter="(.*?)",(.*?)(?:\n|\r|\r\n?)(.*?)(?:\n|\r|\r\n?)'
    matches = re.compile(patron,re.DOTALL|re.MULTILINE).findall(data)
    if DEBUG: scrapertools.printMatches(matches)
    for match in matches:
        if DEBUG: print "match: %s-%s-%s" % (match[0], match[1], match[2])
        if "Canales +18" in match[1]: continue
        if "RADIOS" in match[1]: continue
        if "Radios" in match[1]: continue
        if "RADIOS" in match[0]: continue
        if "Radios" in match[0]: continue
        scrapedtitle = match[0].upper() + ' - ' + match[1].upper()
        if match[2].startswith(("rtmp://", "rtmpt://", "rtmpe://", "rtmpte://", "rtmps://")):
            scrapedurl = match[2].replace("rtmp://$OPT:rtmp-raw=","").replace("live=1", "live=true")
            if not re.search(" timeout=", match[2]):
                scrapedurl = "%s%s" % (scrapedurl, " timeout=300")
        else:
            scrapedurl = match[2]
        itemlist.append( Item(channel=CHANNELNAME, title=scrapedtitle, url=scrapedurl, action="play", extra="rtmp", folder=True) )

    return itemlist

def play(item):
    logger.info("[simpletv.py] play")

    itemlist = []
    itemlist.append( Item(channel=CHANNELNAME, action="play", server="directo", title=item.title, url=item.url, thumbnail="", plot="", folder=False) )

    return itemlist