diff --git a/.msmtprc b/.msmtprc new file mode 100644 index 0000000..d7dbbf4 --- /dev/null +++ b/.msmtprc @@ -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 diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..5f3804d --- /dev/null +++ b/README.txt @@ -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 \ No newline at end of file diff --git a/WebPageUpdateChecker.py b/WebPageUpdateChecker.py new file mode 100644 index 0000000..c513494 --- /dev/null +++ b/WebPageUpdateChecker.py @@ -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

that contains the date/time and

+    p_tag = soup.find("p")
+    if not p_tag:
+        print("Date/Time not found (no 

tag).") + return + + date_text_parts = [] + + for child in p_tag.children: + # Stop when

 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.")
diff --git a/sendEmailAlert.sh b/sendEmailAlert.sh
new file mode 100755
index 0000000..3bca07c
--- /dev/null
+++ b/sendEmailAlert.sh
@@ -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
diff --git a/sendEmailAlertPython.py b/sendEmailAlertPython.py
new file mode 100644
index 0000000..9c14d39
--- /dev/null
+++ b/sendEmailAlertPython.py
@@ -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.")