12 jours (jour 3) – Vérification des anniversaires et envoi de notifications par SMS
🎄 12 jours de DigitalOcean : vérification des anniversaires et envoi de notifications par SMS 🎁
Bienvenue au Jour 3 des 12 Jours de DigitalOcean ! Au cours des deux derniers jours, nous avons mis en place une base de données PostgreSQL et nous y sommes connectés à l'aide de Python. Il est maintenant temps de faire en sorte que notre service de rappel d'anniversaire fasse réellement quelque chose d'utile : vous envoyer un SMS lorsqu'il y a un anniversaire aujourd'hui. 🎂
Nous utiliserons Twilio, un service qui permet d'envoyer facilement des SMS avec seulement quelques lignes de code. À la fin de la journée, votre application vérifiera la base de données pour les anniversaires et vous enverra un rappel en cas de correspondance.
Commençons !
✨Pourquoi cette étape ?
Trouver des anniversaires dans votre base de données n'est qu'une partie du travail. Pour rendre cette application vraiment utile, nous devons informer quelqu'un (vous !) de ces dates spéciales.
Cette étape relie les points :
- Utilisez des requêtes SQL pour trouver les anniversaires correspondant à la date du jour.
- Envoyez un rappel SMS amical en utilisant Twilio.
Elle est rapide à configurer et rend l’application instantanément plus pratique.
🚀 Ce que vous apprendrez
Voici ce que nous allons aborder aujourd’hui :
- Utilisez des requêtes SQL pour trouver les anniversaires correspondant à la date du jour.
- Envoyez des notifications par SMS à l'aide du SDK Python de Twilio.
- Combinez ces étapes dans un seul script Python fonctionnel.
🛠 Ce dont vous aurez besoin
Avant de commencer, assurez-vous d'avoir :
- Un compte Twilio (si vous n'en avez pas encore, suivez ce guide de démarrage rapide pour vous inscrire, acheter un numéro de téléphone Twilio et obtenir vos informations d'identification.
Vos identifiants Twilio :
- Numéro de compte du compte
- Jeton d'authentification
- Numéro de téléphone Twilio
🧑🍳 Recette du jour 3 : vérification des anniversaires et envoi de notifications
Étape 1 : Installez le SDK Python de Twilio
Pour envoyer des notifications SMS, nous aurons besoin de la bibliothèque Twilio Python. Installez-le en exécutant :
pip install twilio
Si vous ne disposez pas déjà de vos informations d'identification Twilio (SID de compte, jeton d'authentification et numéro de téléphone), suivez le démarrage rapide de la messagerie de Twilio. Il vous guide tout au long de votre inscription, de l'achat d'un numéro de téléphone et de la saisie des détails nécessaires.
Étape 2 : Mettez à jour votre fichier .env
Votre fichier .env devrait maintenant inclure à la fois vos informations d'identification de base de données (à partir du jour 2) et vos informations d'identification Twilio. Vous pouvez trouver les informations d'identification Twilio (SID du compte, Auth Token et votre numéro de téléphone Twilio) en vous connectant au tableau de bord de votre compte Twilio.
Mettez à jour votre fichier .env
pour qu'il ressemble à ceci :
# 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>
- Remplacez les espaces réservés par vos informations d'identification réelles.
- Ajoutez votre numéro de téléphone personnel sous la forme TWILIO_PHONE_TO pour recevoir des notifications de test.
Conseil de pro : Assurez-vous que .env
est ajouté à votre fichier .gitignore
pour éviter que des informations d'identification sensibles ne soient exposées dans le contrôle de version.
Étape 3 : Écrivez le script Python
Voici le script Python complet qui interroge la base de données pour les anniversaires d'aujourd'hui et envoie des notifications par SMS à l'aide de Twilio :
# 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()
Étape 5 : testez votre script
Exécutez le script pour tout tester :
python check_birthdays.py
S'il y a un anniversaire dans votre base de données correspondant à la date d'aujourd'hui, vous recevrez un message texte. 🎉 Sinon, le script affichera simplement :
No birthdays today.
🎁 Conclusion
Voici ce que nous avons accompli aujourd’hui :
✅ J'ai interrogé la base de données pour connaître les anniversaires correspondant à la date d'aujourd'hui.
✅ J'ai utilisé Twilio pour envoyer des notifications SMS pour ces anniversaires.
✅ Tout combiné dans un script Python fonctionnel.
Prochaine étape : demain, nous déploierons ce script sur DigitalOcean Functions pour le faire fonctionner dans le cloud ; aucune gestion de serveur n'est nécessaire. C'est ici que le service de rappel d'anniversaire commence à s'exécuter automatiquement. Restez à l'écoute! 🚀