/sonarr-anime-dl

It is a Docker Container that uses Sonarr to automatically download anime from the AnimeWorld site.

Primary LanguagePythonMIT LicenseMIT

wallpaper

Sonarr-AnimeDownloader

Version Docker Issues License Stars

This documentation is in Italian because this program downloads anime with subtitles in Italian only.

Questo Docker Container funziona come un'estenzione di Sonarr; serve a scaricare in automatico tutti gli anime che non vengono condivisi tramite torrent. Il Container si interfaccia con Sonarr per avere informazini riguardante gli anime mancanti sull'hard-disk, viene poi fatta una ricerca se sono presenti sul sito AnimeWorld, e se ci sono li scarica e li posiziona nella cartella indicata da Sonarr.

L'utilizzo di Sonarr è necessario. Il Docker Container di Sonarr può essere trovato qui

Il progetto utilizza la libreria animeworld, l'ho dovuta rendere privata perchè gli sviluppatori di AnimeWorld non volevano che fosse pubblica. Se volete l'accesso scrivete qui

Presentazione

AGGIORNAMENTI IMPORTANTI

versione 1.0.0

  • Il table.json è completamente differente quindi và riscritto da zero.
  • Il table.json non usa più il nome degli anime di AnimeWorld ma il link della loro pagina web.
  • Il tableEditor.py non è più necessario (ma è sempre presente e non verrà più supportato).
  • È stata aggiunta una pagina web per un inserimento più 'user friendly' di anime al table.json, si trova alla porta 5000.
  • Aggiunto il supporto alla libreria animeworld per mantenere stabile l'intero progetto.
  • Aggiunta la gestione dell'eccezione DeprecatedLibrary(Exception), sorge quando il sito AnimeWorld varia e quindi è necessaria una manutenzione per rimappare il sito.
  • Modificato il log del container, sono state aggiunte più informazioni e abbellimenti con le Emoji.
  • È stata modificata la gestione dei Download degli episodi, adesso vengono scaricati in maniera sequenziale e non più tutti insieme come prima.

Utilizzo

docker run -d \
    --name=AnimeDownloader \
    -v /path/to/data:/script/json/ \
    -v /path/to/animeSeries:/tv \
    -p {port}:5000 \
    --env ANIME_PATH="/path/to/animeSeriesLocal" \
    --env SONARR_URL='http://{url}:{port}' \
    --env API_KEY='1234567890abcdefghijklmn' \
    --env CHAT_ID=123456789 \
    --env BOT_TOKEN='123456789:ABCDEFGHIJKLM-abc_AbCdEfGhI12345678' \
    --env TZ=Europe/Rome \
    mainkronos/anime_downloader

Parametri

Le immagini del Docker Container vengono configurate utilizzando i parametri passati in fase di esecuzione (come quelli sopra). Questi parametri sono separati da due punti e indicano rispettivamente <esterno>:<interno> al Container. Ad esempio, -v /path/to/data:/script/json/ indica che la cartella nella posizione /path/to/data si trova in /script/json/ all'interno del Container, quindi tutto il contento di /path/to/data è anche in /script/json/ all'interno del Container.

Parametro Necessario Funzione
--name ✖️ Indica il nome del Container, può essere qualsiasi cosa
-v /tv ✔️ Posizione della libreria Anime su disco
-v /script/json/ ✔️ Contiene file di configurazione
-p {port}:5000 ✔️ La porta per la pagina web
--env ANIME_PATH ✔️ Indica la posizione della cartella interna al Container di dove si trovano gli anime, vedi sotto per ulteriori informazioni
--env SONARR_URL ✔️ Url di Sonarr es. http://localhost:8989
--env API_KEY ✔️ Api key di sonarr, vedi sotto per ulteriori informazioni
--env CHAT_ID ✖️ Chat ID di telegram, vedi sotto per ulteriori informazioni
--env BOT_TOKEN ✖️ Token per il Bot di telegram, vedi sotto per ulteriori informazioni
--env TZ ✔️ Specifica un fuso orario, è necessario per il corretto funzionamento del Container

ANIME_PATH e /tv

La variabile ANIME_PATH serve per impostare la posizione della cartella degli anime anche quando la cartella ha un nome diverso per Sonarr. Per esempio abbiamo che nel nostro Container la cartella degli anime si trovi in /tv/Anime/ mentre nel container di sonarr la stessa cartella è stata definita nella posizione /tv/SerieTV/Anime/, è di vitale importanza per il corretto funzionamento del Container che la variabile d'ambiente ANIME_PATH venga impostata a /tv/Anime/. Nel caso in cui il parametro -v /tv sia diverso è necessario modificare anche la variabile ANIME_PATH, per esempio se il parametro è -v /Serie/tv2/ allora la variabile ANIME_PATH sarà /Serie/tv2/Anime/.

La vostra cartella Anime può avere un nome diverso, questa cartella sarebbe la directory principale che contiene tutte le cartelle degli anime. Per esempio l'episodio 1 di un anime che si chiama myAnime1 si troverà /tv/Anime/myAnime1/S01E01.mp4

tv
└── Anime
    ├── myAnime1
    │   ├── S01E01.mp4
    │   ├── S01E02.mp4
    │   ...
    ├── myAnime2
    │   ├── S01E01.mp4
    │   ├── S01E02.mp4
    │   ...
    ... 
            

Avvio

table.json

Il programma, per funzionare, necessita di un file che si chiama table.json, si trova nella cartella /script/json/ all'interno del Container. Questo file indica al programma a quale nome di AnimeWorld corrisponde il titolo della serie su Sonarr. Per esempio abbiamo che il titolo del nostro anime su AnimeWorld è Sword Art Online 3: Alicization, mentre su Sonarr è indicato come stagione 3 di Sword Art Online, tale informazione deve essere formattata (come mostrato qui sotto) e inserita nel file table.json in modo tale che il programma riesca a capire dove andare a cercare gli episodi su AnimeWorld.

È altamente consigliato usare la pagina web alla porta 5000 per l'inserimento di queste informazioni. Tabella Di Conversione

Nella stessa cartella /script/json/ c'è un programma scritto in python che si chiama tableEditor.py che facilita l'inserimento di tali informazioni, (in caso di eliminazioni accidentale il file può essere scaricato anche da qui). Questo script deve essere nella stessa cartella di table.json altimenti non funzionerà correttamente. Dalla prossima versione il file non sarà più supportato.

...
├── script
│   ├── app    ### Pagina Web
│   │   ├── ...
│   │  ...
│   ├── main.py    ### Programma principale
│   └── json
│       ├── table.json    ### Tabella di conversione
│       └── tableEditor.py
...        

In ogni caso la formattazione di come sono inserite le informazioni nel file table.json sono riportate quà sotto, sottoforma di esempio:

[
    ...
    {
        "title": "Sword Art Online",
        "seasons": {
            "1": [
                "https://www.animeworld.tv/play/sword-art-online.N0onT"
            ],
            "2": [
                "https://www.animeworld.tv/play/sword-art-online-2._NcG6"
            ]     
        }
    },
    ...
]

Ho caricato anche la mia configurazione che utilizzo, può essere trovata qui. Questa table.json può essere usata come esempio o come prorio database da aggiornare poi personalmente con i propri Anime. Ad ogni stagione ne caricherò una più aggiornata.

Problemi

In caso di problemi o errori controllare prima di tutto i log del Container, di solito lì è indicato il problema; altrimenti segnalarlo su GitHub in questo repository sotto la sezione Issues.

FAQ

Dove posso reperire la chiave api di sonarr?

Sonarr API KEY

Dove posso reperire la Chat ID di telegram?

TODO: da fare

Dove posso reperire il Token per il Bot di telegram?

TODO: da fare

Una stagione di Sonarr comprende due stagioni su AnimeWorld

Esempio

Per riuscire a dire al programma che una stagione di Sonarr sono due di AnimeWold basta aggiunge all'Array dei link di AnimeWold per quella stagione di Sonarr anche il link di AnimeWold della seconda stagione.

Per l'esempio mostrato nell'immagine la sua formattazione nel table.json sarebbe:

[    
    ...
    {
        "title": "Ascendance of a Bookworm",
        "seasons": {
            "1": [
                "https://www.animeworld.tv/play/ascendance-of-a-bookworm.paCPb",
                "https://www.animeworld.tv/play/ascendance-of-a-bookworm-2.Q0Rrm"
            ]
        }
    },
    ...
]

È altamente consigliato usare la pagina web alla porta 5000 per l'inserimento di queste informazioni. Per aggiungere un campo, in questo caso un nuovo link all'array, e sufficiente reinserire tutti i campi (come se si stesse riaggiungendo di nuovo lo stesso anime) e nel campo link inserire soltanto il secondo/terzo/ecc. link.

Roadmap

  • Creare una repository su GitHub
  • Creare un'immagine Docker su Docker Hub
  • Fare una documentazione dettaglita
    • Spiegare come reperire l'api key di sonarr
    • Spiegare l'utilità e il funzionamento di un bot di telegram
      • Spiegare come reperire la Chat Id di Telegram
      • Spiegare come reperire il Token del Bot Telegram
    • Spiegare come funziona il table.json
      • Informazioni generali e funzionamento
      • Funzionamento e utilizzo di tableEditor.py
      • Come collegare più stagioni di AnimeWorld riferite a una di Sonarr
      • Aggiungere un table.json di esempio
    • Spiegare l'utilizzo della variabile ambientale ANIME_PATH
    • Aggiungere i Providers supportati