Problema con ciertas sinopsis
Closed this issue · 13 comments
Hay un bug en la descarga de argumentos (no funciona) de algunas películas desde Filmaffinity. Los casos de mi biblioteca son los siguientes:
http://www.filmaffinity.com/es/film371621.html
http://www.filmaffinity.com/es/film873148.html
http://www.filmaffinity.com/es/film296528.html
http://www.filmaffinity.com/es/film332725.html
http://www.filmaffinity.com/es/film276828.html
http://www.filmaffinity.com/es/film414708.html
http://www.filmaffinity.com/es/film745914.html
http://www.filmaffinity.com/es/film773732.html
http://www.filmaffinity.com/es/film674896.html
http://www.filmaffinity.com/es/film112844.html
http://www.filmaffinity.com/es/film583615.html
http://www.filmaffinity.com/es/film238028.html
http://www.filmaffinity.com/es/film137646.html
http://www.filmaffinity.com/es/film554741.html
http://www.filmaffinity.com/es/film197320.html
http://www.filmaffinity.com/es/film854692.html
http://www.filmaffinity.com/es/film978961.html
Suficientes, creo, como para que no se considere un caso aislado. Y suficientes como para extraer un denominador común y reconocer dónde está el error: en todas las sinopsis hay una o más etiquetas br.
Tal como está el scraper ahora mismo se está cogiendo hasta el primer símbolo de apertura de etiqueta (<), y después limpiando la "firma" (FILMAFFINITY). El problema está en que si se coge hasta dicho símbolo, cuando hay un br, no habrá nada que coger en la siguiente expresión y se devolverá una cadena vacía.
La solución a esto parece fácil, simplemente es hacer que coja directamente hasta (FILMAFFINITY) en lugar de hasta la apertura de tag. Eso es lo que he hecho aquí: diff
El problema gordo es que antes he mentido, no sólo no descarga las de la lista que he puesto, en mi biblioteca tampoco funcionan estas dos:
http://www.filmaffinity.com/es/film260115.html
http://www.filmaffinity.com/es/film559192.html
Y el denominador común en éstas no es un br, no lo hay, aquí el error es que no hay un "(FILMAFFINITY)" al final de la sinopsis, con lo cual la solución anterior deja de nuevo de ser válida.
Muy a mi pesar, aún así, a mí con el commit enlazado arriba sí me descarga la sinopsis para éstas dos. Pero creo que es más debido a pura suerte que a la correctitud del mismo, porque debería fallar, y así lo hará llegado el momento.
He estando intentando buscar una solución a ambos problemas (a la vez) y no he logrado nada, por eso no he hecho un pull request. Así que, a ver si a alguno se os ocurre algo.
he comentado en tu commit que las pocas sinopsis que me faltaban se solucionaron con este cambio, así que yo lo interpretaría como un mal menor. tu commit mejora la situación anterior, que también exigía la existencia de "(FILMAFFINITY)" al final de la sinopsis, así que es una mejora y punto. que no es perfecta? cierto, pero tú mismo ya ves los pocos casos que tienes con sinopsis sin acabar "(FILMAFFINITY)".
el problema está en la base del código, ya que no se permiten (o al menos no lo he encontrado) expresiones regulares de sustitución o simplemente condicionales (si encuentras esto, entonces haz esto otro), por lo que el código está obligado a concretar lo máximo posible pero sin perder su generalidad. en este caso, la única opción genérica sería capturar hasta el primer y mostrar el código "(FILMAFFINITY)" la mayor parte de las ocasiones, lo cual yo personalmente preferiría no hacer. imagino que esto puede ser discutible.
y ya puestos, aprovecho para preguntar el porqué de la expresión (.?) en lugar de un simple (.). qué se consigue con el carácter interrogación? intento adaptarme a la sintaxis de patrones que usan los scrapers de XBMC, y esta expresión no la entiendo del todo bien.
uy, veo que en mis comentarios anteriores se han colado algunos códigos que no deberían haber sido escritos. donde digo "hasta el primer ... y mostrar" quería decir "hasta el primer <td> y mostrar", y donde digo "el porqué de la expresión..." me refiero a "(punto y asterisco e interrogante) en lugar de un simple (punto y asterisco)". perdón por el despiste.
El interrogante (.*?)
sirve para hacer un "coge hasta la primera aparición de..." o "coge lo menos que puedas", hasta donde yo sé. En este caso lo que hace es coger todo hasta que aparezca el primer (FILM. La diferencia con (.*)
es que éste último cogería lo máximo que pudiese, y si hay una aparición posterior de (FILMAFFINITY) (en las críticas, por ejemplo) pues daría algún problemilla, porque cogería hasta ése. Lo he puesto por prevención únicamente; aunque la verdad, creo que no he visto ninguna crítica firmada a secas así, normalmente ponen algo como (Pablo Kurt: FILMAFFINTY), así que poner el punto-asterisco no daría mayor problema ahí. Y en esta expresión el interrogante funcionaría igual que un (.+)
.
La gracia es que en principio el laziness .*?
no está soportado por los scrapers de XBMC, o al menos eso pone en su wiki, y en base a esa restricción parece que está construido todo el scraper, hay muchas cosas simplificables si su uso no le da problemas a nadie.
Acabo de hacer un push con un commit que parece (a falta de testearlo bien) que solventa el problema que decía arriba: diff. Tan simple como meter un "or" (|
): coge hasta (FILM ó hasta </td>
, dependiendo de lo que encuentres antes.
Aquí el (.*?)
sí que es necesario, y no reemplazable por (.+)
ni (.*)
. Por culpa del or, tenemos que pararnos sí o sí en la primera aparición de (FILM ó </td>
, si la sinopsis tiene tag (FILMAFFINITY) y metemos un (.*)
o (.+)
, continuará además hasta el próximo cierre de td, haciendo que la firma de (FILMAFFINTIY) se meta también en el argumento.
desde que leí en la wiki de XBMC que no soportaba el laziness he optado por no usarlo, pero de confirmarse esto me da bastantes más ideas. muchísimas gracias por la explicación de la expresión regular.
acabo de detectar un problema en la película Kick-Ass (2010), http://www.filmaffinity.com/es/film764302.html, porque en la sinopsis incluye el texto "(film no apto...)". hay algún motivo para que en la expresión regular no incluyas la palabra "(FILMAFFINITY)" de manera completa en lugar de simplemente "(FILM"?
No, no hay ninguna razón, pura vagancia de no andar escribiendo filmaffinity completo. Pero no había caído en que pudiese haber "(film" dentro de la sinopsis, corregido aquí: https://github.com/agjacome/metadata.filmaffinity.com/commit/fa7faaab1678950e1d6eae811e525c39602c199f
El tema de los fallos este es un problema de diseño de filmaffinity, quizas de una epoca anterior sin moderación o sin unos estandares de formato. Desde hace un tiempo para acá todas las sinopsis tienen el FILMAFFINITY en el final. Digo lo mismo, si funciona, me lo deciis y hago merge (lo probaría pero no dispongo del tiempo necesario para hacer todas las pruebas)
yo estoy terminando de probar con mi biblioteca de ~650 películas tanto esta mejora de Alberto como la modificación de la búsqueda de título sin usar códigos AKA (porque pueden introducir resultados falsos en google), a fin de tener una medida cuantitativa de lo que suponen estas mejoras, ya que es la única manera que tengo de valorar su valía. en cuanto tenga esta estimación os confirmo todo ello.
confirmado todos los cambios (la sinopsis de Alberto, la búsqueda de título sin AKA, incluso los votos) sobre una librería de ~650 películas habiendo fallado sólo 24 en conseguir el backdrop. todas las demás consiguen apuntar a la película deseada, descargando su miniatura sin error, y sólo esas 24 no consiguen todo el contenido gráfico por diversos motivos que habrá que intentar depurar en el futuro (varias son en español, y no tienen equivalente en webs internacionales, otras son documentales que no estarán bien cubiertos en webs de películas, ...). por mi parte adelante con los pulls que incluyan todos los cambios.
Ya está hecho el merge, si hay algun problema avisad y nos lo miramos. Saludos :)
Falta por hacer un merge con la correción a esta Issue, que no estaba en ninguna pull request. Lo hago ahora (el request) y ya estaría todo en cuanto hicieses ese merge.
Alberto, quizás confundí a Enric al decir que probé tus cambios en mi código, y pensó que los habría incluido en mis commits, pero preferí dejarlo como estaba para mantener la autoría del cambio. está bien claro que ahora sólo falta hacer el merge de tu master branch y ya queda todo fetén.
por cierto, gracias por incluirme como addon provider. a ver si puedo seguir contribuyendo con este ímpetu en el futuro.
Pues si, pensaba que ya estaría todo en ese commit, sorry :) Ahora mismo hago el commit.