12 ימים של דיגיטל אושן (יום 3) – בדיקת ימי הולדת ושליחת התראות SMS

🎄 12 ימים של DigitalOcean: בדיקת ימי הולדת ושליחת התראות SMS 🎁

ברוכים הבאים ליום 3 של 12 ימים של DigitalOcean! במהלך שני הימים האחרונים, הקמנו מסד נתונים PostgreSQL וחיברנו אליו באמצעות Python. עכשיו הגיע הזמן לגרום לשירות הזכרת ימי ההולדת שלנו לעשות משהו מועיל באמת—לשלוח לך הודעה טקסט כאשר יש יום הולדת היום. 🎂

נשתמש בTwilio, שירות שמקל על שליחת הודעות SMS בכמה שורות קוד בלבד. עד סוף היום, האפליקציה שלך תבדוק את מסד הנתונים עבור ימי הולדת ותשלח לך תזכורת אם יש התאמה.

בואו נתחיל!


✨ למה השלב הזה?

מציאת ימי הולדת במסד הנתונים שלך היא רק חלק מהעבודה. כדי שהאפליקציה הזו תהיה שימושית באמת, אנו צריכים להודיע למישהו (לך!) על התאריכים המיוחדים האלה.

שלב זה מחבר את הנקודות:

  • השתמש בשאילתות SQL כדי למצוא ימי הולדת שמתאימים לתאריך של היום.
  • שלח תזכורת SMS ידידותית באמצעות Twilio.

זה מהיר להקים ועושה את האפליקציה מיידית יותר מעשית.


🚀 מה תלמד

הנה מה שנעסוק בו היום:

  1. השתמש בשאילתות SQL כדי למצוא ימי הולדת התואמים את תאריך היום.
  2. שלח התראות SMS באמצעות ה-SDK של Twilio ב-Python.
  3. שילב את הצעדים הללו לסקריפט פונקציונלי אחד ב-Python.

🛠 מה תצטרך

לפני שתתחיל, ודא שיש לך:

  • חשבון Twilio (אם אין לך אחד עדיין, עקוב אחרי מדריך ההתחלה המהירה כדי להירשם, לקנות מספר טלפון של Twilio, ולקבל את האישורים שלך.
  • האישורים שלך ב-Twilio:
    • Account SID
    • Auth Token
    • מספר טלפון של Twilio
  • מסד הנתונים וסקריפט החיבור ב-Python מ-יום 2.
  • נתוני דוגמה בטבלת אנשי הקשר שלך (הוספנו זאת ביום 1 – הקמת מסד נתונים PostgreSQL להזכרות יומולדת). אם אתה זקוק להוסיף עוד, עקוב אחרי הצעדים ביום 1 כדי למלא את מסד הנתונים שלך.

🧑‍🍳 מתכון ליום 3: בדיקת ימי הולדת ושליחת התראות

שלב 1: התקן את ה-SDK של Twilio עבור פייתון

כדי לשלוח התראות SMS, נצטרך את ספריית Twilio עבור פייתון. התקן אותה על ידי הרצת:

pip install twilio

אם עדיין אין לך את האישורים של Twilio (Account SID, Auth Token, ומספר טלפון), עקוב אחרי התחלה מהירה של מסרים של Twilio. זה מדריך אותך דרך שלב ההרשמה, רכישת מספר טלפון, וקבלת הפרטים הדרושים.


שלב 2: עדכן את קובץ ה.env שלך

קובץ ה.env שלך צריך לכלול עכשיו גם את אישורי בסיס הנתונים שלך (מיום 2) וגם את אישורי Twilio שלך. תוכל למצוא את אישורי Twilio—Account SID, Auth Token, ומספר הטלפון שלך ב-Twilio—על ידי כניסה לדשבורד החשבון שלך ב-Twilio.

עדכן את קובץ ה.env שלך כך:

# אישורי בסיס נתונים
DB_HOST=
DB_NAME=
DB_USER=
DB_PASSWORD=
DB_PORT=5432  # Default PostgreSQL port

# אישורי Twilio
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_PHONE_FROM=
TWILIO_PHONE_TO=
  • החלף את המילוי המיועד עם האישורים האמיתיים שלך.
  • הוסף את מספר הטלפון האישי שלך כ-TWILIO_PHONE_TO כדי לקבל התראות ניסוי.

טיפ מקצועי: ודא ש.env נוסף לקובץ ה.gitignore שלך כדי למנוע חשיפת אישורים רגישים בניהול גרסאות.


שלב 3: כתוב את הסקריפט ב-Python

הנה הסקריפט המלא ב-Python ששואל את בסיס הנתונים לגבי ימי ההולדת של היום ושולח התראות SMS באמצעות Twilio:

# check_birthdays.py

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

# טען משתני סביבה
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
        account_sid = os.getenv("TWILIO_ACCOUNT_SID")
        auth_token = os.getenv("TWILIO_AUTH_TOKEN")
        client = Client(account_sid, auth_token)

        # הרכב את ההודעה
        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()

        # קבל את החודש והיום של היום
        today = datetime.now()
        today_month = today.month
        today_day = today.day

        # שאילתה כדי לשלוף אנשי קשר שחגיגת יום ההולדת שלהם תואמת את תאריך היום
        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()

        # הודע לכל איש קשר תואם
        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.")

        # סגור את הסמן ואת החיבור
        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 עבור ימי ההולדת הללו.

✅ שילבנו הכל לסקריפט פייתון פונקציונלי.

בהמשך: מחר, נפרוס את הסקריפט הזה על DigitalOcean Functions כדי להריץ אותו בענן—בלי ניהול שרתים נדרש. כאן שירות התזכורת ליום הולדת מתחיל לפעול אוטומטית. הישארו מעודכנים! 🚀

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