Skip to content

Commit

Permalink
Merge pull request #4 from MainKronos/development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
MainKronos authored Jan 19, 2021
2 parents 7be522a + 3608231 commit c9d3e7b
Show file tree
Hide file tree
Showing 16 changed files with 22,011 additions and 1,124 deletions.
8 changes: 2 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,9 @@ COPY requirements.txt /tmp/

RUN pip3 install -r /tmp/requirements.txt

COPY config/json/tableEditor.py /script/json/
COPY config/json/* /script/json/
COPY config/main.py /script/

# COPY cron_anime_downloader /etc/cron.d/cron_anime_downloader
# RUN chmod 0644 /etc/cron.d/cron_anime_downloader
# RUN crontab /etc/cron.d/cron_anime_downloader
# RUN touch /var/log/cron.log
COPY config/app/. /script/app/

RUN locale-gen it_IT.UTF-8
ENV LANG it_IT.UTF-8
Expand Down
81 changes: 36 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

![wallpaper](/documentation/images/wallpaper.jpg)
# Sonarr-AnimeDownloader

Expand All @@ -9,7 +10,6 @@ Questo Docker Container funziona come un'estenzione di [Sonarr](https://sonarr.t
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](https://www.animeworld.tv/), 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](https://github.com/linuxserver/docker-sonarr)

### Supported Providers
Expand All @@ -22,9 +22,16 @@ Gli episodi di AnimeWorld vengono caricati in altri siti, alcuni di loro (I più
4. [AnimeWorld_Server](https://www.animeworld.tv/)

## AGGIORNAMENTI IMPORTANTI
```diff
- WARNING - WARNING - WARNING -
```
## 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).
* È 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.
## versione `0.3.0`
**La nuova versione `0.3.0` ha una diversa formattazione del file `table.json`, per convertire la vecchia versione in quella nuova basta solo avviare il nuovo file `tableEditor.py`.**

Adesso è possibile aggiungere più stagioni di Sonarr riferite ad una di AnimeWorld (Funziona solo se la numerazione assoluta degli episodi di Sonarr combacia con quella di AnimeWorld).
Expand All @@ -36,6 +43,7 @@ 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' \
Expand All @@ -55,6 +63,7 @@ Parametro | Necessario | Funzione
`--name` | :heavy_multiplication_x: | Indica il nome del Container, può essere qualsiasi cosa
`-v /tv` | :heavy_check_mark: | Posizione della libreria Anime su disco
`-v /script/json/` | :heavy_check_mark: | Contiene file di configurazione
`-p {port}:5000` | :heavy_check_mark: | La porta per la pagina web
`--env ANIME_PATH` | :heavy_check_mark: | Indica la posizione della cartella interna al Container di dove si trovano gli anime, vedi sotto per ulteriori informazioni
`--env SONARR_URL` | :heavy_check_mark: | Url di Sonarr es. http://localhost:8989
`--env API_KEY` | :heavy_check_mark: | Api key di sonarr, vedi sotto per ulteriori informazioni
Expand Down Expand Up @@ -90,12 +99,17 @@ tv
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.

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](/config/json/tableEditor.py)). Questo script deve essere nella **stessa** cartella di `table.json` altimenti non funzionerà correttamente.

**È altamente consigliato usare la _pagina web_ alla porta `5000` per l'inserimento di queste informazioni.**
```
...
├── script
│ ├── main.py
│ ├── app ### Pagina Web
│ │ ├── ...
│ │ ...
│ ├── main.py ### Programma principale
│ └── json
│ ├── table.json
│ ├── table.json ### Tabella di conversione
│ └── tableEditor.py
...
```
Expand All @@ -105,16 +119,14 @@ In ogni caso la formattazione di come sono inserite le informazioni nel file `ta
[
...
{
"Sonarr": {
"title": "Sword Art Online",
"season": [
3
]
},
"AnimeWorld": {
"title": [
"Sword Art Online 3: Alicization"
]
"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"
]
}
},
...
Expand All @@ -139,48 +151,27 @@ TODO: da fare
### Una stagione di Sonarr comprende due stagioni su AnimeWorld
![Esempio](/documentation/images/AnimeWold_2serie.png)

Per riuscire a dire al programma che una stagione di Sonarr sono due di AnimeWold basta aggiunge all'Array del titolo di AnimeWold per quella stagione di Sonarr anche il titolo di AnimeWold della seconda stagione.
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:
```
[
...
{
"Sonarr": {
"title": "Ascendance of a Bookworm",
"season": [
1
]
},
"AnimeWorld": {
"title": [
"Ascendance of a Bookworm",
"Ascendance of a Bookworm 2"
"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"
]
}
},
...
]
```

Si può fare più comodamente anche con il `tableEditor.py` basta inserire:

```
Inserire titolo anime di Sonarr: Ascendance of a Bookworm
Inserire la stagione dell'anime Ascendance of a Bookworm: 1
Inserire titolo anime di AnimeWorld: Ascendance of a Bookworm
L'anime Ascendance of a Bookworm (stagione 1) è stato aggiunto correttamente.
---------------------------------------------
Inserire titolo anime di Sonarr: Ascendance of a Bookworm
Inserire la stagione dell'anime Ascendance of a Bookworm: 1
Inserire titolo anime di AnimeWorld: Ascendance of a Bookworm 2
L'anime Ascendance of a Bookworm (stagione 1) è gia presente, e corrisponde a ['Ascendance of a Bookworm']
Aggiungere il titolo Ascendance of a Bookworm 2 alla lista? (y/n): y
---------------------------------------------
```
**È 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
Expand Down
79 changes: 79 additions & 0 deletions config/app/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import re
import json
from flask import *
app = Flask(__name__)

import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)

@app.template_filter()
def msgSafe(msg):
msg = re.sub(r"[^a-zA-Z]", "", msg)
return msg

@app.route('/favicon.ico')
def favicon():
return redirect(url_for('static', filename='favicon.ico'), code=302)

@app.route('/index', methods=['GET', 'POST'])
@app.route('/', methods=['POST', 'GET'])
def index():

if request.method == 'POST':
res = request.form
data = {
"title": request.form['title'],
"season": request.form['season'],
"link": request.form['link']
}
writeData(data)
return redirect(url_for('index'))
else:
anime = readData()
return render_template('index.html', infos=anime)



#######

def readData():
with open('json/table.json' , 'r') as f:
return json.loads(f.read())

def writeData(data):
def myOrder(serieInfo):
return serieInfo["title"]

# data = {
# "title":"",
# "season": "",
# "link": ""
# }

table = readData()

for anime in table:
if data["title"] == anime["title"]: # Se esiste già l'anime nella tabella

if data["season"] in anime["seasons"]: # Se esiste già la stagione
anime["seasons"][data["season"]].append(data["link"]) # aggiunge un'altro link
# print(f"\n-> È stata aggiunto un altro link per la stagione {season} della serie {SonarrTitle}.")
else:
anime["seasons"][data["season"]] = [data["link"]] # inizializza una nuova stagione
# print(f"\n-> È stata aggiunta la stagione {season} per la serie {SonarrTitle}.")

break
else: # se non è stato trovato nessun anime
table.append({
"title": data["title"],
"seasons": {data["season"]: [data["link"]]}
})
# print(f"\n-> È stata aggiunta la serie {SonarrTitle}.")

table.sort(key=myOrder) # Riordina la tabella in ordine alfabetico

f = open("json/table.json", 'w')
f.write(json.dumps(table, indent=4))
f.close()
return table
Binary file added config/app/__pycache__/__init__.cpython-38.pyc
Binary file not shown.
Loading

0 comments on commit c9d3e7b

Please sign in to comment.