12 Tage von DigitalOcean (Tag 3) – Überprüfen von Geburtstagen und Versenden von SMS-Benachrichtigungen

🎄 12 Tage von DigitalOcean: Geburtstage überprüfen und SMS-Benachrichtigungen senden 🎁

Willkommen zu Tag 3 von 12 Tagen von DigitalOcean! In den letzten zwei Tagen haben wir eine PostgreSQL-Datenbank eingerichtet und uns mit ihr über Python verbunden. Jetzt ist es an der Zeit, unseren Geburtstags-Erinnerungsdienst tatsächlich nützlich zu machen—dir eine Nachricht zu senden, wenn heute ein Geburtstag ist. 🎂

Wir werden Twilio verwenden, einen Dienst, der es einfach macht, SMS-Nachrichten mit nur wenigen Zeilen Code zu senden. Am Ende des heutigen Tages wird deine App die Datenbank nach Geburtstagen durchsuchen und dir eine Erinnerung senden, wenn es einen Treffer gibt.

Lass uns anfangen!


✨ Warum dieser Schritt?

Geburtstage in deiner Datenbank zu finden, ist nur ein Teil der Aufgabe. Um diese App wirklich nützlich zu machen, müssen wir jemanden (dich!) über diese besonderen Daten informieren.

Dieser Schritt verbindet die Punkte:

  • Verwende SQL-Abfragen, um Geburtstage zu finden, die mit dem heutigen Datum übereinstimmen.
  • Versende eine freundliche SMS-Erinnerung über Twilio.

Es ist schnell einzurichten und macht die App sofort praktischer.


🚀 Was Sie lernen werden

Hier ist, was wir heute angehen werden:

  1. Verwenden Sie SQL-Abfragen, um Geburtstage zu finden, die mit dem heutigen Datum übereinstimmen.
  2. SMS-Benachrichtigungen mit dem Twilio Python SDK senden.
  3. Diese Schritte in ein einziges, funktionierendes Python-Skript kombinieren.

🛠 Was Sie benötigen

Stellen Sie vor dem Start sicher, dass Sie:

  • Ein Twilio-Konto haben (wenn Sie noch keines haben, folgen Sie diesem Schnellstartleitfaden, um sich anzumelden, eine Twilio-Telefonnummer zu kaufen und Ihre Anmeldeinformationen zu erhalten.
  • Ihre Twilio-Anmeldeinformationen:
    • Account SID
    • Auth Token
    • Twilio-Telefonnummer
  • Das Datenbank- und Python-Verbindungsskript von Tag 2.
  • Beispielfdaten in deiner Kontakttabelle (wir haben dies in Tag 1 – Einrichtung einer PostgreSQL-Datenbank für Geburtstagsbenachrichtigungen hinzugefügt). Wenn du mehr hinzufügen musst, befolge die Schritte in Tag 1, um deine Datenbank zu befüllen.

🧑‍🍳 Rezept für Tag 3: Überprüfung von Geburtstagen und Versand von Benachrichtigungen

Schritt 1: Installiere das Twilio Python SDK

Um SMS-Benachrichtigungen zu senden, benötigen wir die Twilio-Python-Bibliothek. Installiere sie, indem du folgendes ausführst:

pip install twilio

Wenn du deine Twilio-Anmeldeinformationen (Account SID, Auth Token und eine Telefonnummer) noch nicht hast, folge Twilios Messaging Quickstart. Dort wird dir erklärt, wie du dich anmeldest, eine Telefonnummer kaufst und die notwendigen Details erhältst.


Schritt 2: Aktualisieren Sie Ihre .env-Datei

Ihre .env-Datei sollte nun sowohl Ihre Datenbankanmeldeinformationen (vom zweiten Tag) als auch Ihre Twilio-Anmeldeinformationen enthalten. Die Twilio-Anmeldeinformationen – Account SID, Auth Token und Ihre Twilio-Telefonnummer – finden Sie, indem Sie sich in Ihr Twilio-Konto-Dashboard einloggen.

Aktualisieren Sie Ihre .env-Datei, damit sie wie folgt aussieht:

# Datenbankanmeldeinformationen
DB_HOST=
DB_NAME=
DB_USER=
DB_PASSWORD=
DB_PORT=5432  # Default PostgreSQL port

# Twilio-Anmeldeinformationen
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_PHONE_FROM=
TWILIO_PHONE_TO=
  • Ersetzen Sie die Platzhalter durch Ihre tatsächlichen Anmeldeinformationen.
  • Fügen Sie Ihre persönliche Telefonnummer als TWILIO_PHONE_TO hinzu, um Testbenachrichtigungen zu erhalten.

Profi-Tipp: Stellen Sie sicher, dass die .env-Datei zu Ihrer .gitignore-Datei hinzugefügt wird, um zu verhindern, dass sensible Anmeldeinformationen im Versionskontrollsystem offengelegt werden.


Schritt 3: Schreiben Sie das Python-Skript

Hier ist das vollständige Python-Skript, das die Datenbank nach den Geburtstagen des heutigen Tages abfragt und SMS-Benachrichtigungen mit Twilio sendet:

# check_birthdays.py

from datetime import datetime
import pg8000
from dotenv import load_dotenv
from twilio.rest import Client
import os

# Umgebungsvariablen laden
load_dotenv()

def connect_to_database():
    """Establish connection to the database."""
    return pg8000.connect(
        host=os.getenv("DB_HOST"),
        database=os.getenv("DB_NAME"),
        user=os.getenv("DB_USER"),
        password=os.getenv("DB_PASSWORD"),
        port=int(os.getenv("DB_PORT"))
    )

def send_birthday_message(first_name, last_name):
    """Send a birthday text message using Twilio."""
    try:
        # Twilio-Setup
        account_sid = os.getenv("TWILIO_ACCOUNT_SID")
        auth_token = os.getenv("TWILIO_AUTH_TOKEN")
        client = Client(account_sid, auth_token)

        # Nachricht verfassen
        message = client.messages.create(
            body=f"🎉 It's {first_name} {last_name or ''}'s birthday today! 🎂",
            from_=os.getenv("TWILIO_PHONE_FROM"),
            to=os.getenv("TWILIO_PHONE_TO")
        )

        print(
            f"Message sent to {os.getenv('TWILIO_PHONE_TO')} for {first_name} {last_name or ''}. Message SID: {message.sid}"
        )
    except Exception as e:
        print(f"An error occurred while sending the message: {e}")

def check_birthdays():
    """Check if any contact's birthday matches today's date and send a notification."""
    try:
        conn = connect_to_database()
        cursor = conn.cursor()

        # Holt sich den heutigen Monat und Tag
        today = datetime.now()
        today_month = today.month
        today_day = today.day

        # Abfrage, um Kontakte zu finden, deren Geburtstag mit dem heutigen Datum übereinstimmt
        cursor.execute(
            """
            SELECT first_name, last_name, birthday
            FROM contacts
            WHERE EXTRACT(MONTH FROM birthday) = %s
              AND EXTRACT(DAY FROM birthday) = %s;
            """,
            (today_month, today_day)
        )

        rows = cursor.fetchall()

        # Benachrichtige für jeden passenden Kontakt
        if rows:
            print("Birthday Notifications:")
            for row in rows:
                first_name, last_name, _ = row
                send_birthday_message(first_name, last_name)
        else:
            print("No birthdays today.")

        # Schließe den Cursor und die Verbindung
        cursor.close()
        conn.close()

    except Exception as e:
        print(f"An error occurred while checking birthdays: {e}")

if __name__ == "__main__":
    check_birthdays()

Schritt 5: Testen Sie Ihr Skript

Führen Sie das Skript aus, um alles zu testen:

python check_birthdays.py

Wenn es einen Geburtstag in Ihrer Datenbank gibt, der mit dem heutigen Datum übereinstimmt, erhalten Sie eine SMS. 🎉 Wenn nicht, wird das Skript einfach ausgeben:

No birthdays today.

🎁 Zusammenfassung

Hier ist, was wir heute erreicht haben:

✅ Die Datenbank nach Geburtstagen, die mit dem heutigen Datum übereinstimmen, abgefragt.

✅ Twilio verwendet, um SMS-Benachrichtigungen für diese Geburtstage zu senden.

✅ Alles in ein funktionales Python-Skript kombiniert.

Als Nächstes: Morgen werden wir dieses Skript in DigitalOcean Functions bereitstellen, damit es in der Cloud läuft—keine Serververwaltung erforderlich. Hier beginnt der Geburtstagserinnerungsdienst automatisch zu laufen. Bleiben Sie dran! 🚀

Source:
https://www.digitalocean.com/community/tutorials/checking-birthdays-and-sending-sms-notifications