From 7f0ac7c46bda084f141887ce55c3c430a378a6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=B3nos?= Date: Sun, 13 Feb 2022 16:04:42 +0100 Subject: [PATCH] update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La funzione download non ritorna più un bool ma il file scaricato (str) --- animeworld/episodio.py | 5 +++-- animeworld/server.py | 25 +++++++++++++++++-------- setup.py | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/animeworld/episodio.py b/animeworld/episodio.py index 33b8df1..22d8626 100644 --- a/animeworld/episodio.py +++ b/animeworld/episodio.py @@ -1,6 +1,7 @@ """ Modulo contenente la struttura a classe degli episodi. """ +from tkinter.messagebox import NO import requests from bs4 import BeautifulSoup from typing import * @@ -66,7 +67,7 @@ def links(self) -> List[Server]: # lista dei provider dove sono hostati gli ep return self.__setServer(tmp, self.number) - def download(self, title: Optional[str]=None, folder: str='') -> Union[bool, NoReturn]: # Scarica l'episodio con il primo link nella lista + def download(self, title: Optional[str]=None, folder: str='') -> Optional[str]: # Scarica l'episodio con il primo link nella lista """ Scarica l'episodio dal primo server della lista links. @@ -74,7 +75,7 @@ def download(self, title: Optional[str]=None, folder: str='') -> Union[bool, NoR - `folder`: Posizione in cui verrà spostato il file scaricato. ``` - return bool # File scaricato + return str # File scaricato ``` """ diff --git a/animeworld/server.py b/animeworld/server.py index 806a459..b0dc6b3 100644 --- a/animeworld/server.py +++ b/animeworld/server.py @@ -62,13 +62,16 @@ def _sanitize(self, title: str) -> str: # Toglie i caratteri illegali per i file title = title.replace(x, '') return title - def download(self, title: Optional[str]=None, folder: str='') -> NoReturn: + def download(self, title: Optional[str]=None, folder: str='') -> Optional[str]: """ Scarica l'episodio. - `title`: Nome con cui verrà nominato il file scaricato. - `folder`: Posizione in cui verrà spostato il file scaricato. + ``` + return str # File scaricato + ``` """ raise ServerNotSupported(self.name) @@ -86,16 +89,19 @@ def _downloadIn(self, title: str, folder: str) -> bool: # Scarica l'episodio """ with requests.get(self._getFileLink(), headers = self._HDR, stream = True) as r: r.raise_for_status() - with open(f"{os.path.join(folder,title)}.mp4", 'wb') as f: + ext = r.headers['content-type'].split('/')[-1] + if ext == 'octet-stream': ext = 'mp4' + file = f"{title}.{ext}" + with open(f"{os.path.join(folder,file)}", 'wb') as f: for chunk in r.iter_content(chunk_size = 1024*1024): if chunk: f.write(chunk) else: - return True # Se il file è stato scaricato correttamente - return False # Se è accaduto qualche imprevisto + return file # Se il file è stato scaricato correttamente + return None # Se è accaduto qualche imprevisto # Protected - def _dowloadEx(self, title: str, folder: str): + def _dowloadEx(self, title: str, folder: str) -> Optional[str]: """ Scarica il file utilizzando yutube_dl. @@ -103,7 +109,7 @@ def _dowloadEx(self, title: str, folder: str): - `folder`: Posizione in cui verrà spostato il file scaricato. ``` - return bool # File scaricato + return str # File scaricato ``` """ class MyLogger(object): @@ -124,8 +130,11 @@ def my_hook(d): 'progress_hooks': [my_hook], } with youtube_dl.YoutubeDL(ydl_opts) as ydl: - ydl.download([self._getFileLink()]) - return True + url = self._getFileLink() + info = ydl.extract_info(url, download=False) + filename = ydl.prepare_filename(info) + ydl.download([url]) + return filename class AnimeWorld_Server(Server): diff --git a/setup.py b/setup.py index f6e7326..aa80371 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="animeworld", - version="1.4.10", + version="1.4.11", author="MainKronos", description="AnimeWorld UNOFFICIAL API", long_description=long_description,