diff --git a/anime_downloader/cli.py b/anime_downloader/cli.py index dec6cba..3aeefe2 100644 --- a/anime_downloader/cli.py +++ b/anime_downloader/cli.py @@ -1,4 +1,4 @@ -import click +import click import sys import os import importlib @@ -43,9 +43,9 @@ def cli(log_level): Download or watch your favourite anime """ - if not util.check_in_path('aria2c'): - raise RuntimeError("Aria2 is not in path. Please follow installation instructions: https://github.com/vn-ki/anime-downloader/wiki/Installation") util.setup_logger(log_level) + # if not util.check_in_path('aria2c'): + # raise logger.ERROR("Aria2 is not in path. Please follow installation instructions: https://github.com/vn-ki/anime-downloader/wiki/Installation") def main(): @@ -55,5 +55,5 @@ def main(): if 'DEBUG' in sys.argv: raise click.echo(click.style('ERROR:', fg='black', bg='red') + - ' '+click.style(str(e), fg='red')) + ' ' + click.style(str(e), fg='red')) sys.exit(1) diff --git a/anime_downloader/downloader/SmartDL.py b/anime_downloader/downloader/SmartDL.py new file mode 100644 index 0000000..755f4b2 --- /dev/null +++ b/anime_downloader/downloader/SmartDL.py @@ -0,0 +1,29 @@ +from anime_downloader.downloader.base_downloader import BaseDownloader +from pySmartDL import SmartDL +from pathlib import Path +import time +import sys +import os + + +class pySmartDL(BaseDownloader): + def _download(self): + path = Path(self.path) + headers = self.source.headers + + if 'user-agent' not in headers: + headers['user-agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101Firefox/56.0" + + # This allows backwards compatible while also working with + # PySmartDl as it only passes user agent if spelled "User-Agent" + headers['User-Agent'] = headers.pop('user-agent') + + if self.source.referer: + headers['Referer'] = self.source.referer + + url = self.source.stream_url + request_args = {'headers': headers} + + dest = str(self.path) # str(path.parent.absolute()) + obj = SmartDL(url, dest, request_args=request_args, progress_bar=True) + obj.start() diff --git a/anime_downloader/downloader/__init__.py b/anime_downloader/downloader/__init__.py index 4a2ec41..75639ab 100644 --- a/anime_downloader/downloader/__init__.py +++ b/anime_downloader/downloader/__init__.py @@ -1,6 +1,6 @@ from anime_downloader.downloader.http_downloader import HTTPDownloader from anime_downloader.downloader.external_downloader import ExternalDownloader - +from anime_downloader.downloader.SmartDL import pySmartDL def get_downloader(downloader): """get_downloader returns the proper downloader class @@ -9,4 +9,8 @@ def get_downloader(downloader): """ if downloader == 'http': return HTTPDownloader + + elif downloader == 'pySmartDL': + return pySmartDL + return ExternalDownloader diff --git a/anime_downloader/downloader/base_downloader.py b/anime_downloader/downloader/base_downloader.py index 083bad0..7142e91 100644 --- a/anime_downloader/downloader/base_downloader.py +++ b/anime_downloader/downloader/base_downloader.py @@ -30,7 +30,7 @@ class BaseDownloader: # Added Referer Header as kwik needd it. headers = self.source.headers if 'user-agent' not in headers: - headers['user-agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101Firefox/56.0", + headers['user-agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101Firefox/56.0" if self.source.referer: headers['referer'] = self.source.referer diff --git a/anime_downloader/downloader/http_downloader.py b/anime_downloader/downloader/http_downloader.py index e8c248b..5c8f0ea 100644 --- a/anime_downloader/downloader/http_downloader.py +++ b/anime_downloader/downloader/http_downloader.py @@ -11,6 +11,7 @@ session = session.get_session() session = requests logger = logging.getLogger(__name__) + class HTTPDownloader(BaseDownloader): def _download(self): logger.warning('Using internal downloader which might be slow. Use aria2 for full bandwidth.') @@ -28,7 +29,7 @@ class HTTPDownloader(BaseDownloader): url = self.source.stream_url headers = self.source.headers if 'user-agent' not in headers: - headers['user-agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101Firefox/56.0", + headers['user-agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101Firefox/56.0" if self.source.referer: headers['Referer'] = self.source.referer @@ -59,7 +60,7 @@ class HTTPDownloader(BaseDownloader): def _non_range_download(self): url = self.source.stream_url headers = { - 'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101Firefox/56.0", + 'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101Firefox/56.0" } if self.source.referer: headers['Referer'] = self.source.referer diff --git a/anime_downloader/extractors/base_extractor.py b/anime_downloader/extractors/base_extractor.py index 792c088..400a667 100644 --- a/anime_downloader/extractors/base_extractor.py +++ b/anime_downloader/extractors/base_extractor.py @@ -3,11 +3,14 @@ from anime_downloader.sites.exceptions import NotFoundError class BaseExtractor: - def __init__(self, url, quality=None, headers={}): + def __init__(self, url, quality=None, headers=None): if not url.startswith('http'): url = 'https://' + url self.url = url + if headers is None: + headers = {} + # TODO: Maybe quality should be only delt with inside epiosde(?) self.quality = quality diff --git a/anime_downloader/sites/anime.py b/anime_downloader/sites/anime.py index 0a551eb..7d6f63a 100644 --- a/anime_downloader/sites/anime.py +++ b/anime_downloader/sites/anime.py @@ -422,7 +422,7 @@ class AnimeEpisode: else: path = os.path.join(path, file_name) - Downloader = get_downloader('http') + Downloader = get_downloader('pySmartDL') downloader = Downloader(self.source(), path, force, range_size=range_size) diff --git a/setup.py b/setup.py index 50b9f11..fd81af1 100644 --- a/setup.py +++ b/setup.py @@ -21,6 +21,7 @@ setup( url='https://github.com/vn-ki/anime-downloader', keywords=['anime', 'downloader', '9anime', 'download', 'kissanime'], install_requires=[ + 'pySmartDL>=1.3.3', 'beautifulsoup4>=4.6.0', 'requests>=2.18.4', 'Click>=6.7',