ウェブサイト検索

12 日間 (3 日目) - 誕生日の確認と SMS 通知の送信


🎄 DigitalOcean の 12 日間: 誕生日の確認と SMS 通知の送信 🎁

12 日間の DigitalOcean 3 日目 へようこそ!過去 2 日間、私たちは PostgreSQL データベースをセットアップし、Python を使用してそれに接続しました。ここで、誕生日リマインダー サービスに実際に何か役立つことを実行してみましょう。今日の誕生日にテキスト メッセージを送信します。 🎂

わずか数行のコードで SMS メッセージを簡単に送信できるサービスである Twilio を使用します。今日の終わりまでに、アプリはデータベースで誕生日を確認し、一致するものがあればリマインダーを送信します。

始めましょう!

✨ なぜこのステップを行うのか?

データベースから誕生日を検索することは仕事の一部にすぎません。このアプリを本当に便利にするには、これらの特別な日付について誰か (あなた!) に通知する必要があります。

このステップでは、点と点がつながります。

  • SQL クエリを使用して、今日の日付と一致する誕生日を検索します。
  • Twilio を使用してフレンドリーな SMS リマインダーを送信します。

セットアップが簡単で、アプリがすぐに実用的になります。

🚀 学ぶ内容

今日取り組む内容は次のとおりです。

  1. SQL クエリを使用して、今日の日付と一致する誕生日を検索します。
  2. Twilio の Python SDK を使用して SMS 通知を送信します。
  3. これらの手順を単一の機能的な Python スクリプトに結合します。

🛠 必要なもの

始める前に、次のものが揃っていることを確認してください。

  • Twilio アカウント (まだお持ちでない場合は、このクイックスタート ガイドに従ってサインアップし、Twilio 電話番号を購入し、資格情報を取得してください。
  • Twilio 認証情報:

    • アカウントSID
    • 認証トークン
    • Twilio 電話番号
  • 2 日目のデータベースと Python 接続スクリプト。
  • 連絡先テーブルのサンプル データ (これは「1 日目 - 誕生日リマインダー用の PostgreSQL データベースの設定」で追加しました)。さらに追加する必要がある場合は、1 日目の手順に従ってデータベースにデータを入力します。

🧑🍳 3日目のレシピ: 誕生日の確認と通知の送信

ステップ 1: Twilio の Python SDK をインストールする

SMS 通知を送信するには、Twilio Python ライブラリが必要です。以下を実行してインストールします。

pip install twilio

Twilio 資格情報 (アカウント SID、認証トークン、電話番号) をまだ持っていない場合は、Twilio のメッセージング クイックスタートに従ってください。サインアップ、電話番号の購入、必要な詳細の取得までを手順を追って説明します。

ステップ 2: .env ファイルを更新する

.env ファイルには、データベース認証情報 (2 日目のもの) と Twilio 認証情報の両方が含まれるはずです。 Twilio アカウント ダッシュボードにログインすると、Twilio 認証情報 (アカウント SID認証トークン、Twilio 電話番号) を確認できます。

.env ファイルを次のように更新します。

# 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>
  • プレースホルダーを実際の資格情報に置き換えます。
  • テスト通知を受信するには、個人の電話番号を TWILIO_PHONE_TO として追加します。

専門的なヒント: 機密の認証情報がバージョン管理で公開されるのを防ぐために、.env.gitignore ファイルに追加されていることを確認してください。

ステップ 3: Python スクリプトを作成する

以下は、今日の誕生日をデータベースにクエリし、Twilio を使用して SMS 通知を送信する完全な Python スクリプトです。

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

ステップ 5: スクリプトをテストする

スクリプトを実行してすべてをテストします。

python check_birthdays.py

データベースに今日の日付と一致する誕生日がある場合、テキスト メッセージが届きます。 🎉 そうでない場合、スクリプトは単に次のように出力します。

No birthdays today.

🎁 まとめ

今日私たちが達成したことは次のとおりです。

✅ 今日の日付と一致する誕生日をデータベースにクエリしました。

✅ Twilio を使用して、誕生日の SMS 通知を送信しました。

✅ すべてを機能的な Python スクリプトに結合しました。

次回: 明日、このスクリプトを DigitalOcean Functions にデプロイしてクラウドで実行できるようにします。サーバー管理は必要ありません。ここで、誕生日リマインダー サービスが自動的に実行されます。乞うご期待! 🚀