Advanced Usage
Eccezioni
La libreria solleva diverse eccezioni, le principali sono: AnimeNotAvailable
, Error404
e DeprecatedLibrary
.
Per maggiori informazioni consultare la documentazione.
DeprecatedLibrary
L'eccezione DeprecatedLibrary
viene sollevata quando viene rivelato un mutamento del sito di AnimeWorld non piú supportato dalla libreria.
Questa eccezione può essere sollevata praticamente da qualsiasi metodo della libreria, quindi è consigliato gestirla in modo globale.
Error404
L'eccezione Error404
viene sollevata quando l'URL passato alla creazione dell'oggetto Anime punta ad una pagina 404.
Visto che questa eccezione viene sollevata solo dalla classe Anime
, è consigliato gestirla solo se effettivamente si sta istanziando un oggetto di quella classe.
AnimeNotAvailable
L'eccezione AnimeNotAvailable
viene sollevata quando la pagina dell'anime esiste ma gli episodi non sono ancora disponibili. Questo accade ad esempio quando inizia una nuova stagione.
L'eccezione si verifica soltanto alla chiamata del metodo getEpisodes
.
Server
Per scarica un episodio è possibile selezione manualmente il server da cui scaricare il video. Per farlo è ottenere prima la lista dei server utilizzando l'attributo Episodio.links
e poi sceglierne uno tra quelli supportati.
Warning
Non consiglio di utilizzare questo metodo per scaricare un episodio, è molto piú semplice e sicuro utilizzare il metodo Episodio.download
, perchè:
- Viene scelto sempre il server più veloce al momento del download.
- Se si sceglie un server non supportato, verrà sollevata l'eccezione ServerNotSupported.
Server supportati
I server supportati sono indicati di seguito, se vuoi contribuire per aggiungerne altri puoi dare un occhiata alla sezione Contributing.
Server | ||
---|---|---|
✔️ AnimeWorld_Server | ❌ StreamHide | ❌ Doodstream |
✔️ Streamtape | ❌ FileMoon | ❌ StreamSB |
✔️ YouTube | ❌ Streamtape | ❌ Streamlare |
Download
Warning
Se ci sono dei caratteri non ammessi nel nome del file (#%&{}<>*?/$!'":@+\``|=
), questi verranno rimossi automaticamente. Per ottenere il nome del file effettivamente scritto su disco è possibile ottenerlo dal ritorno del metodo Episodio.download
.
Per ottenere un episodio, consiglio di utilizzare il metodo Episodio.download
, il quale recupera il video utilizzando il server più veloce disponibile al momento del download.
È possibile impostare il nome del file utilizzando il parametro title
e la cartella di destinazione utilizzando il parametro folder
.
hook
Il parametro hook
è più interessante, questo è un riferimento ad una funzione che poi verrà chiamata ogni volta che viene scaricato un chunk del video (~524 Kb). Questo è utile per mostrare a schermo il progresso del download. La funzione deve avere un singolo parametro di tipo Dict[str, Any]
.
def my_hook(data):
print(data)
episodi = anime.getEpisodes()
for x in episodi:
x.download(hook=my_hook)
Un esempio di un possibile dizionario passato alla funzione hook è il seguente:
{
"total_bytes": 234127340, # Dimensione totale del video in byte
"downloaded_bytes": 524288, # Dimensione scaricata in byte
"percentage": 0.0022393283928310126, # Percentuale scaricata [0, 1]
"speed": 3048288.673006227, # Velocità di download in byte/s
"elapsed": 0.17199420928955078, # Tempo trascorso in secondi
"filename": "1 - AnimeWorld Server.mp4", # Nome del file
"eta": 76.63416331551707, # Tempo rimanente stimato in secondi
"status": "downloading", # Stato del download ('downloading' | 'finished' | 'aborted')
}
opt
È anche possibile fermare forzatamente il download utilizzando il parametro opt
. Questo parametro è una lista di stringhe, ogni stringa rappresenta un'opzione. Attualmente l'unica opzione possibile è abort
, che ferma il download.
Se in opt compare, durante il download, la stringa abort
allora il download viene fermato e il file parzialmente scaricato viene eliminato.
Un esempio di utilizzo del parametro opt
è il seguente:
In questo esempio il download viene fermato dopo 5 secondi.
I/O Buffer
È possibile scaricare un episodio usando direttamente un descrittore di file invece che una stringa per la directory. Basta passare al parametro folder
un tipo IOBase.
In questo esempio l'episodio scaricato viene scritto in memoria senza essere salvato come file.