Initial Upload
This commit is contained in:
parent
e816005a99
commit
b2fce3c122
14
.msmtprc
Normal file
14
.msmtprc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
defaults
|
||||
auth on
|
||||
tls on
|
||||
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
||||
logfile ~/.msmtp.log
|
||||
|
||||
account gmail
|
||||
host smtp.gmail.com
|
||||
port 587
|
||||
from jakesclarion02alerts@gmail.com
|
||||
user jakesclarion02alerts@gmail.com
|
||||
password xwhqmgkcjhbyiuck
|
||||
|
||||
account default : gmail
|
||||
29
README.txt
Normal file
29
README.txt
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
READ ME FOR WEBPAGE UPDATING CHECKER CREATED BY JACOB DAVIS 1/7/2026
|
||||
|
||||
This is a set of scripts that will check the the date and time published on the Clarion02 webpage.
|
||||
If the time has not updated in 15 minutes, it will send an email to the sender list held in the sendEmailAlert.sh file.
|
||||
|
||||
Before running, make sure the appropriate mail utilities are installed.
|
||||
>>sudo apt install mailutils
|
||||
|
||||
You will also need the msmtp packages
|
||||
>>sudo apt install msmtp msmtp-mta
|
||||
|
||||
Next, copy the .msmtprc file to your home directory. It is a hidden file, so if you don't see it in the folder, check that you can see hidden files.
|
||||
|
||||
AFTER .msmtprc file is in your home directory, give it appropriate security permissions with:
|
||||
>>chmod 600 ~/.msmtprc
|
||||
|
||||
Next, make sendEmailAlert.sh an executable with (instide the WebPageChecker folder)
|
||||
>>chmod +x sendEmailAlert.sh
|
||||
|
||||
Finally, run the script with
|
||||
>>python3 WebPageUpdateChecker.py
|
||||
|
||||
Other files: There is an email sending script using python that is a bit more complicated but will work as well if you'd rather use that. Just change the subprocess.run() line in the main script.
|
||||
|
||||
Other info: This is all being handled through the gmail account I set up specifically to recieve Clarion Alerts. It may be worth changing that to some other address. If that is done, we will need to edit the .msmtprc file.
|
||||
|
||||
|
||||
|
||||
hgfgdsdsfgh
|
||||
64
WebPageUpdateChecker.py
Normal file
64
WebPageUpdateChecker.py
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from bs4.element import NavigableString
|
||||
import time
|
||||
import subprocess
|
||||
|
||||
URL = "http://clarion02.physics.fsu.edu/~clarion02/index.html"
|
||||
|
||||
HEADERS = {
|
||||
"User-Agent": "Mozilla/5.0 (date-monitor)"
|
||||
}
|
||||
|
||||
previousTime = "time"
|
||||
|
||||
def scrape_date_time():
|
||||
global previousTime
|
||||
try:
|
||||
response = requests.get(URL, headers=HEADERS, timeout=10)
|
||||
response.raise_for_status()
|
||||
except requests.RequestException as e:
|
||||
print(f"[ERROR] Request failed: {e}")
|
||||
return
|
||||
|
||||
soup = BeautifulSoup(response.text, "html.parser")
|
||||
|
||||
# Find the <p> that contains the date/time and <pre>
|
||||
p_tag = soup.find("p")
|
||||
if not p_tag:
|
||||
print("Date/Time not found (no <p> tag).")
|
||||
return
|
||||
|
||||
date_text_parts = []
|
||||
|
||||
for child in p_tag.children:
|
||||
# Stop when <pre> is encountered
|
||||
if getattr(child, "name", None) == "pre":
|
||||
break
|
||||
|
||||
if isinstance(child, NavigableString):
|
||||
text = child.strip()
|
||||
if text:
|
||||
date_text_parts.append(text)
|
||||
|
||||
if date_text_parts:
|
||||
date_time = " ".join(date_text_parts)
|
||||
#print(date_time)
|
||||
else:
|
||||
print("Date/Time not found.")
|
||||
|
||||
if date_time == previousTime:
|
||||
#print("ALERT!!!!!!!!!!!!!!!!!!!")
|
||||
subprocess.run(["./sendEmailAlert.sh"])
|
||||
#print("Ran the script*******************")
|
||||
else:
|
||||
previousTime = date_time
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
while True:
|
||||
scrape_date_time()
|
||||
time.sleep(900)
|
||||
except KeyboardInterrupt:
|
||||
print("\nStopped.")
|
||||
7
sendEmailAlert.sh
Executable file
7
sendEmailAlert.sh
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
TO="jakesclarion02alerts@gmail.com,m24b@fsu.edu, mwheeler4@fsu.edu, vtripath@fsu.edu"
|
||||
SUBJECT="Clarion in alert WEBPAGE NOT UPDATED!!"
|
||||
BODY="The webpage time has not updated in 15 minutes!"
|
||||
|
||||
echo "$BODY" | mail -s "$SUBJECT" $TO
|
||||
33
sendEmailAlertPython.py
Normal file
33
sendEmailAlertPython.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import smtplib
|
||||
from email.message import EmailMessage
|
||||
|
||||
def send_email_alert():
|
||||
TO = "jakesclarion02alerts@gmail.com, m24b@fsu.edu, mwheeler4@fsu.edu, vtripath@fsu.edu" # recipient
|
||||
FROM = "jakesclarion02alerts@gmail.com" # must match Gmail account
|
||||
PASSWORD = "xwhqmgkcjhbyiuck" # 16-char App Password
|
||||
|
||||
msg = EmailMessage()
|
||||
msg.set_content("The webpage did not update!")
|
||||
msg['Subject'] = "WEBPAGE NOT UPDATED!!"
|
||||
msg['From'] = FROM
|
||||
msg['To'] = TO
|
||||
|
||||
try:
|
||||
print("Connecting to Gmail SMTP...")
|
||||
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
|
||||
#print("Logging in...")
|
||||
smtp.login(FROM, PASSWORD)
|
||||
#print("Sending email...")
|
||||
smtp.send_message(msg)
|
||||
#print("Email sent successfully!")
|
||||
except smtplib.SMTPAuthenticationError:
|
||||
#print("[ERROR] Authentication failed. Check your App Password and FROM address.")
|
||||
except smtplib.SMTPConnectError:
|
||||
#print("[ERROR] Could not connect to the SMTP server.")
|
||||
except Exception as e:
|
||||
#print(f"[ERROR] Other error: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
send_email_alert()
|
||||
|
||||
#print("Email sent successfully.")
|
||||
Loading…
Reference in New Issue
Block a user