Skip to content

Commit

Permalink
typing
Browse files Browse the repository at this point in the history
Aggiornata la wiki
  • Loading branch information
MainKronos committed Jan 29, 2022
1 parent a4a4f99 commit 5286035
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 77 deletions.
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ res = aw.find("No game no life")
print(res)
```
La funzione estituirà un dizionario contentente per chiave il nome dell'anime e per valore il link della pagina di animeworld.
```
```python
{
'No Game no Life': 'https://www.animeworld.tv/play/no-game-no-life.IJUH1',
'No Game No Life: Zero': 'https://www.animeworld.tv/play/no-game-no-life-zero.p-2vq'
'name': 'No Game no Life',
'link': 'https://www.animeworld.tv/play/no-game-no-life.IJUH1'
}
```
È Possibile anche scaricare gli episodi di un anime.
Expand Down Expand Up @@ -53,5 +53,4 @@ Per testare velocemete le funzionalità della libreria è possibile usare consul

Per un utilizzo avanzato consultare la [documentazione](../../wiki).


Per l'accesso al codice sorgente, alla documentazione e agli esempi andare [**qui**](https://github.com/MainKronos/Sonarr-AnimeDownloader/issues/6).
105 changes: 71 additions & 34 deletions animeworld/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
"""
AnimeWorld-API
"""
import json
import requests
from bs4 import BeautifulSoup
Expand Down Expand Up @@ -35,7 +38,7 @@ def find(keyword: str) -> Optional[Dict]:
- `keyword`: Il nome dell'anime o una porzione di esso.
```python
```
return {
name: str, # Nome dell'anime trovato
link: str # Link dell'anime trovato
Expand Down Expand Up @@ -71,14 +74,25 @@ def find(keyword: str) -> Optional[Dict]:
### Server ###

class Server:
"""
Attributes:
- `link`: Link del server in cui è hostato l'episodio.
- `Nid`: ID del server.
- `name`: Nome del server.
- `number`: Numero dell'episodio.
Methods:
- `download`: Scarica l'episodio.
"""

def __init__(self, link: str, Nid: int, name: str, number: str):
"""
Costruisce la classe Astratta Server.
- `link`: Link del server in cui è hostato l'episodio.
- `Nid`: ID del server.
- `name`: Nome del server.
- `number`: Numero dell'episodio
- `number`: Numero dell'episodio.
"""

self.link = link
Expand All @@ -88,12 +102,12 @@ def __init__(self, link: str, Nid: int, name: str, number: str):
self.name = name
"""Nome del server."""
self.number = number
"""Numero dell'episodio"""
"""Numero dell'episodio."""

self._HDR = HDR # Protected
self._defTitle = f"{self.number} - {self.name}" # nome del file provvisorio

def sanitize(self, title: str) -> str: # Toglie i caratteri illegali per i file
def _sanitize(self, title: str) -> str: # Toglie i caratteri illegali per i file
"""
Rimuove i caratteri illegali per il nome del file.
Expand Down Expand Up @@ -193,7 +207,7 @@ def download(self, title: Optional[str]=None, folder: str='') -> bool:
```
"""
if title is None: title = self._defTitle
else: title = self.sanitize(title)
else: title = self._sanitize(title)
return self._downloadIn(title,folder)

class VVVVID(Server):
Expand Down Expand Up @@ -226,7 +240,7 @@ def download(self, title: Optional[str]=None, folder: str='') -> bool:
```
"""
if title is None: title = self._defTitle
else: title = self.sanitize(title)
else: title = self._sanitize(title)
return self._dowloadEx(title,folder)


Expand Down Expand Up @@ -262,7 +276,7 @@ def download(self, title: Optional[str]=None, folder: str='') -> bool:
```
"""
if title is None: title = self._defTitle
else: title = self.sanitize(title)
else: title = self._sanitize(title)
return self._dowloadEx(title,folder)

class Streamtape(Server):
Expand Down Expand Up @@ -301,33 +315,42 @@ def download(self, title: Optional[str]=None, folder: str='') -> bool:
```
"""
if title is None: title = self._defTitle
else: title = self.sanitize(title)
else: title = self._sanitize(title)
return self._downloadIn(title,folder)

## Class ###############################################

class Episodio:
"""
Attributes:
- `number`: Numero dell'episodio.
- `links`: Lista dei server in cui è hostato l'episodio.
Methods:
- `download`: Scarica l'episodio dal primo server della lista links.
"""

def __init__(self, number: str, link: str, legacy: List[Dict] = []):
"""
Costruisce la classe Episodio.
- `number`: Numero dell'episodio.
- `link`: Link dell'endpoint dell'episodio.
- `legacy`: Lista di tutti i link dei server in cui sono hostati gli episodi.
"""
self.number = number
"""Numero dell'episodio."""
self.link = link
self.__link = link
"""Link dell'endpoint dell'episodio."""
self.legacy = legacy
self.__legacy = legacy
"""Lista di tutti i link dei server in cui sono hostati gli episodi."""

@property
def links(self) -> List[Server]: # lista dei provider dove sono hostati gli ep
"""
Ottiene la lista dei server in cui è hostato l'episodio.
```python
```
return [
Server, # Classe Server
...
Expand All @@ -336,7 +359,7 @@ def links(self) -> List[Server]: # lista dei provider dove sono hostati gli ep
"""
tmp = [] # tutti i links

res = requests.post(self.link, headers = HDR, cookies=cookies, timeout=(3, 27))
res = requests.post(self.__link, headers = HDR, cookies=cookies, timeout=(3, 27))
data = res.json()

for provID in data["links"]:
Expand All @@ -347,7 +370,7 @@ def links(self) -> List[Server]: # lista dei provider dove sono hostati gli ep
"link": data["links"][provID][key]["link"]
})

for prov in self.legacy:
for prov in self.__legacy:
if str(prov['id']) in data["links"].keys(): continue

tmp.append(prov)
Expand Down Expand Up @@ -376,7 +399,7 @@ def __setServer(self, links: List[Dict], numero: str) -> List[Server]: # Per ogn
- `links`: Dizionario ('id', 'name', 'link') contenente le informazioni del Server in cui è hostato l'episodio.
- `numero`: Numero dell'episodio.
```python
```
return [
Server, # Classe Server
...
Expand Down Expand Up @@ -413,20 +436,30 @@ def __sortServer(self, elem):


class Anime:
"""
Attributes:
- `link`: Link dell'anime.
- `html`: Pagina web di Animeworld dell'anime.
Methods:
- `getName`: Ottiene il nome dell'anime.
- `getTrama`: Ottiene la trama dell'anime.
- `getInfo`: Ottiene le informazioni dell'anime.
- `getEpisodes`: Ottiene tutti gli episodi dell'anime.
"""



def __init__(self, link: str):
"""
Costruisce la classe Anime.
- `link`: Il link dell'anime.
- `link`: Link dell'anime.
"""
self.link = link
self.__fixCookie()
self.html = self.__getHTML().content
self.__check404()
# self.server = self.__getServer()
# self.nome = self.getName()
# self.trama = self.getTrama()
# self.info = self.getInfo()

# Private
def __fixCookie(self):
Expand All @@ -445,6 +478,10 @@ def __fixCookie(self):
def __getHTML(self) -> requests.Response:
"""
Ottiene la pagina web di Animeworld dell'anime e aggiorna i cookies.
```
return Response # Risposta GET
```
"""
r = None
while True:
Expand Down Expand Up @@ -477,10 +514,10 @@ def __getServer(self) -> Dict[int, Dict[str, str]]:
"""
Ottiene tutti i server in cui sono hostati gli episodi.
```python
```
return {
int: { # ID del server
name: str # nome del server
name: str # Nome del server
},
...
}
Expand All @@ -504,19 +541,19 @@ def getTrama(self) -> str:
"""
Ottiene la trama dell'anime.
```python
return str # trama dell'anime
```
return str # Trama dell'anime
```
"""
soupeddata = BeautifulSoup(self.html, "html.parser")
return soupeddata.find("div", { "class" : "desc" }).get_text()

@HealthCheck
def getInfo(self) -> Dict[str, str]: # Informazioni dell'anime
def getInfo(self) -> Dict[str, str]:
"""
Ottiene le informazioni dell'anime.
```python
```
return {
'Categoria': str,
'Audio': str,
Expand Down Expand Up @@ -551,8 +588,8 @@ def getName(self) -> str: # Nome dell'anime
"""
Ottiene il nome dell'anime.
```python
return str # nome dell'anime
```
return str # Nome dell'anime
```
"""
soupeddata = BeautifulSoup(self.html, "html.parser")
Expand All @@ -565,7 +602,7 @@ def getEpisodes(self) -> List[Episodio]: # Ritorna una lista di Episodi
"""
Ottiene tutti gli episodi dell'anime.
```python
```
return [
Episodio, # Classe Episodio
...
Expand Down
70 changes: 32 additions & 38 deletions documentation/example.py
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
import animeworld as aw

def main():


try:
anime = aw.Anime(link="https://www.animeworld.tv/play/jaku-chara-tomozaki-kun.RDPHq")

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

print("\n----------------------------------\n")

print("Trama:", anime.getTrama()) # Trama

print("\n----------------------------------\n")

print("Info:")
info = anime.getInfo()
for x in info: print(f"{x}: {info[x]}") # Informazioni presenti su Animeworld riguardanti l'anime

print("\n----------------------------------\n")

print("Episodi:")
try:
episodi = anime.getEpisodes()
except (aw.ServerNotSupported, aw.AnimeNotAvailable) as error:
print("Errore:", error)
else:
for x in episodi:
print(f"\n-> Ep. {x.number}")
for k in x.links:
print(f"\t{k.name} - {k.link}")

# if x.number == '4':
# x.download()
except aw.DeprecatedLibrary as error:
print(error)

if __name__ == '__main__':
main()
try:
anime = aw.Anime(link="https://www.animeworld.tv/play/jaku-chara-tomozaki-kun.RDPHq")

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

print("\n----------------------------------\n")

print("Trama:", anime.getTrama()) # Trama

print("\n----------------------------------\n")

print("Info:")
info = anime.getInfo()
for x in info: print(f"{x}: {info[x]}") # Informazioni presenti su Animeworld riguardanti l'anime

print("\n----------------------------------\n")

print("Episodi:")
try:
episodi = anime.getEpisodes()
except (aw.ServerNotSupported, aw.AnimeNotAvailable) as error:
print("Errore:", error)
else:
for x in episodi:
print(f"\n-> Ep. {x.number}")
for k in x.links:
print(f"\t{k.name} - {k.link}")

if x.number == '1':
x.download()
except (aw.DeprecatedLibrary, aw.Error404) as error:
print(error)
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name="animeworld", # Replace with your own username
version="1.4.7",
version="1.4.8",
author="MainKronos",
author_email="[email protected]",
description="AnimeWorld UNOFFICIAL API",
Expand Down

0 comments on commit 5286035

Please sign in to comment.