12 Jours de DigitalOcean (Jour 3) – Vérification des Anniversaires et Envoi de Notifications SMS

🎄 12 Jours de DigitalOcean : Vérification des Anniversaires et Envoi de Notifications SMS 🎁

Bienvenue au Jour 3 des 12 Jours de DigitalOcean ! Au cours des deux derniers jours, nous avons configuré une base de données PostgreSQL et nous y sommes connectés en utilisant Python. Maintenant, il est 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 facilite l’envoi de messages SMS avec juste quelques lignes de code. D’ici la fin de la journée, votre application vérifiera la base de données pour les anniversaires et vous enverra un rappel s’il y a une 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 notifier quelqu’un (vous !) à propos de ces dates spéciales.

Cette étape relie les points :

  • Utilisez des requêtes SQL pour trouver les anniversaires qui correspondent à la date d’aujourd’hui.
  • Envoyez un rappel SMS amical en utilisant Twilio.

Il est rapide à mettre en place et rend l’application instantanément plus pratique.


🚀 Ce que vous apprendrez

Voici ce que nous allons aborder aujourd’hui :

  1. Utiliser des requêtes SQL pour trouver des anniversaires correspondant à la date d’aujourd’hui.
  2. Envoyer des notifications SMS en utilisant le SDK Python de Twilio.
  3. Combiner ces étapes en un seul script Python fonctionnel.

🛠 Ce dont vous aurez besoin

Avant de commencer, assurez-vous d’avoir :


🧑‍🍳 Recette pour le Jour 3 : Vérification des anniversaires et envoi de notifications

Étape 1 : Installer le SDK Python de Twilio

Pour envoyer des notifications par SMS, nous aurons besoin de la bibliothèque Python de Twilio. Installez-la en exécutant :

pip install twilio

Si vous n’avez pas déjà vos identifiants Twilio (Account SID, Auth Token et un numéro de téléphone), suivez le Guide de démarrage rapide de la messagerie de Twilio. Il vous guide à travers l’inscription, l’achat d’un numéro de téléphone et la récupération des informations nécessaires.


Étape 2 : Mettez à jour votre .env fichier

Votre fichier .env doit maintenant inclure à la fois vos identifiants de base de données (du Jour 2) et vos identifiants Twilio. Vous pouvez trouver les identifiants Twilio—Account SID, Auth Token, et votre numéro de téléphone Twilio—en vous connectant à votre tableau de bord de compte Twilio.

Mettez à jour votre fichier .env pour qu’il ressemble à ceci :

# Identifiants de la base de données
DB_HOST=
DB_NAME=
DB_USER=
DB_PASSWORD=
DB_PORT=5432  # Default PostgreSQL port

# Identifiants Twilio
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_PHONE_FROM=
TWILIO_PHONE_TO=
  • Remplacez les espaces réservés par vos identifiants réels.
  • Ajoutez votre numéro de téléphone personnel en tant que TWILIO_PHONE_TO pour recevoir des notifications de test.

Conseil Pro : Assurez-vous que .env est ajouté à votre fichier .gitignore pour éviter que des identifiants sensibles ne soient exposés 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 SMS en utilisant Twilio :

# check_birthdays.py

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

# Charger les variables d'environnement
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:
        # Configuration de Twilio
        account_sid = os.getenv("TWILIO_ACCOUNT_SID")
        auth_token = os.getenv("TWILIO_AUTH_TOKEN")
        client = Client(account_sid, auth_token)

        # Composer le 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()

        # Obtenir le mois et le jour d'aujourd'hui
        today = datetime.now()
        today_month = today.month
        today_day = today.day

        # Requête pour récupérer les contacts dont l'anniversaire correspond à la date d'aujourd'hui
        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()

        # Notifier pour chaque contact correspondant
        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.")

        # Fermer le curseur et la connexion
        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

Si un anniversaire dans votre base de données correspond à la date d’aujourd’hui, vous recevrez un message texte. 🎉 Sinon, le script affichera simplement :

No birthdays today.

🎁 Récapitulatif

Voici ce que nous avons accompli aujourd’hui :

✅ Interrogé la base de données pour les anniversaires correspondant à la date d’aujourd’hui.

✅ Utilisé Twilio pour envoyer des notifications SMS pour ces anniversaires.

✅ Tout combiné dans un script Python fonctionnel.

Prochainement : Demain, nous déploierons ce script sur DigitalOcean Functions pour le faire fonctionner dans le cloud—sans gestion de serveur nécessaire. C’est ici que le service de rappel d’anniversaire commence à fonctionner automatiquement. Restez à l’écoute ! 🚀

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