Website-Suche

12 Tage (Tag 3) – Geburtstage überprüfen und SMS-Benachrichtigungen senden


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

Willkommen zum Tag 3 von 12 Days of DigitalOcean! In den letzten zwei Tagen haben wir eine PostgreSQL-Datenbank eingerichtet und mit Python eine Verbindung dazu hergestellt. Jetzt ist es an der Zeit, dass unser Geburtstagserinnerungsdienst tatsächlich etwas Nützliches tut – Ihnen eine Textnachricht zu senden, wenn heute Geburtstag ist. 🎂

Wir verwenden Twilio, einen Dienst, der das Versenden von SMS-Nachrichten mit nur wenigen Codezeilen erleichtert. Bis zum Ende des heutigen Tages überprüft Ihre App die Datenbank auf Geburtstage und sendet Ihnen eine Erinnerung, wenn es eine Übereinstimmung gibt.

Fangen wir an!

✨ Warum dieser Schritt?

Das Auffinden von Geburtstagen in Ihrer Datenbank ist nur ein Teil der Aufgabe. Um diese App wirklich nützlich zu machen, müssen wir jemanden (Sie!) über diese besonderen Termine informieren.

Dieser Schritt verbindet die Punkte:

  • Verwenden Sie SQL-Abfragen, um Geburtstage zu finden, die mit dem heutigen Datum übereinstimmen.
  • Senden Sie mit Twilio eine freundliche SMS-Erinnerung.

Es lässt sich schnell einrichten und macht die App sofort praktischer.

🚀 Was Sie lernen werden

Folgendes werden wir heute in Angriff nehmen:

  1. Verwenden Sie SQL-Abfragen, um Geburtstage zu finden, die mit dem heutigen Datum übereinstimmen.
  2. Senden Sie SMS-Benachrichtigungen mit dem Python SDK von Twilio.
  3. Kombinieren Sie diese Schritte in einem einzigen, funktionalen Python-Skript.

🛠 Was Sie brauchen

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:

  • Ein Twilio-Konto (falls Sie noch keins haben, befolgen Sie diese Kurzanleitung, um sich anzumelden, eine Twilio-Telefonnummer zu kaufen und Ihre Anmeldeinformationen zu erhalten.
  • Ihre Twilio-Anmeldeinformationen:

    • Konto-SID
    • Authentifizierungstoken
    • Twilio-Telefonnummer
  • Das Datenbank- und Python-Verbindungsskript von Tag 2.
  • Beispieldaten in Ihrer Kontakttabelle (wir haben dies in Tag 1 – Einrichten einer PostgreSQL-Datenbank für Geburtstagserinnerungen hinzugefügt). Wenn Sie weitere hinzufügen müssen, befolgen Sie die Schritte von Tag 1, um Ihre Datenbank zu füllen.

🧑🍳 Rezept für Tag 3: Geburtstage überprüfen und Benachrichtigungen senden

Schritt 1: Installieren Sie das Python SDK von Twilio

Zum Versenden von SMS-Benachrichtigungen benötigen wir die Twilio-Python-Bibliothek. Installieren Sie es, indem Sie Folgendes ausführen:

pip install twilio

Wenn Sie noch nicht über Ihre Twilio-Anmeldeinformationen (Konto-SID, Auth-Token und eine Telefonnummer) verfügen, befolgen Sie den Messaging-Schnellstart von Twilio. Es führt Sie durch die Anmeldung, den Kauf einer Telefonnummer und die Erfassung der erforderlichen Details.

Schritt 2: Aktualisieren Sie Ihre .env-Datei

Ihre .env-Datei sollte nun sowohl Ihre Datenbankanmeldeinformationen (ab Tag 2) als auch Ihre Twilio-Anmeldeinformationen enthalten. Sie können die Twilio-Anmeldeinformationen – Konto-SID, Auth-Token und Ihre Twilio-Telefonnummer – finden, indem Sie sich in Ihrem Twilio-Konto-Dashboard anmelden.

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

# Database credentials
DB_HOST=<your-database-hostname>
DB_NAME=<your-database-name>
DB_USER=<your-database-username>
DB_PASSWORD=<your-database-password>
DB_PORT=5432  # Default PostgreSQL port
Twilio credentials
TWILIO_ACCOUNT_SID=<your-twilio-account-sid>
TWILIO_AUTH_TOKEN=<your-twilio-auth-token>
TWILIO_PHONE_FROM=<your-twilio-phone-number>
TWILIO_PHONE_TO=<your-personal-phone-number>
  • 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 .env zu Ihrer .gitignore-Datei hinzugefügt wird, um zu verhindern, dass vertrauliche Anmeldeinformationen in der Versionskontrolle offengelegt werden.

Schritt 3: Schreiben Sie das Python-Skript

Hier ist das vollständige Python-Skript, das die Datenbank nach den heutigen Geburtstagen 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
Load environment variables
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)

        # Compose the message
        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()

        # Get today's month and day
        today = datetime.now()
        today_month = today.month
        today_day = today.day

        # Query to fetch contacts whose birthday matches today's date
        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()

        # Notify for each matching contact
        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.")

        # Close the cursor and connection
        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 in Ihrer Datenbank ein Geburtstag vorhanden ist, der mit dem heutigen Datum übereinstimmt, erhalten Sie eine SMS. 🎉 Wenn nicht, gibt das Skript einfach Folgendes aus:

No birthdays today.

🎁 Zusammenfassung

Folgendes haben wir heute erreicht:

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

✅ Twilio zum Versenden von SMS-Benachrichtigungen für diese Geburtstage verwendet.

✅ Alles in einem funktionalen Python-Skript zusammengefasst.

Als nächstes: Morgen werden wir dieses Skript für DigitalOcean Functions bereitstellen, damit es in der Cloud ausgeführt wird – keine Serververwaltung erforderlich. Hier beginnt der automatische Start des Geburtstagserinnerungsdienstes. Bleiben Sie dran! 🚀

Verwandte Artikel: