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:
- Verwenden Sie SQL-Abfragen, um Geburtstage zu finden, die mit dem heutigen Datum übereinstimmen.
- Senden Sie SMS-Benachrichtigungen mit dem Python SDK von Twilio.
- 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
🧑🍳 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! 🚀