pykongroo / py-anime_dl

Funciones para descarga de series de anime, de distintos servidores
0 stars 0 forks source link

URL de Descarga #1

Open robotrono opened 6 years ago

robotrono commented 6 years ago

Saludos, ya estoy testeando el proyecto pero al parecer el unico problema es que no obtiene el url de descarga.

$ python test.py
 al usar los colores recuerde usar el indice !!!!
 Preparando contra CloudFlare...
 requesting to http://www.animeyt.tv/
 200 OK
 Se tardó 553.0 segundos
 Completado
 requesting to http://www.animeyt.tv/busqueda?terminos=overlord+iii
 200 OK
 Ya existe descargas
 Ya existe descargas/animeyt/
 Ya existe descargas/animeyt/Overlord III (Serie)/
 requesting to https://www.animeyt.tv/overlord-iii
 200 OK
 seleccion no disponible
 requesting to https://www.animeyt.tv/ver/overlord-iii-1-sub-espanol
 200 OK
 requesting to https://www.animeyt.tv/descargar/29482
 200 OK
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    anm.descargar(resultados[0], 1)
  File "/home/xoxo/py-anime_dl/scrappers.py", line 60, in descargar
    self.descargar_capitulo(capitulo, serie_path, res)
  File "/home/xoxo/py-anime_dl/scrappers.py", line 67, in descargar_capitulo
    cap_dl_link = self.get_download_link_from_url(capitulo['link'], res)
  File "/home/xoxo/py-anime_dl/scrappers.py", line 195, in get_download_link_from_url
    download_url = self.get_link_by_link_page(download_url_redir)
  File "/home/xoxo/py-anime_dl/scrappers.py", line 201, in get_link_by_link_page
    text_url = script_tag.string.split('\n')[8]
AttributeError: 'NoneType' object has no attribute 'split'

Algo ha cambiado AnimeYT, nunca he usado lxml por lo que estoy intentando conocer la función:

    def get_link_by_link_page(self, dl_link):
        b_text = Bs(self.sesion.request_get(dl_link).text, 'lxml')
        script_tag = b_text.findAll('script')[1]
        text_url = script_tag.string.split('\n')[8]
        url_real = self.re_link_js.match(text_url).groups()[0]
        return url_real

Por que he de suponer que obtiene el enlace de aqui https://www.animeyt.tv/descargar/29482 del primer botón, pero no lo hace al parecer.

Estaré testeando y ya te comento.

Por cierto hay otro scrapper que ya he checado andar con menu, para animeyt, pero al obtener el enlace descarga el primer enlace es en MEGA, por lo que tuve que optar instalar un modulo de MEGA Python, funciona pero el script baja todo los capitulos y me gustaria bajar los que yo quiera.

Luego colocare el enlace.

pykongroo commented 6 years ago

Perdón la demora... lxml, es solo el parser para leer las estrcuturas de las etiquetas, Estuve revisando el script para hacerlo funcionar con animeyt, y el script logra llegar a las URL de descarga, en las que ví están un enlace a MEGA, con el cual se podría usar un modulo extra para su descarga, y otros enlaces semidirectos, digo semidirectos porque en realidad es otra pagina desde la que se genera la descarga, en esta parte tengo problemas para identificar la url real del archivo, estaré informando cualquier novedad que encuentre.

robotrono commented 6 years ago

@pycongroo hola, no hay problema, si se tendria que usar el modulo de mega de python y facilmente se descarga, cuando puedas compartir la parte del codigo que obtiene el link me avisas por favor.

Por cierto revise este otro script y esta con menu y todo, lamentablemente descarga toda la lista de capitulos de una serie seleccionada.

https://github.com/juanmafn/download_anime_ncurses_python/blob/master/downloadAnimeyt_ncurses.py

pykongroo commented 6 years ago

Hola @robotrono

Estuve viendo un poco este tema, y viendo el otro script tome la parte que se encarga de obtener el enlace de descarga, lamentablemente este es un link a una pagina que te va a redirigir a la pagina de descarga verdadera, que en algunos casos es el archivo directo, o por MEGA o mediafire.

Estuve tratando de obtener la url final desde la pagina dinámica a la que me redirecciona, pero no tuve exito, ya que se maneja por javascript (la url se muestra en cierto tiempo), se podria tratar de obtener el enlace por medio de selenium, que nos permite interactuar con la pagina de forma dinámica.

Lo que hice fué modificar la funcion get_link_by_link_page:

def get_link_by_link_page(self, dl_link): page_text = self.sesion.request_get(dl_link).text return re.findall('function crearBoton.*?url.*?=.*?"(.*?)"', page_text.replace('\n',''))[0]

un ejemplo: de la url de descarga: https://www.animeyt.tv/descargar/29609 se tienen 4 alternativas de descarga; por animeyt(por MEGA), y otros 3 que usan paginas dinamicas para generar la url de descarga real,

Subí una version nueva que puede traer alternativas de url, pero aun queda implementar la forma en la que se descargara el capitulo en este caso.

Se subió al nuevo branch: https://github.com/pycongroo/py-anime_dl/tree/prueba_multiples_url

robotrono commented 6 years ago

Voy a echarle un ojo, a mi me gustaria hacer el menu, pero no tengo conocimiento y no he tenido tiempo para juguetear con el codigo y colocar un array de los capitulos al seleccionar la serie.

Gracias por la respuesta por cierto!