71 lines
1.6 KiB
Python
Executable file
71 lines
1.6 KiB
Python
Executable file
#!/usr/bin/python3
|
|
"""Update GWR advance ticket date cache."""
|
|
|
|
import configparser
|
|
import os.path
|
|
import smtplib
|
|
from email.message import EmailMessage
|
|
from email.utils import formatdate, make_msgid
|
|
|
|
import requests
|
|
|
|
from agenda import gwr
|
|
|
|
SMTP_HOST = "4angle.com"
|
|
EMAIL = "edward@4angle.com"
|
|
NAME = "Edward Betts"
|
|
|
|
|
|
def send_mail(subject: str, body: str) -> None:
|
|
"""Send an e-mail."""
|
|
msg = EmailMessage()
|
|
|
|
msg["Subject"] = subject
|
|
msg["To"] = f"{NAME} <{EMAIL}>"
|
|
msg["From"] = f"{NAME} <{EMAIL}>"
|
|
msg["Date"] = formatdate()
|
|
msg["Message-ID"] = make_msgid()
|
|
|
|
msg.set_content(body)
|
|
|
|
s = smtplib.SMTP(SMTP_HOST)
|
|
s.sendmail(EMAIL, [EMAIL], msg.as_string())
|
|
s.quit()
|
|
|
|
|
|
def get_data_dir() -> str:
|
|
"""Read data dir from config."""
|
|
config_filename = os.path.join(os.path.dirname(__file__), "..", "config")
|
|
|
|
assert os.path.exists(config_filename)
|
|
|
|
config = configparser.ConfigParser()
|
|
config.read(config_filename)
|
|
|
|
return config.get("data", "dir")
|
|
|
|
|
|
def main() -> None:
|
|
"""Get date from web page and compare with existing."""
|
|
filename = os.path.join(get_data_dir(), "advance-tickets.html")
|
|
existing_html = open(filename).read()
|
|
existing_date = gwr.extract_weekday_date(existing_html)
|
|
|
|
new_html = requests.get(gwr.url).text
|
|
open(filename, "w").write(new_html)
|
|
|
|
new_date = gwr.extract_weekday_date(new_html)
|
|
|
|
if existing_date == new_date:
|
|
return
|
|
|
|
subject = "New GWR advance ticket booking date: {new_date}"
|
|
body = """Old date: {old_date}
|
|
New date: {new_date}
|
|
|
|
{gwr.url}
|
|
|
|
Agenda: https://edwardbetts.com/agenda/
|
|
"""
|
|
send_mail(subject, body)
|