Compare commits

..

No commits in common. "e24f4911db5ce83a815d9f2aa27d202ffc780a79" and "4a58c6f249025f0e8727725c03d155c1e25a727d" have entirely different histories.

3 changed files with 177 additions and 288 deletions

View File

@ -1,29 +1,26 @@
from bs4 import BeautifulSoup as bs def modulo_scarica():
import csv, jsbeautifier, cloudscraper, os, re, smtplib from bs4 import BeautifulSoup as bs
from email.mime.text import MIMEText import csv, jsbeautifier, cloudscraper, os, re, smtplib
from json import loads from email.mime.text import MIMEText
from datetime import datetime from json import loads
from yt_dlp import YoutubeDL from datetime import datetime
#from multiprocessing.dummy import Pool as ThreadPool
from yt_dlp import YoutubeDL
def get_animu(): r = cloudscraper.create_scraper()
with open("animelist.csv",mode='r') as animecsv: with open("animelist.csv",mode='r') as animecsv:
csvfile=csv.reader(animecsv) csvfile=csv.reader(animecsv)
file=list(csvfile) file=list(csvfile)
return file animecsv.close()
def get_config():
with open("cfg.json",mode='r') as config: with open("cfg.json",mode='r') as config:
configs=config.read() configs=config.read()
configs=loads(configs) configs=loads(configs)
return configs config.close()
def get_soup(url): #dall'url outputta la soup della pagina
def get_soup(url): #dall'url outputta la soup della pagina
r = cloudscraper.create_scraper()
page=r.get(url) page=r.get(url)
data=page.text data=page.text
return bs(data, features="html.parser") return bs(data, features="html.parser")
def new_email(subject,body):
def new_email(subject,body,configs):
msg = MIMEText(body) msg = MIMEText(body)
msg['Subject'] = subject msg['Subject'] = subject
msg['From'] = configs['email'] msg['From'] = configs['email']
@ -32,18 +29,15 @@ def new_email(subject,body,configs):
smtp_server.login(configs['email'], configs['email_password']) smtp_server.login(configs['email'], configs['email_password'])
smtp_server.sendmail(configs['email'], configs['email'], msg.as_string()) smtp_server.sendmail(configs['email'], configs['email'], msg.as_string())
print('Email successfully sent!') print('Email successfully sent!')
def tutti_gli_episodi(url): #trova tutti gli episodi dalla pagina descrittiva dell'anime
def tutti_gli_episodi(url): #trova tutti gli episodi dalla pagina descrittiva dell'anime
cosette=get_soup(url).find('div', {'class':'tab-content'}).find_all('a') cosette=get_soup(url).find('div', {'class':'tab-content'}).find_all('a')
return [episodi['href'] for episodi in cosette] return [episodi['href'] for episodi in cosette]
def link_ep_da_url(url): #prende la pagina del "Guarda lo Streaming" e trova il link per guardarlo
def link_ep_da_url(url): #prende la pagina del "Guarda lo Streaming" e trova il link per guardarlo #print('ledu')
#print('link_ep_da_url')
cosetta=get_soup(url).find('div', {'class':"btn btn-light w-100 mt-3 mb-3"}).parent cosetta=get_soup(url).find('div', {'class':"btn btn-light w-100 mt-3 mb-3"}).parent
return cosetta['href'] return cosetta['href']
def links_ep_da_scaricare(url): #prende il link output di link_ep_da_url e cerca al suo interno tutti i link di file di tutti i provider possibili ritornando un dict
def links_ep_da_scaricare(url): #prende il link output di link_ep_da_url e cerca al suo interno tutti i link di file di tutti i provider possibili ritornando un dict #print('leds')
#print('links_ep_da_scaricare')
soup=get_soup(url) soup=get_soup(url)
cosetta=soup.find('div', {'class':'main-container'}).find('source') cosetta=soup.find('div', {'class':'main-container'}).find('source')
links={} links={}
@ -65,8 +59,7 @@ def links_ep_da_scaricare(url): #prende il link output di link_ep_da_url e cerca
except Exception as e: except Exception as e:
pass pass
return links return links
def link_down(named_urls): #prende il dict di links_ep_da_scaricare e per quanto può converte i siti in link scaricabili tramite yt-dlp
def link_down(named_urls): #prende il dict di links_ep_da_scaricare e per quanto può converte i siti in link scaricabili tramite yt-dlp
#print('link-down') #print('link-down')
#print(named_urls) #print(named_urls)
links={} links={}
@ -90,8 +83,7 @@ def link_down(named_urls): #prende il dict di links_ep_da_scaricare e per quanto
pass pass
#print(links) #print(links)
return links return links
def scarica(lista): #la lista sarà nella forma filepath,url e prova in ordine di priorità da conf
def scarica(lista,configs): #la lista sarà nella forma filepath,url e prova in ordine di priorità da conf
orario=datetime.now().strftime("%d/%m/%Y %H:%M:%S") orario=datetime.now().strftime("%d/%m/%Y %H:%M:%S")
priority=configs['DownPriority'] priority=configs['DownPriority']
urls_file=link_down(links_ep_da_scaricare(link_ep_da_url(lista[1]))) urls_file=link_down(links_ep_da_scaricare(link_ep_da_url(lista[1])))
@ -106,10 +98,6 @@ def scarica(lista,configs): #la lista sarà nella forma filepath,url e prova in
except Exception as e: except Exception as e:
print(e) print(e)
print('['+orario+']'+'Errore '+provider+' per '+lista[0].split('/')[-1]) print('['+orario+']'+'Errore '+provider+' per '+lista[0].split('/')[-1])
def modulo_scarica():
file = get_animu()
configs = get_config()
#lines 0 è url ep, lines 1 è cartella download, lines 2 è nome anime #lines 0 è url ep, lines 1 è cartella download, lines 2 è nome anime
lista_email=[] lista_email=[]
for lines in file[1:]: for lines in file[1:]:
@ -145,8 +133,15 @@ def modulo_scarica():
filepath=os.path.join(configs['DownDir'],lines[1], nome_ep) filepath=os.path.join(configs['DownDir'],lines[1], nome_ep)
results.append((filepath,episodi)) results.append((filepath,episodi))
for ep in results: for ep in results:
scarica(ep,configs) scarica(ep)
lista_email.append((os.path.basename(ep[0]),0)) lista_email.append((os.path.basename(ep[0]),0))
'''
print(results)
pool=ThreadPool(1)
pool.map(scarica,results)
pool.close()
pool.join()
'''
except Exception as e: except Exception as e:
print(e) print(e)
lista_email.append((lines[1],1)) lista_email.append((lines[1],1))
@ -166,21 +161,21 @@ def modulo_scarica():
for el in errori: for el in errori:
body+=f"{ el[0] }, oof ci sono stati errori con questo anime\n" body+=f"{ el[0] }, oof ci sono stati errori con questo anime\n"
body+="\nFine resoconto, sono sbalordito delle mie capacità o_o" body+="\nFine resoconto, sono sbalordito delle mie capacità o_o"
new_email(subject,body,configs) new_email(subject,body)
elif novità: elif novità:
subject='Saturn_cli: Novità' subject='Saturn_cli: Novità'
body="Yo sono usciti nuovi episodi, valli a vedere soldato ;)\n" body="Yo sono usciti nuovi episodi, valli a vedere soldato ;)\n"
for el in novità: for el in novità:
body+=f"{ el[0] } è stato aggiunto con successo!\n" body+=f"{ el[0] } è stato aggiunto con successo!\n"
body+="\nFine resoconto, sono sbalordito delle mie capacità o_o" body+="\nFine resoconto, sono sbalordito delle mie capacità o_o"
new_email(subject,body,configs) new_email(subject,body)
elif errori: elif errori:
subject='Saturn_cli: Errori' subject='Saturn_cli: Errori'
body="Ohibò ci sono stati degli errori :(\n" body="Ohibò ci sono stati degli errori :(\n"
for el in errori: for el in errori:
body+=f"{ el[0] }, oof ci sono stati errori con questo anime\n" body+=f"{ el[0] }, oof ci sono stati errori con questo anime\n"
body+="\nFine resoconto, sono sbalordito delle mie capacità o_o" body+="\nFine resoconto, sono sbalordito delle mie capacità o_o"
new_email(subject,body,configs) new_email(subject,body)
if __name__ == "__main__": if __name__ == "__main__":
modulo_scarica() modulo_scarica()

View File

@ -1,28 +0,0 @@
<table id="csv_table">
{% for row in csv %}
<tr>
{% for col in row %}
<td>{{ col }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<p></p>
<p></p>
<p></p>
<form action="new_animu" method = "POST">
<p>Vuoi aggiungerne uno nuovo?</p>
<table id="new_animu_table">
<tr>
<td>Url:</td><td><input type = "text" name = "field_url" /></td>
<td>Nome serie:</td><td><input type = "text" name = "field_folder" /></td>
<td>Stagione:</td><td><input type = "text" name = "field_season" /></td>
<td><input type = "submit" value = "submit" /></td>
</tr>
</table>
</form>
<form action="del_animu" method= "POST">
<p>Vuoi eliminare un anime?</p>
<input type = "text" name = "del_field" />
<input type = "submit" value = "submit" />
</form>

View File

@ -1,78 +0,0 @@
from flask import Flask, render_template, request, redirect
import csv
HOST_NAME = "localhost"
HOST_PORT = 5000
app = Flask(__name__)
@app.route("/")
def mainpage():
with open("animelist.csv") as file:
reader = csv.reader(file)
enum = list(enumerate(list(reader)))
lista = []
for el in enum:
lista.append([el[0]]+el[1])
return render_template('index.html',csv=lista)
@app.route("/new_animu", methods = ['POST', 'GET'])
def new_animu():
if request.method == 'GET':
return redirect('/')
if request.method == 'POST':
form_data = request.form
#print(form_data)
if add_animu(form_data):
return f'Anime aggiunto con successo'
return f'Errore aggiungendo anime, hai inserito correttamente i valori?'
@app.route("/del_animu", methods = ['POST', 'GET'])
def del_animu():
if request.method == 'GET':
return redirect('/')
if request.method == 'POST':
form_data = request.form
print(form_data)
if del_animu(form_data):
return f'Anime rimosso con successo'
return f'Errore rimuovendo anime, hai inserito correttamente i valori?'
def add_animu(form_data):
try:
if not (form_data['field_season'] and form_data['field_url'] and form_data['field_folder']):
return False
stagione = int(form_data['field_season'])
new_entry = [form_data['field_url'],
form_data['field_folder'] + '/Season ' + str(stagione),
'Episode S' + format(stagione,'02d'),
1,
1]
with open("animelist.csv",mode='a') as animecsv: #link,cartella>
csvfile=csv.writer(animecsv)
csvfile.writerow(new_entry)
return True
except Exception as e:
print(e)
return False
def del_animu(form_data):
try:
if not form_data['del_field']:
return False
data = []
with open("animelist.csv", 'r', newline='') as file:
csv_reader = csv.reader(file)
for index, row in enumerate(csv_reader):
if index != int(form_data['del_field']):
data.append(row)
# Write the remaining data back to the CSV file
with open("animelist.csv", 'w', newline='') as file:
csv_writer = csv.writer(file)
csv_writer.writerows(data)
return True
except Exception as e:
print(e)
return False
if __name__ == "__main__":
app.run(HOST_NAME, HOST_PORT)