I fixed the email auto check and added the comments

This commit is contained in:
Stefano Assenzo 2023-01-06 18:29:07 +00:00
parent af806c4f16
commit 02afe8bace
3 changed files with 107 additions and 51 deletions

View File

@ -0,0 +1,38 @@
# Libraries for open and use Firefox
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
import pymongo
from pymongo import MongoClient
import urllib.parse
import os
USERNAME = ""
PASSWORD = ""
options = Options()
options.add_argument("--headless")
options.add_argument('--disable-gpu')
options.add_argument('--disable-software-rasterizer')
driver = webdriver.Firefox(options=options)
driver.get("https://nuvola.madisoft.it/login") # Open Nuvola website
# Click on the username field and insert the username, then click on the password field and insert the password.
username = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "username")))
password = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "password")))
# Insert username and password
username.click()
username.clear()
username.send_keys(USERNAME)
password.click()
password.clear()
password.send_keys(PASSWORD)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/div[2]/div/div[2]/form/button"))).click() # Click on login button
# Section Vote School
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(
(By.XPATH, "/html/body/div/div/div[1]/nav/div/div/a[6]"))).click() # Click on the Compiti button
print(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div/div/main/div/p"))).text)

View File

@ -1,31 +1,46 @@
import os
from imbox import Imbox
from dotenv import load_dotenv
import traceback
import time
# Load .env file
load_dotenv()
host = os.getenv('SMTP_SERVER')
username = os.getenv('EMAIL')
password = os.getenv('PWD_EMAIL')
download_folder = os.getenv('DOWNLOAD_FOLDER')
EMAIL_SCHOOL = os.getenv('EMAIL_SCHOOL')
HOST = os.getenv('IMAP_SERVER') #IMAP server
USERNAME = os.getenv('EMAIL') #Username (ex . test@example.com)
PASSWORD = os.getenv('PWD_EMAIL') #IMAP Password
DOWNLOAD_FOLDER = os.getenv('DOWNLOAD_FOLDER') #Download folder for xlsx file
EMAIL_SCHOOL = os.getenv('EMAIL_SCHOOL') #Email school
if not os.path.isdir(download_folder):
os.makedirs(download_folder, exist_ok=True)
mail = Imbox(host, username=username, password=password, ssl=True, ssl_context=None, starttls=False)
messages = mail.messages(sent_from=EMAIL_SCHOOL)
def recheck_email(): # Every 10 seconds check if there is a new email
time.sleep(10)
check_email()
for (uid, message) in messages:
mail.mark_seen(uid) # optional, mark message as read
def check_email():
try:
if not os.path.isdir(DOWNLOAD_FOLDER):
os.makedirs(DOWNLOAD_FOLDER, exist_ok=True)
for idx, attachment in enumerate(message.attachments):
try:
att_fn = attachment.get('filename')
download_path = f"{download_folder}/{att_fn}"
print(download_path)
with open(download_path, "wb") as fp:
fp.write(attachment.get('content').read())
except:
print(traceback.print_exc())
mail = Imbox(HOST, username=USERNAME, password=PASSWORD, ssl=True, ssl_context=None, starttls=False) # Connect to IMAP Server
messages = mail.messages(sent_from=EMAIL_SCHOOL, unread=True) # Get unread emails from school
mail.logout()
for (uid, message) in messages:
mail.mark_seen(uid)
# Download attachments
for idx, attachment in enumerate(message.attachments):
try:
att_fn = attachment.get('filename') # Get attachment filename
download_path = f"{DOWNLOAD_FOLDER}/{att_fn}"
with open(download_path, "wb") as fp:
fp.write(attachment.get('content').read())
os.rename(download_path, f"{DOWNLOAD_FOLDER}/school_time.xlsx") # Rename file
except:
print(traceback.print_exc())
mail.logout() # Logout from email
recheck_email()
except:
print(traceback.print_exc())
recheck_email()

View File

@ -1,10 +1,9 @@
from bson.objectid import ObjectId
from dotenv import load_dotenv
import openpyxl as xl
import urllib
import pymongo
import os
import datetime
from bson.objectid import ObjectId
import pymongo
import urllib
import os
load_dotenv() #Load .env file
@ -13,16 +12,17 @@ URL_MONGODB = os.getenv('URL_MONGODB') #URL for MongoDB
mongo_url = "mongodb+srv://elci:" + urllib.parse.quote_plus(PASSWORD_MONGODB) + URL_MONGODB #URL for MongoDB (with password)
client = pymongo.MongoClient(mongo_url) #Connect to MongoDB
database = client["website-class"] #Database name
collection = database["school-time-table"]
collection_archive = database["archive-school-time-table"]
collection = database["school-time-table"] #Collection school time table current
collection_archive = database["archive-school-time-table"] #Collection school time table archive
x = collection.delete_many({})
#using read_excel() method to read our excel file and storing the same in the variable named "df "
workbook = xl.load_workbook(filename="school_time.xlsx")
x = collection.delete_many({}) #Delete all documents in collection (school-time-table)
# Load excel file
namefile_xlsx = "attachments/school_time.xlsx"
workbook = xl.load_workbook(filename=namefile_xlsx)
ws = workbook.active
#Date
current_time = datetime.datetime.now()
day = str(current_time.day)
month = str(current_time.month)
@ -30,14 +30,17 @@ year = str(current_time.year)
hour = str(current_time.hour)
minute = str(current_time.minute)
long_date = day + "-" + month + "-" + year + " " + hour + ":" + minute
#Create collection
mydict = {
"Date": long_date,
"School Subject": [],
"Teacher": [],
}
x = collection.insert_one(mydict)
x = collection_archive.insert_one(mydict)
x = collection.insert_one(mydict) # Add collection on collection (school-time-table)
x = collection_archive.insert_one(mydict) # Add collection on collection (archive-school-time-table)
#Search my class in excel file and add in MongoDB
for row in range (1, 100):
# column B ~ column F
for column in range (1, 100):
@ -46,33 +49,33 @@ for row in range (1, 100):
ws.cell(row=cell.row, column=column).value
#Search school time table
for i in range(4,80):
school_subject = ws.cell(row=i, column=column).value
if school_subject == 0:
find_document_username = list(collection.find({}, {"Date": long_date}))
school_subject = ws.cell(row=i, column=column).value # Get school subject from excel file
if school_subject == 0: #If school subject is 0, add "null" in MongoDB
find_document_username = list(collection.find({}, {"Date": long_date})) #Find document in MongoDB
array_username = find_document_username[0]["_id"]
collection.update_one(
collection.update_one( # Add "null" in MongoDB beacause school subject is 0
{ "_id": ObjectId(array_username)},
{
"$push": { "School Subject": "null" }
}
)
collection_archive.update_one(
collection_archive.update_one( # Add "null" in MongoDB beacause school subject is 0
{ "_id": ObjectId(array_username)},
{
"$push": { "School Subject": "null" }
}
)
else:
else: #If school subject is not 0, add school subject in MongoDB
#remove_things_in_front = school_subject.split(' ', 1)[1]
find_document_username = list(collection.find({}, {"Date": long_date}))
find_document_username = list(collection.find({}, {"Date": long_date})) #Find document in MongoDB
array_username = find_document_username[0]["_id"]
collection.update_one(
collection.update_one( # Add school subject in MongoDB beacause school subject is not 0
{ "_id": ObjectId(array_username)},
{
"$push": { "School Subject": school_subject }
}
)
collection_archive.update_one(
collection_archive.update_one( # Add school subject in MongoDB beacause school subject is not 0
{ "_id": ObjectId(array_username)},
{
"$push": { "School Subject": school_subject }
@ -83,35 +86,35 @@ for row in range (1, 100):
for i in range(4, 80):
teacher = ws.cell(row=i, column=column+1).value
column = column
if teacher == 0:
find_document_username = list(collection.find({}, {"Date": long_date}))
if teacher == 0: #If teacher is 0, add "null" in MongoDB
find_document_username = list(collection.find({}, {"Date": long_date})) #Find document in MongoDB
array_username = find_document_username[0]["_id"]
collection.update_one(
collection.update_one( # Add "null" in MongoDB beacause teacher is 0
{ "_id": ObjectId(array_username)},
{
"$push": { "Teacher": "null" }
}
)
collection_archive.update_one(
collection_archive.update_one( # Add "null" in MongoDB beacause teacher is 0
{ "_id": ObjectId(array_username)},
{
"$push": { "Teacher": teacher }
}
)
else:
else: #If teacher is not 0, add teacher in MongoDB
find_document_username = list(collection.find({}, {"Date": long_date}))
array_username = find_document_username[0]["_id"]
collection.update_one(
collection.update_one( # Add teacher in MongoDB beacause teacher is not 0
{ "_id": ObjectId(array_username)},
{
"$push": { "Teacher": teacher }
}
)
collection_archive.update_one(
collection_archive.update_one( # Add teacher in MongoDB beacause teacher is not 0
{ "_id": ObjectId(array_username)},
{
"$push": { "Teacher": teacher }
}
)
os.remove("school_time.xlsx")
os.remove(namefile_xlsx) #Delete excel file