diff --git a/errors.log b/errors.log index dd9866d..e69de29 100644 --- a/errors.log +++ b/errors.log @@ -1,786 +0,0 @@ -Unexpected error processing folder 'A.I.C.O. Incarnation (2018)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 136, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 245, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -Unexpected error processing folder 'A.I.C.O. Incarnation (2018)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 136, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 245, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -Unexpected error processing folder 'A.I.C.O. Incarnation (2018)': argument of type 'types.GenericAlias' is not iterable - Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 34, in __init - if folder not in self.folderDict: -TypeError: argument of type 'types.GenericAlias' is not iterable - -Unexpected error processing folder 'A.I.C.O. Incarnation (2018)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 136, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 245, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -Unexpected error processing folder 'Aesthetica of a Rogue Hero (2012)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 136, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 245, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -Unexpected error processing folder 'A.I.C.O. Incarnation (2018)': ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 534, in _make_request - response = conn.getresponse() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 516, in getresponse - httplib_response = super().getresponse() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\http\client.py", line 1375, in getresponse - response.begin() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\http\client.py", line 318, in begin - version, status, reason = self._read_status() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\http\client.py", line 287, in _read_status - raise RemoteDisconnected("Remote end closed connection without" -http.client.RemoteDisconnected: Remote end closed connection without response - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 534, in _make_request - response = conn.getresponse() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 516, in getresponse - httplib_response = super().getresponse() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\http\client.py", line 1375, in getresponse - response.begin() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\http\client.py", line 318, in begin - version, status, reason = self._read_status() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\http\client.py", line 287, in _read_status - raise RemoteDisconnected("Remote end closed connection without" -urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 137, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 248, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) - -Unexpected error processing folder 'Aesthetica of a Rogue Hero (2012)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 137, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 248, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -Unexpected error processing folder 'Alya Sometimes Hides Her Feelings in Russian (2024)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 137, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 248, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -Unexpected error processing folder 'Angels of Death (2018)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 137, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 248, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -Unexpected error processing folder 'Arifureta (2019)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 137, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 248, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -Folder: 'A.I.C.O. Incarnation (2018)' - Unexpected error processing folder 'A.I.C.O. Incarnation (2018)': ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -ConnectionResetError: [WinError 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 667, in send - resp = conn.urlopen( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\retry.py", line 474, in increment - raise reraise(type(error), error, _stacktrace) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request - raise new_e - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request - self._validate_conn(conn) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn - conn.connect() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 741, in connect - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\connection.py", line 920, in _ssl_wrap_socket_and_match_hostname - ssl_sock = ssl_wrap_socket( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 480, in ssl_wrap_socket - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\urllib3\util\ssl_.py", line 524, in _ssl_wrap_socket_impl - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 513, in wrap_socket - return self.sslsocket_class._create( - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1104, in _create - self.do_handshake() - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\ssl.py", line 1375, in do_handshake - self._sslobj.do_handshake() -urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "D:\repo\AniWorld\src\FolderLookup.py", line 31, in __init - missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) - File "D:\repo\AniWorld\src\FolderLookup.py", line 137, in __GetMissingEpisodesAndSeason - expected_dict = get_season_episode_count(key) # key season , value count of episodes - File "D:\repo\AniWorld\src\AniWorld-Downloader\src\aniworld\common\common.py", line 248, in get_season_episode_count - response = session.get(base_url, headers=ANIWORLD_HEADERS, timeout=DEFAULT_REQUEST_TIMEOUT) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 602, in get - return self.request("GET", url, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 589, in request - resp = self.send(prep, **send_kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\sessions.py", line 703, in send - r = adapter.send(request, **kwargs) - File "C:\Users\lukas\anaconda3\envs\AniWorld\lib\site-packages\requests\adapters.py", line 682, in send - raise ConnectionError(err, request=request) -requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen', None, 10054, None)) - diff --git a/src/AniWorld-Downloader b/src/AniWorld-Downloader deleted file mode 160000 index a267efa..0000000 --- a/src/AniWorld-Downloader +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a267efa72a12af19df6641ab2ab39e494a1d0ee8 diff --git a/src/AniWorldLoader.py b/src/AniWorldLoader.py deleted file mode 100644 index bab6f36..0000000 --- a/src/AniWorldLoader.py +++ /dev/null @@ -1,137 +0,0 @@ -import os -import re -import subprocess -import logging -import json -import requests -import html -from urllib.parse import quote -from Serie import Serie -from aniworld.models import Anime, Episode, NoMachingLanguage -from aniworld.config import PROVIDER_HEADERS, INVALID_PATH_CHARS, ANIWORLD_TO, session, DEFAULT_REQUEST_TIMEOUT -from aniworld.parser import arguments - - -# Read timeout from environment variable, default to 600 seconds (10 minutes) -timeout = int(os.getenv("DOWNLOAD_TIMEOUT", 600)) - -download_error_logger = logging.getLogger("DownloadErrors") -download_error_handler = logging.FileHandler("../download_errors.log") -download_error_handler.setLevel(logging.ERROR) -download_error_logger.addHandler(download_error_handler) - - -def CreateSerie(searchEntry): - return Serie(searchEntry["link"], searchEntry["name"], "aniworld.to", searchEntry["link"], {}) - -def search_anime(keyword: str = None) -> str: - - search_url = f"{ANIWORLD_TO}/ajax/seriesSearch?keyword={quote(keyword)}" - anime_list = fetch_anime_list(search_url) - - return anime_list - -def fetch_anime_list(url: str) -> list: - response = session.get(url, timeout=DEFAULT_REQUEST_TIMEOUT) - response.raise_for_status() - - clean_text = response.text.strip() - - try: - decoded_data = json.loads(html.unescape(clean_text)) - return decoded_data if isinstance(decoded_data, list) else [] - except json.JSONDecodeError: - try: - # Remove BOM and problematic characters - clean_text = clean_text.encode('utf-8').decode('utf-8-sig') - # Remove problematic characters - clean_text = re.sub(r'[\x00-\x1F\x7F-\x9F]', '', clean_text) - # Parse the new text - decoded_data = json.loads(clean_text) - return decoded_data if isinstance(decoded_data, list) else [] - except (requests.RequestException, json.JSONDecodeError) as exc: - raise ValueError("Could not get valid anime: ") from exc - -def AniWorld_download_episode(directory, folder, season, episode, key): - """Helper function to download an individual episode.""" - try: - folder_path = os.path.join(directory, folder, f"Season {season}") - anime = Anime( - episode_list=[Episode(slug=key, season=season, episode=episode)], - language="German Dub", - output_directory=folder_path - ) - logging.info(f"Downloading anime {key} season {season} episode {episode}") - download(anime) - logging.info(f"Downloading completed anime {key} season {season} episode {episode}") - except KeyError as keye: - download_error_logger.error(f"Language not found for anime: {key} season: {season} episode: {episode}") - except NoMachingLanguage as ee: - download_error_logger.error(f"Language not found for anime: {key} season: {season} episode: {episode}") - except Exception as e: - logging.error(f"Error downloading episode {episode} of season {season} for anime {key}: {e}") - -def download(anime: Anime): # pylint: disable=too-many-branches - for episode in anime: - sanitized_anime_title = ''.join( - char for char in anime.title if char not in INVALID_PATH_CHARS - ) - - if episode.season == 0: - output_file = ( - f"{sanitized_anime_title} - " - f"Movie {episode.episode:02} - " - f"({anime.language}).mp4" - ) - else: - output_file = ( - f"{sanitized_anime_title} - " - f"S{episode.season:02}E{episode.episode:03} - " - f"({anime.language}).mp4" - ) - - output_path = os.path.join(anime.output_directory, output_file) - os.makedirs(os.path.dirname(output_path), exist_ok=True) - command = [ - "yt-dlp", - episode.get_direct_link(anime.provider, anime.language), - "--fragment-retries", "infinite", - #"--concurrent-fragments", "4", - "-o", output_path, - "--quiet", - "--no-warnings", - "--progress" - ] - - if anime.provider in PROVIDER_HEADERS: - for header in PROVIDER_HEADERS[anime.provider]: - command.extend(["--add-header", header]) - - if arguments.only_command: - logging.info( - f"{anime.title} - S{episode.season}E{episode.episode} - ({anime.language}): " - f"{' '.join(str(item) if item is not None else '' for item in command)}" - ) - continue - - try: - subprocess.run(command, check=True, timeout=timeout) - except subprocess.TimeoutExpired: - download_error_logger.error(f"Download timed out after {timeout} seconds: {' '.join(str(item) for item in command)}") - except subprocess.CalledProcessError: - download_error_logger.error(f"Error running command: {' '.join(str(item) for item in command)}") - except KeyboardInterrupt: - logging.warning("Download interrupted by user.") - output_dir = os.path.dirname(output_path) - is_empty = True - - for file_name in os.listdir(output_dir): - if re.search(r'\.(part|ytdl|part-Frag\d+)$', file_name): - os.remove(os.path.join(output_dir, file_name)) - else: - is_empty = False - - if is_empty or not os.listdir(output_dir): - os.rmdir(output_dir) - logging.info(f"Removed empty download directory: {output_dir}") - diff --git a/src/Loaders/AniWorldLoader.py b/src/Loaders/AniWorldLoader.py new file mode 100644 index 0000000..41ca6d0 --- /dev/null +++ b/src/Loaders/AniWorldLoader.py @@ -0,0 +1,327 @@ +import os +import re +import subprocess +import logging +import json +import requests +import html +from urllib.parse import quote + +from bs4 import BeautifulSoup + +from fake_useragent import UserAgent +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry + +from src.Loaders.Loader import Loader +from src.Loaders.Providers import Providers +from yt_dlp import YoutubeDL + +# Read timeout from environment variable, default to 600 seconds (10 minutes) +timeout = int(os.getenv("DOWNLOAD_TIMEOUT", 600)) + +download_error_logger = logging.getLogger("DownloadErrors") +download_error_handler = logging.FileHandler("../../download_errors.log") +download_error_handler.setLevel(logging.ERROR) + +noKeyFound_logger = logging.getLogger("NoKeyFound") +noKeyFound_handler = logging.FileHandler("../../NoKeyFound.log") +noKeyFound_handler.setLevel(logging.ERROR) + +class AniworldLoader(Loader): + def __init__(self): + self.SUPPORTED_PROVIDERS = ["VOE", "Doodstream", "Vidmoly", "Vidoza", "SpeedFiles", "Streamtape", "Luluvdo"] + self.AniworldHeaders = { + "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8", + "accept-encoding": "gzip, deflate, br, zstd", + "accept-language": "de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", + "cache-control": "max-age=0", + "priority": "u=0, i", + "sec-ch-ua": '"Chromium";v="136", "Microsoft Edge";v="136", "Not.A/Brand";v="99"', + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"Windows"', + "sec-fetch-dest": "document", + "sec-fetch-mode": "navigate", + "sec-fetch-site": "none", + "sec-fetch-user": "?1", + "upgrade-insecure-requests": "1", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0" + } + self.INVALID_PATH_CHARS = ['<', '>', ':', '"', '/', '\\', '|', '?', '*', '&'] + self.RANDOM_USER_AGENT = UserAgent().random + self.LULUVDO_USER_AGENT = "Mozilla/5.0 (Android 15; Mobile; rv:132.0) Gecko/132.0 Firefox/132.0" + self.PROVIDER_HEADERS = { + "Vidmoly": ['Referer: "https://vidmoly.to"'], + "Doodstream": ['Referer: "https://dood.li/"'], + "VOE": [f'User-Agent: {self.RANDOM_USER_AGENT}'], + "Luluvdo": [ + f'User-Agent: {self.LULUVDO_USER_AGENT}', + 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7', + 'Origin: "https://luluvdo.com"', + 'Referer: "https://luluvdo.com/"' + ]} + self.ANIWORLD_TO = "https://aniworld.to" + self.session = requests.Session() + + # Configure retries with backoff + retries = Retry( + total=5, # Number of retries + backoff_factor=1, # Delay multiplier (1s, 2s, 4s, ...) + status_forcelist=[500, 502, 503, 504], # Retry for specific HTTP errors + allowed_methods=["GET"] + ) + + adapter = HTTPAdapter(max_retries=retries) + self.session.mount("https://", adapter) + self.DEFAULT_REQUEST_TIMEOUT = 30 + + self._KeyHTMLDict = {} + self._EpisodeHTMLDict = {} + self.Providers = Providers() + + def Search(self, word: str) -> list: + search_url = f"{self.ANIWORLD_TO}/ajax/seriesSearch?keyword={quote(word)}" + anime_list = self.fetch_anime_list(search_url) + + return anime_list + + + def fetch_anime_list(self, url: str) -> list: + response = self.session.get(url, timeout=self.DEFAULT_REQUEST_TIMEOUT) + response.raise_for_status() + + clean_text = response.text.strip() + + try: + decoded_data = json.loads(html.unescape(clean_text)) + return decoded_data if isinstance(decoded_data, list) else [] + except json.JSONDecodeError: + try: + # Remove BOM and problematic characters + clean_text = clean_text.encode('utf-8').decode('utf-8-sig') + # Remove problematic characters + clean_text = re.sub(r'[\x00-\x1F\x7F-\x9F]', '', clean_text) + # Parse the new text + decoded_data = json.loads(clean_text) + return decoded_data if isinstance(decoded_data, list) else [] + except (requests.RequestException, json.JSONDecodeError) as exc: + raise ValueError("Could not get valid anime: ") from exc + + def _GetLanguageKey(self, language: str) -> int: + languageCode = 0 + if (language == "German Dub"): + languageCode = 1 + if (language == "English Sub"): + languageCode = 2 + if (language == "German Sub"): + languageCode = 3 + return languageCode + def IsLanguage(self, season: int, episode: int, key: str, language: str = "German Dub") -> bool: + """ + Language Codes: + 1: German Dub + 2: English Sub + 3: German Sub + """ + languageCode = self._GetLanguageKey(language) + + episode_soup = BeautifulSoup(self._GetEpisodeHTML(season, episode, key).content, 'html.parser') + change_language_box_div = episode_soup.find( + 'div', class_='changeLanguageBox') + languages = [] + + if change_language_box_div: + img_tags = change_language_box_div.find_all('img') + for img in img_tags: + lang_key = img.get('data-lang-key') + if lang_key and lang_key.isdigit(): + languages.append(int(lang_key)) + + return languageCode in languages + + + def Download(self, baseDirectory: str, serieFolder: str, season: int, episode: int, key: str, language: str = "German Dub") -> bool: + sanitized_anime_title = ''.join( + char for char in self.GetTitle(key) if char not in self.INVALID_PATH_CHARS + ) + + if season == 0: + output_file = ( + f"{sanitized_anime_title} - " + f"Movie {episode:02} - " + f"({language}).mp4" + ) + else: + output_file = ( + f"{sanitized_anime_title} - " + f"S{season:02}E{episode:03} - " + f"({language}).mp4" + ) + + output_path = os.path.join(os.path.join(baseDirectory, serieFolder), output_file) + os.makedirs(os.path.dirname(output_path), exist_ok=True) + + for provider in self.SUPPORTED_PROVIDERS: + link, header = self._get_direct_link_from_provider(season, episode, key, language) + ydl_opts = { + 'fragment_retries': float('inf'), + 'outtmpl': output_path, + 'quiet': True, + 'no_warnings': True, + 'progress_with_newline': True + } + + if header: + ydl_opts['http_headers'] = header + + with YoutubeDL(ydl_opts) as ydl: + ydl.download([link]) + break + + + def GetSiteKey(self) -> str: + return "aniworld.to" + + def GetTitle(self, key: str) -> str: + soup = BeautifulSoup(self._GetKeyHTML(key).content, 'html.parser') + title_div = soup.find('div', class_='series-title') + + if title_div: + return title_div.find('h1').find('span').text + + return "" + + def _GetKeyHTML(self, key: str): + if key in self._KeyHTMLDict: + return self._KeyHTMLDict[key] + + + self._KeyHTMLDict[key] = self.session.get( + f"{self.ANIWORLD_TO}/anime/stream/{key}", + timeout=self.DEFAULT_REQUEST_TIMEOUT + ) + return self._KeyHTMLDict[key] + def _GetEpisodeHTML(self, season: int, episode: int, key: str): + if key in self._EpisodeHTMLDict: + return self._EpisodeHTMLDict[key] + + + link = ( + f"{self.ANIWORLD_TO}/anime/stream/{key}/" + f"staffel-{season}/episode-{episode}" + ) + html = self.session.get(link, timeout=self.DEFAULT_REQUEST_TIMEOUT) + self._EpisodeHTMLDict[key] = html + return self._EpisodeHTMLDict[key] + + def _get_provider_from_html(self, season: int, episode: int, key: str) -> dict: + """ + Parses the HTML content to extract streaming providers, + their language keys, and redirect links. + + Returns a dictionary with provider names as keys + and language key-to-redirect URL mappings as values. + + Example: + + { + 'VOE': {1: 'https://aniworld.to/redirect/1766412', + 2: 'https://aniworld.to/redirect/1766405'}, + 'Doodstream': {1: 'https://aniworld.to/redirect/1987922', + 2: 'https://aniworld.to/redirect/2700342'}, + ... + } + + Access redirect link with: + print(self.provider["VOE"][2]) + """ + + soup = BeautifulSoup(self._GetEpisodeHTML(season, episode, key).content, 'html.parser') + providers = {} + + episode_links = soup.find_all( + 'li', class_=lambda x: x and x.startswith('episodeLink') + ) + + if not episode_links: + return providers + + for link in episode_links: + provider_name_tag = link.find('h4') + provider_name = provider_name_tag.text.strip() if provider_name_tag else None + + redirect_link_tag = link.find('a', class_='watchEpisode') + redirect_link = redirect_link_tag['href'] if redirect_link_tag else None + + lang_key = link.get('data-lang-key') + lang_key = int( + lang_key) if lang_key and lang_key.isdigit() else None + + if provider_name and redirect_link and lang_key: + if provider_name not in providers: + providers[provider_name] = {} + providers[provider_name][lang_key] = f"{self.ANIWORLD_TO}{redirect_link}" + + + return providers + def _get_redirect_link(self, season: int, episode: int, key: str, language: str = "German Dub") -> str: + languageCode = self._GetLanguageKey(language) + if (self.IsLanguage(season, episode, key, language)): + for provider_name, lang_dict in self._get_provider_from_html(season, episode, key).items(): + if languageCode in lang_dict: + return(lang_dict[languageCode], provider_name) + break + return None + def _get_embeded_link(self, season: int, episode: int, key: str, language: str = "German Dub"): + redirect_link, provider_name = self._get_redirect_link(season, episode, key, language) + + embeded_link = self.session.get( + redirect_link, timeout=self.DEFAULT_REQUEST_TIMEOUT, + headers={'User-Agent': self.RANDOM_USER_AGENT}).url + return embeded_link + def _get_direct_link_from_provider(self, season: int, episode: int, key: str, language: str = "German Dub") -> str: + """ + providers = { + "Vidmoly": get_direct_link_from_vidmoly, + "Vidoza": get_direct_link_from_vidoza, + "VOE": get_direct_link_from_voe, + "Doodstream": get_direct_link_from_doodstream, + "SpeedFiles": get_direct_link_from_speedfiles, + "Luluvdo": get_direct_link_from_luluvdo + } + + """ + embeded_link = self._get_embeded_link(season, episode, key, language) + if embeded_link is None: + return None + + return self.Providers.GetProvider("VOE").GetLink(embeded_link, self.DEFAULT_REQUEST_TIMEOUT) + + def get_season_episode_count(self, slug : str) -> dict: + base_url = f"{self.ANIWORLD_TO}/anime/stream/{slug}/" + response = requests.get(base_url, timeout=self.DEFAULT_REQUEST_TIMEOUT) + soup = BeautifulSoup(response.content, 'html.parser') + + season_meta = soup.find('meta', itemprop='numberOfSeasons') + number_of_seasons = int(season_meta['content']) if season_meta else 0 + + episode_counts = {} + + for season in range(1, number_of_seasons + 1): + season_url = f"{base_url}staffel-{season}" + response = requests.get(season_url, timeout=self.DEFAULT_REQUEST_TIMEOUT) + soup = BeautifulSoup(response.content, 'html.parser') + + episode_links = soup.find_all('a', href=True) + unique_links = set( + link['href'] + for link in episode_links + if f"staffel-{season}/episode-" in link['href'] + ) + + episode_counts[season] = len(unique_links) + + return episode_counts + + + diff --git a/src/Loaders/Loader.py b/src/Loaders/Loader.py new file mode 100644 index 0000000..7d2ed25 --- /dev/null +++ b/src/Loaders/Loader.py @@ -0,0 +1,27 @@ +from abc import ABC, abstractmethod + + +class Loader(ABC): + @abstractmethod + def Search(self, word: str) -> list: + pass + + @abstractmethod + def IsLanguage(self, season: int, episode: int, key: str, language: str = "German Dub") -> bool: + pass + + @abstractmethod + def Download(self, baseDirectory: str, serieFolder: str, season: int, episode: int, key: str) -> bool: + pass + + @abstractmethod + def GetSiteKey(self) -> str: + pass + + @abstractmethod + def GetTitle(self) -> str: + pass + + @abstractmethod + def get_season_episode_count(self, slug: str) -> dict: + pass \ No newline at end of file diff --git a/src/Loaders/Loaders.py b/src/Loaders/Loaders.py new file mode 100644 index 0000000..0e5d53e --- /dev/null +++ b/src/Loaders/Loaders.py @@ -0,0 +1,10 @@ +from src.Loaders.AniWorldLoader import AniworldLoader +from src.Loaders.Loader import Loader + +class Loaders: + + def __init__(self): + self.dict = {"aniworld.to": AniworldLoader()} + + def GetLoader(self, key: str) -> Loader: + return self.dict[key] diff --git a/src/Loaders/Providers.py b/src/Loaders/Providers.py new file mode 100644 index 0000000..c4ac974 --- /dev/null +++ b/src/Loaders/Providers.py @@ -0,0 +1,12 @@ + + +from src.Loaders.provider.Provider import Provider +from src.Loaders.provider.voe import VOE + +class Providers: + + def __init__(self): + self.dict = {"VOE": VOE()} + + def GetProvider(self, key: str) -> Provider: + return self.dict[key] diff --git a/src/Loaders/__init__.py b/src/Loaders/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/Loaders/__pycache__/AniWorldLoader.cpython-310.pyc b/src/Loaders/__pycache__/AniWorldLoader.cpython-310.pyc new file mode 100644 index 0000000..02d1735 Binary files /dev/null and b/src/Loaders/__pycache__/AniWorldLoader.cpython-310.pyc differ diff --git a/src/Loaders/__pycache__/Loader.cpython-310.pyc b/src/Loaders/__pycache__/Loader.cpython-310.pyc new file mode 100644 index 0000000..ceaeaa6 Binary files /dev/null and b/src/Loaders/__pycache__/Loader.cpython-310.pyc differ diff --git a/src/Loaders/__pycache__/Loaders.cpython-310.pyc b/src/Loaders/__pycache__/Loaders.cpython-310.pyc new file mode 100644 index 0000000..576e361 Binary files /dev/null and b/src/Loaders/__pycache__/Loaders.cpython-310.pyc differ diff --git a/src/Loaders/__pycache__/Providers.cpython-310.pyc b/src/Loaders/__pycache__/Providers.cpython-310.pyc new file mode 100644 index 0000000..4e28b35 Binary files /dev/null and b/src/Loaders/__pycache__/Providers.cpython-310.pyc differ diff --git a/src/Loaders/__pycache__/__init__.cpython-310.pyc b/src/Loaders/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000..1a042e8 Binary files /dev/null and b/src/Loaders/__pycache__/__init__.cpython-310.pyc differ diff --git a/src/Loaders/provider/Provider.py b/src/Loaders/provider/Provider.py new file mode 100644 index 0000000..8e14b66 --- /dev/null +++ b/src/Loaders/provider/Provider.py @@ -0,0 +1,7 @@ +from abc import ABC, abstractmethod + + +class Provider(ABC): + @abstractmethod + def GetLink(self, embededLink: str, DEFAULT_REQUEST_TIMEOUT: int) -> (str, [str]): + pass diff --git a/src/Loaders/provider/__pycache__/Provider.cpython-310.pyc b/src/Loaders/provider/__pycache__/Provider.cpython-310.pyc new file mode 100644 index 0000000..1fb0e26 Binary files /dev/null and b/src/Loaders/provider/__pycache__/Provider.cpython-310.pyc differ diff --git a/src/Loaders/provider/__pycache__/voe.cpython-310.pyc b/src/Loaders/provider/__pycache__/voe.cpython-310.pyc new file mode 100644 index 0000000..e0abefc Binary files /dev/null and b/src/Loaders/provider/__pycache__/voe.cpython-310.pyc differ diff --git a/src/Loaders/provider/doodstream.py b/src/Loaders/provider/doodstream.py new file mode 100644 index 0000000..b472703 --- /dev/null +++ b/src/Loaders/provider/doodstream.py @@ -0,0 +1,59 @@ +import re +import random +import time + +from fake_useragent import UserAgent +import requests +from src.Loaders.provider.Provider import Provider +class Doodstream(Provider): + + def __init__(self): + self.RANDOM_USER_AGENT = UserAgent().random + + def GetLink(self, embededLink: str, DEFAULT_REQUEST_TIMEOUT: int) -> str: + headers = { + 'User-Agent': self.RANDOM_USER_AGENT, + 'Referer': 'https://dood.li/' + } + + def extract_data(pattern, content): + match = re.search(pattern, content) + return match.group(1) if match else None + + def generate_random_string(length=10): + characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + return ''.join(random.choice(characters) for _ in range(length)) + + response = requests.get( + embededLink, + headers=headers, + timeout=DEFAULT_REQUEST_TIMEOUT, + verify=False + ) + response.raise_for_status() + + pass_md5_pattern = r"\$\.get\('([^']*\/pass_md5\/[^']*)'" + pass_md5_url = extract_data(pass_md5_pattern, response.text) + if not pass_md5_url: + raise ValueError( + f'pass_md5 URL not found using {embededLink}.') + + full_md5_url = f"https://dood.li{pass_md5_url}" + + token_pattern = r"token=([a-zA-Z0-9]+)" + token = extract_data(token_pattern, response.text) + if not token: + raise ValueError(f'Token not found using {embededLink}.') + + md5_response = requests.get( + full_md5_url, headers=headers, timeout=DEFAULT_REQUEST_TIMEOUT, verify=False) + md5_response.raise_for_status() + video_base_url = md5_response.text.strip() + + random_string = generate_random_string(10) + expiry = int(time.time()) + + direct_link = f"{video_base_url}{random_string}?token={token}&expiry={expiry}" + # print(direct_link) + + return direct_link \ No newline at end of file diff --git a/src/Loaders/provider/filemoon.py b/src/Loaders/provider/filemoon.py new file mode 100644 index 0000000..aa047eb --- /dev/null +++ b/src/Loaders/provider/filemoon.py @@ -0,0 +1,51 @@ +import re +import requests +# import jsbeautifier.unpackers.packer as packer + +from aniworld import config + +REDIRECT_REGEX = re.compile( + r'