Compare commits
No commits in common. "e24f4911db5ce83a815d9f2aa27d202ffc780a79" and "4a58c6f249025f0e8727725c03d155c1e25a727d" have entirely different histories.
e24f4911db
...
4a58c6f249
@ -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()
|
||||||
|
@ -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>
|
|
78
webserver.py
78
webserver.py
@ -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)
|
|
Loading…
Reference in New Issue
Block a user