@super_berny, estoy intentando integrar tu scraper en mi canal inkapelis y me surgen varias dudas:
En primer lugar, me he encontrado con que cuando haces una búsqueda con tmdb y quieres sacar el thumbnail/poster con la función get_poster(), a veces se produce un error porque devuelve un objeto NoneType en vez de str. Me he fijado que es porque cuando un resultado no tiene poster, en lugar de aparecer en el json como una cadena vacía, aparece como None (u'poster_path': None), pero dentro de get_poster se hace una comparación con una cadena vacía, por lo que da el error "cannot concatenate 'str' and 'NoneType' objects" y sale del try. Yo lo he solucionado así, pero no sé si este cambio puede afectar a otra cosa:
Código: Seleccionar todo
def get_poster(self, tipo_respuesta="str", size="original"):
ret=[]
if not size in ("w45", "w92", "w154", "w185", "w300", "w342", "w500", "w600", "h632", "w780", "w1280", "original"): size="original"
if self.result["poster_path"] is None: self.result["poster_path"] = "" --->Aquí es donde comprueba si es None y si es así lo convierte a un string vacío.
if tipo_respuesta !='list':
if self.result["poster_path"] !="": ---> Aquí es donde da el error que comento
return 'http://image.tmdb.org/t/p/' + size + self.result["poster_path"]
else: return ""
elif self.result["id"] == "": return []
Luego, he estado probando la función load_resultado(), y entre los if que encadena, creo que falta la opción de que haga algo cuando index_resultado sea superior a 0 y page sea igual que self.page. No sé si así estaría bien pero a mí me ha dado resultado:
Código: Seleccionar todo
def load_resultado(self,index_resultado=0,page=1):
if self.total_results <= 1: # Si no hay mas un resultado no podemos cambiar
return None
if page < 1 or page > self.total_pages: page=1
if index_resultado < 0: index_resultado=0
if page !=self.page:
self.__inicializar()
self.__search(index_resultado=index_resultado, page=page)
else: --->A partir de aquí lo que he añadido
self.__leer_resultado(self.results[index_resultado])
También me pasa una cosa que en esto estoy seguro de que soy yo el que lo está haciendo mal. Cuando saco los géneros de una película y los agrego con infoLabels, veo que en cada item se van concatenando los de las anteriores, es decir, si por ejemplo la primera peli tiene "Comedia, Acción" y la segunda "Guerra", en la primera sale bien en kodi, pero en la segunda saldría "Comedia, Acción, Guerra". Este es el código que utilizo para ello, ¿cuál puede ser el fallo?
Y ya por último que me vas a matar
![Laughing :lol:](./images/smilies/icon_lol.gif)
. He notado que tarda bastante en hacer el scraper de las películas (unos 26-27 segundos), en el caso de mi canal que tiene unas 40 por página. Mirando el log me he dado cuenta que antes de cada búsqueda en tmdb carga una url para rellenar el diccionario de géneros, por lo que en lugar de cargar 40 páginas, carga el doble. Viendo eso se me ocurrió que se podría crear el diccionario con los generos directamente como variable en el tmdb.py y no tener que cargar la misma página una y otra vez. Imagino que lo hiciste así para cargar el diccionario según el idioma de la búsqueda, pero he pensado que se podría crear dos diccionarios, uno en español y otro en inglés pues suelen ser lo más utilizados y si se hace la búsqueda en otro idioma, entonces sí rellenar de esa manera el diccionario. He hecho la prueba y pasa de, como decía, 26-27 segundos, a unos 13-14, a mí modo de ver la diferencia merece la pena. Te pongo cómo lo he puesto para verlo más claro:
Código: Seleccionar todo
----Dentro del constructor de la clase
linea 107
temporada={}
lista_generos_ES=[{u'id': 28, u'name': 'Acci\xc3\xb3n'},....
lista_generos_EN=[{u'id': 28, u'name': 'Action'},....
-------- En el init
def __init__(self, **kwargs):
self.__inicializar()
self.busqueda["idioma"]=kwargs.get('idioma_busqueda','es')
self.busqueda["tipo"]=kwargs.get('tipo','movie')
if self.busqueda["tipo"] =='movie' or self.busqueda["tipo"] =="tv":
# Rellenar diccionario de generos en el idioma seleccionado
url='http://api.themoviedb.org/3/genre/%s/list?api_key=57983e31fb435df4df77afb854740ea9&language=%s' %(self.busqueda["tipo"], self.busqueda["idioma"])
if self.busqueda["idioma"] == "es":
lista_generos = self.lista_generos_ES
elif self.busqueda["idioma"] == "en":
lista_generos = self.lista_generos_EN
else: lista_generos = self.__get_json(url)["genres"]
for i in lista_generos:
self.dic_generos[str(i["id"])]=i ["name"]
Espero haberme sabido explicar y a ver qué te parecen mis sugerencias y si me puedes orientar sobre el error raro de los géneros
![Mr. Green :mrgreen:](./images/smilies/icon_mrgreen.gif)