Página 1 de 4

Scraper Themoviedb para pelisalacarta

Publicado: 13 Oct 2015, 18:22
por super_berny
Se trata de una utilidad, incluida en pelisalacarta, para que los creadores de canales podamos buscar datos como fanart, sinopsis, trailers, etc.. Datos que en ocasiones no estan en la web original del canal.

Novedades v1.4:
  • Introduccion de los items tipo etiqueta (Tag). Estos items son solo informativos. Ver PR#181
  • Eliminados los archivos channels.json (no se q hacian aun aqui)
  • Nueva gestion y busqueda de informacion extra para peliculas y series. Mas informacion aqui y en Github.
Novedades v1.3:
  • Corregido error al devolver None el path_poster y el backdrop_path
  • Corregido error que hacia que en el listado de generos se fueran acumulando de una llamada a otra
  • Añadido metodo get_generos()
  • Añadido parametros opcional idioma_alternativo al metodo get_sinopsis()
Metodos constructores:

Tmdb(texto_buscado, tipo)
  • Parametros:
    • texto_buscado:(str) Texto o parte del texto a buscar
    • tipo: ("movie" o "tv") Tipo de resultado buscado peliculas o series. Por defecto "movie"
    • (opcional) idioma_busqueda: (str) codigo del idioma segun ISO 639-1
    • (opcional) include_adult: (bool) Se incluyen contenidos para adultos en la busqueda o no. Por defecto 'False'
    • (opcional) year: (str) Año de lanzamiento.
    • (opcional) page: (int) Cuando hay muchos resultados para una busqueda estos se organizan por paginas. Podemos cargar la pagina que deseemos aunque por defecto siempre es la primera.
    Return:
    • Esta llamada devuelve un objeto Tmdb que contiene la primera pagina del resultado de buscar 'texto_buscado' en la web themoviedb.org. Cuantos mas parametros opcionales se incluyan mas precisa sera la busqueda. Ademas el objeto esta inicializado con el primer resultado de la primera pagina de resultados.
Tmdb(id_Tmdb,tipo)
  • Parametros:
    • id_Tmdb: (str) Codigo identificador de una determinada pelicula o serie en Themoviedb.org
    • tipo: ("movie" o "tv") Tipo de resultado buscado peliculas o series. Por defecto "movie"
    • (opcional) idioma_busqueda: (str) codigo del idioma segun ISO 639-1
    Return:
    • Esta llamada devuelve un objeto Tmdb que contiene el resultado de buscar una pelicula o serie con el identitifador id_Tmd en la web themoviedb.org.
Tmdb(external_id, external_source, tipo)
  • Parametros:
    • external_id: (str) Codigo identificador de una determinada pelicula o serie en la web referenciada por 'external_source'.
    • external_source: (Para series:"imdb_id","freebase_mid","freebase_id","tvdb_id","tvrage_id"; Para peliculas:"imdb_id")
    • tipo: ("movie" o "tv") Tipo de resultado buscado peliculas o series. Por defecto "movie"
    • (opcional) idioma_busqueda: (str) codigo del idioma segun ISO 639-1
    Return:
    • Esta llamada devuelve un objeto Tmdb que contiene el resultado de buscar una pelicula o serie con el identificador 'external_id' de la web referenciada por 'external_source' en la web themoviedb.org.

Metodos principales:
  • get_id(): Retorna un str con el identificador Tmdb de la pelicula o serie cargada o una cadena vacia si no hubiese nada cargado.
  • get_sinopsis(idioma_alternativo): Retorna un str con la sinopsis de la serie o pelicula cargada.
  • get_poster (tipo_respuesta,size): Obtiene el poster o un listado de posters.
  • get_backdrop (tipo_respuesta,size): Obtiene una imagen de fondo o un listado de imagenes de fondo.
  • get_fanart (tipo,idioma,temporada): Obtiene un listado de imagenes del tipo especificado de la web Fanart.tv
  • get_episodio (temporada, capitulo): Obtiene un diccionario con datos especificos del episodio.
  • get_generos(): Retorna un str con la lista de generos a los que pertenece la pelicula o serie.
Otros metodos:
  • leer_resultado(resultado, page): Cuando la busqueda devuelve varios resultados podemos seleccionar que resultado concreto y de que pagina cargar los datos.

Ejemplo de uso:

Código: Seleccionar todo

titulo="Superman"
año="1978"
try:
     from core.tmdb import Tmdb
     oTmdb= Tmdb(texto_buscado=titulo,year=año) 
     item.fanart=oTmdb.get_backdrop()
     item.plot=oTmdb.get_sinopsis()
except:
     pass

Re: Scraper Themoviedb para pelisalacarta

Publicado: 13 Oct 2015, 19:38
por super_berny
nemo1978: the moviedb tiene logo,disc art, banner, hdclearart etc?
Pues no. Solo incluye el poster y el Fanart. :cry:
Si necesitas otro tipo de graficos mas especificos si que habria q hacer otra consulta a fanart.tv
nemo1974: ...para la info de los capítulos de series tienes q usar los dos por narices ...yo no encontré otra ;)
Depende de que informacion estemos hablando. Mira aqui o aqui ¿Esta te vale?

Re: Scraper Themoviedb para pelisalacarta

Publicado: 13 Oct 2015, 19:49
por neno1978
bueno, eso si, lo que sucede es que antes , cuando yo empece con esto, esta gente no tenía info en español, y supongo que ahora tendrán poca(https://www.themoviedb.org/tv/1415-elem ... nguage=es), por eso es que use otro sistema, que tampoco seque sea una bestialidad la info en español, pero es digamos mas que respetable ;) . Y en cuanto a las otras imágenes, para mi, son las que le dan "chispa a la cosa" ;)

Re: Scraper Themoviedb para pelisalacarta

Publicado: 14 Oct 2015, 09:07
por robalo
No entendía el hilo, no sabía de dónde salían los quotes hasta que no he visto el Pull requests #39 del git oficial :lol:

Bueno, siguiendo la misma línea y dando por hecho que se habla de los dos hilos, voy a echarle una mano a neno.

Cuando neno dice "... el tema de los title ..." se refiere a esto:

Código: Seleccionar todo

## ----------------------------------------------------------------------------
## fix title para el patrón de películas para afinar mejor con la página que queremos,
## a ver quien es el guap@ que sabe que número de página es la buena :), ojalá
## fuese siempre la primera
def fix_title_for_filter_page(title):
    title = title.replace('Parte I','Parte 1')
    title = title.replace('Parte II','Parte 2')
    title = title.replace('Parte III','Parte 3')
    title = re.sub(r'Fast & Furious (\d) \(A todo gas \d\)', r'Fast & Furious \1', title)
    title = re.sub(r'A todo gas (\d)', r'Fast & Furious \1', title)
    title = title.replace('A todo gas', 'Fast & Furious')

    return title

## Arregla el título para los arts. Nos guste o no,
## cada admin hace lo que le sale de sus caramelitos
def fix_title_for_arts(title):
    logger.info("[playmax.py] fix_title_for_arts")

    from platformcode.library import elimina_tildes

    title = elimina_tildes(title)
    title = re.sub(r'3D|,|#|;|SBS|-|Temporada|Torrent|^Ver|Online|Gratis','',title)

    title = title.replace(' ','%20')

    title = title.replace('Érase%20una%20vez','Erase%20una%20vez%20(2011)')
    title = title.replace('Hawaii%20Five%200%20','hawaii%205.0')
    title = title.replace('The%20Big%20Bang%20Theory','The%20Big%20Bang%20Theory%20%20')
    title = title.replace('Castle','Castle%20(2009)')

    return title
## ----------------------------------------------------------------------------
Parte que irá creciendo según se detecten títulos diferentes en las webs

Cuando neno dice "... valdría para fanart solo ..." se refiere ha esto

Código: Seleccionar todo

## -- arts --------------------------------------------------------------------
## Conseguir los arts de series o películas
def get_arts(title, tipo="2"):
    logger.info("[playmax.py] fanart")

    ret_arts = {}

    ## 1: Series, 2: Películas
    arts = {
        ## Series
        '1':{
            ## thetvdb.com
            'url_title':'http://thetvdb.com/api/GetSeries.php?seriesname=%s&language=es',
            'patron_title':'<Data><Series><seriesid>([^<]+)</seriesid>',
            'url_id':'http://thetvdb.com/api/1D62F2F90030C444/series/%s/banners.xml',
            'path_url_fanart':'http://thetvdb.com/banners/',
            'patron_fanart':'<Banners><Banner>.*?<VignettePath>(.*?)</VignettePath>',
            ## themoviedb.org
            'url_title_episodes':'http://api.themoviedb.org/3/search/tv?api_key=57983e31fb435df4df77afb854740ea9&query=%s&language=es&include_adult=false',
            'url_title_episodes2':'http://api.themoviedb.org/3/tv/%s?api_key=57983e31fb435df4df77afb854740ea9&language=es&include_adult=false',
            'url_title_episodes3':'http://api.themoviedb.org/3/tv/%s/season/%s?api_key=57983e31fb435df4df77afb854740ea9&language=es&include_adult=false',
            'patron_title_episodes':'(\[\{"backdrop_path"[^\}]+\})',
            'patron_title_episodes2':'("seasons":\[[^\]]+\])',
            'path_url_backdrop':'https://image.tmdb.org/t/p/original/',
            'path_url_poster':'https://image.tmdb.org/t/p/original/',
            ## fanart.tv
            'url_id_others_arts':'http://assets.fanart.tv/v3/tv/%s?api_key=dffe90fba4d02c199ae7a9e71330c987',
            'patron_others_arts':'"%s":.*?"url": "([^"]+)"',
            'tags_others_arts':{
                'clearlogo','tvposter','tvbanner','tvthumb','hdtvlogo','hdclearart','showbackground','clearart'
            }
        },
        ## Películas
        '2':{
            ## themoviedb.org
            'url_title':'http://api.themoviedb.org/3/search/movie?api_key=57983e31fb435df4df77afb854740ea9&query=%s&language=es&include_adult=false',
            'patron_title':'("backdrop_path":"[^"]+",.*?,"id":\d+,.*?,"poster_path":"[^"]+",.*?,"title":"%s")' % fix_title_for_filter_page(title),
            'path_url_backdrop':'https://image.tmdb.org/t/p/original/',
            'path_url_poster':'https://image.tmdb.org/t/p/original/',
            ## fanart.tv
            'url_id_others_arts':'http://assets.fanart.tv/v3/movies/%s?api_key=dffe90fba4d02c199ae7a9e71330c987',
            'patron_others_arts':'"%s":.*?"url": "([^"]+)"',
            'tags_others_arts':{
                'hdmovielogo','moviedisc','movieposter','moviethumb','moviebanner','hdmovieclearart','moviebackground'
            }
        }
    }

    ## Series y películas: Extrae la 'id' o 'data' usando el título de la ficha
    ## thetvdb.com
    data = agrupa_datos(
        scrapertools.cache_page( arts[tipo]['url_title']  % fix_title_for_arts(title) )
    )
    id_or_data = scrapertools.find_single_match( data, arts[tipo]['patron_title'] )

    ## themoviedb.org
    data2 = agrupa_datos(
        scrapertools.cache_page( arts[tipo]['url_title_episodes']  % fix_title_for_arts(title) )
    )
    id_or_data2 = scrapertools.find_single_match( data2, arts[tipo]['patron_title_episodes'] )

    id2 = scrapertools.find_single_match( id_or_data2, '"id":(\d+)' )

    data3 = agrupa_datos(
        scrapertools.cache_page( arts[tipo]['url_title_episodes2']  % id2 )
    )
    id_or_data3 = scrapertools.find_single_match( data3, arts[tipo]['patron_title_episodes2'] )

    ## Series:
    if tipo == "1":
        ## thetvdb.com
        id = id_or_data

        data = agrupa_datos(
            scrapertools.cache_page( arts[tipo]['url_id'] % id )
        )

        ret_arts['fanart'] = scrapertools.find_single_match( data, arts[tipo]['patron_fanart'] )
        if ret_arts['fanart'] != "":
            ret_arts['fanart'] = urlparse.urljoin( arts[tipo]['path_url_fanart'], ret_arts['fanart'] )

        ## themoviedb.org
        ret_arts['backdrop'] = scrapertools.find_single_match( id_or_data2, '"backdrop_path":"([^"]+)"' )
        if ret_arts['backdrop'] != "":
            ret_arts['backdrop'] = urlparse.urljoin( arts[tipo]['path_url_backdrop'], '.' + ret_arts['backdrop'] )

        ret_arts['poster'] = scrapertools.find_single_match( id_or_data2, '"poster_path":"([^"]+)"' )
        if ret_arts['poster'] != "":
            ret_arts['poster'] = urlparse.urljoin( arts[tipo]['path_url_poster'], '.' + ret_arts['poster'] )

        ret_arts['plot'] = scrapertools.find_single_match( id_or_data2, '"overview":"(.*?)",' )

        patron = '"poster_path":"([^"]+)","season_number":(\d+)'
        seasons = re.compile(patron,re.DOTALL).findall(id_or_data3)
        for poster, season in seasons:
            ret_arts['season-' + season + '-poster'] = urlparse.urljoin( arts[tipo]['path_url_poster'], '.' + poster )

            data4 = agrupa_datos(
                scrapertools.cache_page( arts[tipo]['url_title_episodes3']  % (id2, season) ).replace('\\', '')
            )

            patron = '"episode_number":(\d+),.*?,"overview":"(.*?)".*?"still_path":"([^"]+)"'
            episodes = re.compile(patron,re.DOTALL).findall(data4)
            for episode, plot, still in episodes:
                ret_arts['season-' + season + '-episode-' + episode + '-plot'] = plot
                ret_arts['season-' + season + '-episode-' + episode + '-still'] = urlparse.urljoin( arts[tipo]['path_url_poster'], '.' + still )

    ## Peículas:
    if tipo == "2":
        ##  api.themoviedb.org
        id = scrapertools.find_single_match( id_or_data, '"id":(\d+)' )

        ret_arts['backdrop'] = scrapertools.find_single_match( id_or_data, '"backdrop_path":"([^"]+)"' )
        if ret_arts['backdrop'] != "":
            ret_arts['backdrop'] = urlparse.urljoin( arts[tipo]['path_url_backdrop'], '.' + ret_arts['backdrop'] )

        ret_arts['poster'] = scrapertools.find_single_match( id_or_data, '"poster_path":"([^"]+)"' )
        if ret_arts['poster'] != "":
            ret_arts['poster'] = urlparse.urljoin( arts[tipo]['path_url_poster'], '.' + ret_arts['poster'] )

    ## Series y Peículas: assets.fanart.tv
    if id != "":
        data = agrupa_datos(
            scrapertools.cache_page( arts[tipo]['url_id_others_arts'] % id )
        )
        for tag_others_art in arts[tipo]['tags_others_arts']:
            ret_arts[tag_others_art] = scrapertools.find_single_match( data, arts[tipo]['patron_others_arts'] % tag_others_art )

    return ret_arts
## ----------------------------------------------------------------------------
Esto es lo que realmente ves en sus canales, sólo hay que dedicarle un poco de tiempo a lo que intenta hacer para verlo.

Y esto es lo que consigue su código recogido en una función.
Arts de la serie Big Bang: http://robalo.esy.es/pelisalacarta/artes.html

Creo que no hará falta decir que es no está acabado, hay que segmentarlo para los tiempos de espera. Sólo es una muestra del trabajo de neno en sus canales pero sin el contenido del canal :lol:

Re: Scraper Themoviedb para pelisalacarta

Publicado: 14 Oct 2015, 11:28
por super_berny
robalo escribió:Parte que irá creciendo según se detecten títulos diferentes en las webs
Bueno de momento no voy a entrar mucho en este tema.
Esta claro que cada administrador hace con su web lo q le sale de los co**, y que si no aportamos un titulo claro y casi otro campo como el año las probabilidades de fallo son altas (si falla nos quedamos sin imagenes y otros datos extras, pero los enlaces de video siguen ahi. Por lo q no es tan tragico) Lo que no veo muy viable es ir añadiendo excepciones segun se encuentren, en unos meses eso es una locura.
robalo escribió:Cuando neno dice "... valdría para fanart solo ..." se refiere ha esto
...
Y esto es lo que consigue su código recogido en una función.
Arts de la serie Big Bang: http://robalo.esy.es/pelisalacarta/artes.html
Ok. Por una parte veo que tomais datos de varias fuentes. Eso no es problema. Ahora mismo la version q estoy terminando busca en themoviedb, pero tiene un metodo para recuperar el contenido del mismo item de Fanart.tv de un modo muy sencillo.
Me quedaria pendiente el tema de las temporadas y los capitulos, para lo cual no se si continuar con themoviedb o basarme en thetvdb, hay q analizarlo aun.

Re: Scraper Themoviedb para pelisalacarta

Publicado: 14 Oct 2015, 11:48
por robalo
No creo que el año sea la solución y menos aún cuando se desconece el año o cualquier otro dato, lo que no suele fallar es el título y, tampoco es una locura incluir excepciones. Todo se basa en las experiencias de neno en este tema, que no son pocas. Si no, de dónde salen tantas decisiones?

Me gusta el método de neno, yo no tengo problemas con su forma de trabajar sin bifurcaciones, entiendo lo que intenta hacer y el trabajo que le cuesta.

El code de get_arts anterior tiene un bloque de le líneas para las series sin anidar en series y también la llamada a agrupa_datos que no se incluye y no hace falta (es lo que uso normalmente y copio y pego los cache_page)

Código: Seleccionar todo

## -- arts --------------------------------------------------------------------
## Conseguir los arts de series o películas
def get_arts(title, tipo="2"):
    logger.info("[playmax.py] fanart")

    ret_arts = {}

    ## 1: Series, 2: Películas
    arts = {
        ## Series
        '1':{
            ## thetvdb.com
            'url_title':'http://thetvdb.com/api/GetSeries.php?seriesname=%s&language=es',
            'patron_title':'<Data><Series><seriesid>([^<]+)</seriesid>',
            'url_id':'http://thetvdb.com/api/1D62F2F90030C444/series/%s/banners.xml',
            'path_url_fanart':'http://thetvdb.com/banners/',
            'patron_fanart':'<Banners><Banner>.*?<VignettePath>(.*?)</VignettePath>',
            ## themoviedb.org
            'url_title_episodes':'http://api.themoviedb.org/3/search/tv?api_key=57983e31fb435df4df77afb854740ea9&query=%s&language=es&include_adult=false',
            'url_title_episodes2':'http://api.themoviedb.org/3/tv/%s?api_key=57983e31fb435df4df77afb854740ea9&language=es&include_adult=false',
            'url_title_episodes3':'http://api.themoviedb.org/3/tv/%s/season/%s?api_key=57983e31fb435df4df77afb854740ea9&language=es&include_adult=false',
            'patron_title_episodes':'(\[\{"backdrop_path"[^\}]+\})',
            'patron_title_episodes2':'("seasons":\[[^\]]+\])',
            'path_url_backdrop':'https://image.tmdb.org/t/p/original/',
            'path_url_poster':'https://image.tmdb.org/t/p/original/',
            ## fanart.tv
            'url_id_others_arts':'http://assets.fanart.tv/v3/tv/%s?api_key=dffe90fba4d02c199ae7a9e71330c987',
            'patron_others_arts':'"%s":.*?"url": "([^"]+)"',
            'tags_others_arts':{
                'clearlogo','tvposter','tvbanner','tvthumb','hdtvlogo','hdclearart','showbackground','clearart'
            }
        },
        ## Películas
        '2':{
            ## themoviedb.org
            'url_title':'http://api.themoviedb.org/3/search/movie?api_key=57983e31fb435df4df77afb854740ea9&query=%s&language=es&include_adult=false',
            'patron_title':'("backdrop_path":"[^"]+",.*?,"id":\d+,.*?,"poster_path":"[^"]+",.*?,"title":"%s")' % fix_title_for_filter_page(title),
            'path_url_backdrop':'https://image.tmdb.org/t/p/original/',
            'path_url_poster':'https://image.tmdb.org/t/p/original/',
            ## fanart.tv
            'url_id_others_arts':'http://assets.fanart.tv/v3/movies/%s?api_key=dffe90fba4d02c199ae7a9e71330c987',
            'patron_others_arts':'"%s":.*?"url": "([^"]+)"',
            'tags_others_arts':{
                'hdmovielogo','moviedisc','movieposter','moviethumb','moviebanner','hdmovieclearart','moviebackground'
            }
        }
    }

    ## Series y películas: Extrae la 'id' o 'data' usando el título de la ficha
    ## thetvdb.com
    data = scrapertools.cache_page( arts[tipo]['url_title']  % fix_title_for_arts(title) )
    id_or_data = scrapertools.find_single_match( data, arts[tipo]['patron_title'] )

    ## Series:
    if tipo == "1":
        ## themoviedb.org
        data2 = scrapertools.cache_page( arts[tipo]['url_title_episodes']  % fix_title_for_arts(title) )
        id_or_data2 = scrapertools.find_single_match( data2, arts[tipo]['patron_title_episodes'] )

        id2 = scrapertools.find_single_match( id_or_data2, '"id":(\d+)' )

        data3 = scrapertools.cache_page( arts[tipo]['url_title_episodes2']  % id2 )
        id_or_data3 = scrapertools.find_single_match( data3, arts[tipo]['patron_title_episodes2'] )

        ## thetvdb.com
        id = id_or_data

        data = scrapertools.cache_page( arts[tipo]['url_id'] % id )

        ret_arts['fanart'] = scrapertools.find_single_match( data, arts[tipo]['patron_fanart'] )
        if ret_arts['fanart'] != "":
            ret_arts['fanart'] = urlparse.urljoin( arts[tipo]['path_url_fanart'], ret_arts['fanart'] )

        ## themoviedb.org
        ret_arts['backdrop'] = scrapertools.find_single_match( id_or_data2, '"backdrop_path":"([^"]+)"' )
        if ret_arts['backdrop'] != "":
            ret_arts['backdrop'] = urlparse.urljoin( arts[tipo]['path_url_backdrop'], '.' + ret_arts['backdrop'] )

        ret_arts['poster'] = scrapertools.find_single_match( id_or_data2, '"poster_path":"([^"]+)"' )
        if ret_arts['poster'] != "":
            ret_arts['poster'] = urlparse.urljoin( arts[tipo]['path_url_poster'], '.' + ret_arts['poster'] )

        ret_arts['plot'] = scrapertools.find_single_match( id_or_data2, '"overview":"(.*?)",' )

        patron = '"poster_path":"([^"]+)","season_number":(\d+)'
        seasons = re.compile(patron,re.DOTALL).findall(id_or_data3)
        for poster, season in seasons:
            ret_arts['season-' + season + '-poster'] = urlparse.urljoin( arts[tipo]['path_url_poster'], '.' + poster )

            data4 = scrapertools.cache_page( arts[tipo]['url_title_episodes3']  % (id2, season) ).replace('\\', '')

            patron = '"episode_number":(\d+),.*?,"overview":"(.*?)".*?"still_path":"([^"]+)"'
            episodes = re.compile(patron,re.DOTALL).findall(data4)
            for episode, plot, still in episodes:
                ret_arts['season-' + season + '-episode-' + episode + '-plot'] = plot
                ret_arts['season-' + season + '-episode-' + episode + '-still'] = urlparse.urljoin( arts[tipo]['path_url_poster'], '.' + still )

    ## Peículas:
    if tipo == "2":
        ##  api.themoviedb.org
        id = scrapertools.find_single_match( id_or_data, '"id":(\d+)' )

        ret_arts['backdrop'] = scrapertools.find_single_match( id_or_data, '"backdrop_path":"([^"]+)"' )
        if ret_arts['backdrop'] != "":
            ret_arts['backdrop'] = urlparse.urljoin( arts[tipo]['path_url_backdrop'], '.' + ret_arts['backdrop'] )

        ret_arts['poster'] = scrapertools.find_single_match( id_or_data, '"poster_path":"([^"]+)"' )
        if ret_arts['poster'] != "":
            ret_arts['poster'] = urlparse.urljoin( arts[tipo]['path_url_poster'], '.' + ret_arts['poster'] )

    ## Series y Peículas: assets.fanart.tv
    if id != "":
        data = scrapertools.cache_page( arts[tipo]['url_id_others_arts'] % id )
        for tag_others_art in arts[tipo]['tags_others_arts']:
            ret_arts[tag_others_art] = scrapertools.find_single_match( data, arts[tipo]['patron_others_arts'] % tag_others_art )

    return ret_arts
## ----------------------------------------------------------------------------
Si te fijas, neno sólo necesita partes de esta función y añadirlas a su forma de trabajar sin bifurcaciones

Re: Scraper Themoviedb para pelisalacarta

Publicado: 14 Oct 2015, 17:42
por neno1978
Gracias robalo, porque si, mi trabajo me cuesta aunque sarna con gusto no pica ;) ya sabes que a mi me mola estos líos y hombre , superberny , las excepciones son todas controlables de una u otra manera y eso de que si falla pues ahí están los datos de video, pues si, pero entonces pa que nos relia os no? A chupa*** los arts !!! :lol: :lol: yo creo que lo q es capaz de sacar robalo con tan poco codigo( no es una metáfora sexual robalo) es simplemente impresionante. Yo me quedado de piedra sin verlo aun FUNCIONANDO... SIN VERLO AUN !! Uy que se me ha activado solo las mayúsculas ... No digo que lo tuyo sea malo ni mucho menos, pero si que para la idea que yo tengo , se me quedaría corto , aunque para otros canales que no puedan , o no les pegue , tanto art , info , etc , creo que puede se muy útil ;)

Re: Scraper Themoviedb para pelisalacarta

Publicado: 15 Oct 2015, 18:46
por SeiTaN
super_berny escribió:Correcto, no he encontrado la manera de acceder desde un canal/plugin al addon TVDB. Es solo para uso interno de Kodi. Pero si los q creamos los canales necesitamos acceder a estos datos (fanart, poster, trailer, director, guionistas, productora, actores, etc...) hasta ahora cada uno se ha buscado la vida por su lado. Lo que yo propongo es una utilidad para q todos desarrolladores podamos usarla.
No lo he probado, pero así se podrían tirar de otros addons

http://stackoverflow.com/questions/3251 ... xbmc-addon
jaysheel utekar escribió: Add the addon id of the addon whoes function you ant ot call and add these

Código: Seleccionar todo

<requires>
<import addon="script.module.simplejson" version="2.7.0"/>
<requires>
<extension point="xbmc.python.module" library="resources" />
Now got to the addon whoes function you want to call and add the .py files to resources directory in your addon.

Now,

Código: Seleccionar todo

from somemodule import foo

foo()
and it is done

Re: Scraper Themoviedb para pelisalacarta

Publicado: 17 Oct 2015, 12:41
por super_berny
SeiTaN escribió:No lo he probado, pero así se podrían tirar de otros addons
Gracias SeiTan, lo estuve mirando pero el problema es que el scraper de Tvdb incluido no es realmente un addon sino un metadata. No hay un fichero py con las funciones sino un xml con expresiones regulares y ahi si que no se como enviarle los paramentros ni como recoger los resultados.

Re: Scraper Themoviedb para pelisalacarta

Publicado: 17 Oct 2015, 13:40
por super_berny
He actualizado a la version 1.2.
Teneis la descripcion en el primer hilo.

Como muestra os pongo una captura en la que mediante este scraper y con un coste realmente minimo de tiempo podemos obtener el titulo, la sinopsis y una imagen diferente para cada uno de los capitulos de una serie.

y el codigo que he utilizado en el canal para conseguirlo:

Código: Seleccionar todo

try: # Instanciar el objeto Tmdb
        from core.tmdb import Tmdb
        oTmdb= Tmdb(texto_buscado=item.show,year=year,tipo="tv")
        item.fanart=oTmdb.get_backdrop()
    except:
        pass

...

try:
      # añadimos sinopsis e imagenes para cada capitulo
      temporada=capitulo.split('x')[0]
      episodio=oTmdb.get_episodio(temporada=capitulo.split('x')[0],capitulo=capitulo.split('x')[1])
      if episodio["episodio_sinopsis"] !="": sinopsis= episodio["episodio_sinopsis"]
      if episodio["episodio_imagen"] !="": item.thumbnail= episodio["episodio_imagen"]
      if episodio["episodio_titulo"] !="": title = title + ": " + episodio["episodio_titulo"]
except:
       pass