Skip to content

Commit 9caecc2

Browse files
committed
nuova funzione fileInfo()
recupera le informazione riguardanti il file dell'episodio richiesto, le info sono: ``` { "content_type": str, # Tipo del file, es. video/mp4 "total_bytes": int, # Byte totali del file "last_modified": datetime, # Data e ora dell'ultimo aggiornamento effettuato all'episodio sul server "server_name": str, # Nome del server "server_id": int, # ID del server "url": str # url dell'episodio } ```
1 parent a2436a1 commit 9caecc2

4 files changed

Lines changed: 71 additions & 3 deletions

File tree

animeworld/episodio.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,36 @@ def links(self) -> List[Server]: # lista dei provider dove sono hostati gli ep
6767

6868
return self.__setServer(tmp, self.number)
6969

70+
def fileInfo(self) -> Dict[str,str]:
71+
"""
72+
Recupera le informazione del file dell'episodio.
73+
74+
```
75+
return {
76+
"content_type": str, # Tipo del file, es. video/mp4
77+
"total_bytes": int, # Byte totali del file
78+
"last_modified": datetime, # Data e ora dell'ultimo aggiornamento effettuato all'episodio sul server
79+
"server_name": str, # Nome del server
80+
"server_id": int, # ID del server
81+
"url": str # url dell'episodio
82+
}
83+
```
84+
"""
85+
86+
info = ""
87+
err = None
88+
for server in self.links:
89+
try:
90+
info = server.fileInfo()
91+
except ServerNotSupported:
92+
pass
93+
except requests.exceptions.RequestException as exc:
94+
err = exc
95+
else:
96+
return info
97+
98+
raise err
99+
70100
def download(self, title: Optional[str]=None, folder: str='', hook: Callable[[Dict], None] = lambda *args:None) -> Optional[str]: # Scarica l'episodio con il primo link nella lista
71101
"""
72102
Scarica l'episodio dal primo server funzionante della lista links.

animeworld/server.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import os
88
from typing import *
99
import time
10+
from datetime import datetime
1011

1112
from .utility import HealthCheck, SES
1213
from .exceptions import ServerNotSupported
@@ -60,6 +61,37 @@ def _sanitize(self, title: str) -> str: # Toglie i caratteri illegali per i file
6061
for x in illegal:
6162
title = title.replace(x, '')
6263
return title
64+
65+
def fileInfo(self) -> Dict[str,str]:
66+
"""
67+
Recupera le informazione del file dell'episodio.
68+
69+
```
70+
return {
71+
"content_type": str, # Tipo del file, es. video/mp4
72+
"total_bytes": int, # Byte totali del file
73+
"last_modified": datetime, # Data e ora dell'ultimo aggiornamento effettuato all'episodio sul server
74+
"server_name": str, # Nome del server
75+
"server_id": int, # ID del server
76+
"url": str # url dell'episodio
77+
}
78+
```
79+
"""
80+
81+
url = self._getFileLink()
82+
83+
with SES.head(url) as r:
84+
r.raise_for_status()
85+
86+
return {
87+
"content_type": r.headers['content-type'],
88+
"total_bytes": int(r.headers['Content-Length']),
89+
"last_modified": datetime.strptime(r.headers['Last-Modified'], "%a, %d %b %Y %H:%M:%S %Z"),
90+
"server_name": self.name,
91+
"server_id": self.Nid,
92+
"url": url
93+
}
94+
6395

6496
def download(self, title: Optional[str]=None, folder: str='', hook: Callable[[Dict], None] = lambda *args:None) -> Optional[str]:
6597
"""
@@ -83,6 +115,11 @@ def download(self, title: Optional[str]=None, folder: str='', hook: Callable[[Di
83115
"""
84116
raise ServerNotSupported(self.name)
85117

118+
# Protected
119+
def _getFileLink(self) -> str:
120+
121+
raise ServerNotSupported(self.name)
122+
86123
# Protected
87124
def _downloadIn(self, title: str, folder: str, hook: Callable[[Dict], None]) -> bool: # Scarica l'episodio
88125
"""

documentation/example.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def my_hook(d):
2222

2323

2424
try:
25-
anime = aw.Anime(link="https://www.animeworld.tv/play/one-piece-subita.sORn4")
25+
anime = aw.Anime(link="https://www.animeworld.tv/play/summertime-render.GDU38")
2626

2727
print("Titolo:", anime.getName()) # Titolo dell'anime
2828

@@ -49,7 +49,8 @@ def my_hook(d):
4949
for k in x.links:
5050
print(f"\t{k.name} - {k.link}")
5151

52-
if x.number == '1005':
52+
if x.number == '1':
53+
print("\n\tFile info: {\n\t\t" + "\n\t\t".join("{}: {}".format(k, v) for k, v in x.fileInfo().items()) + "\n\t}")
5354
x.download(hook=my_hook)
5455
break
5556
except (aw.DeprecatedLibrary, aw.Error404) as error:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setuptools.setup(
77
name="animeworld",
8-
version="1.4.18",
8+
version="1.4.19",
99
author="MainKronos",
1010
description="AnimeWorld UNOFFICIAL API",
1111
long_description=long_description,

0 commit comments

Comments
 (0)