12 يومًا من DigitalOcean (اليوم 3) – التحقق من أعياد الميلاد وإرسال إشعارات SMS

🎄 12 يومًا من DigitalOcean: التحقق من أعياد الميلاد وإرسال إشعارات SMS 🎁

مرحبًا بكم في اليوم 3 من 12 يومًا من DigitalOcean! على مدار اليومين الماضيين، قمنا بإنشاء قاعدة بيانات PostgreSQL وتواصلنا معها باستخدام Python. الآن، حان الوقت لجعل خدمة تذكير أعياد الميلاد لدينا تفعل شيئًا مفيدًا حقًا – إرسال رسالة نصية لك عندما يكون هناك عيد ميلاد اليوم. 🎂

سنستخدم Twilio، وهي خدمة تسهل إرسال رسائل SMS ببضع أسطر من التعليمات البرمجية. بحلول نهاية اليوم، ستقوم تطبيقك بالتحقق من قاعدة البيانات بحثًا عن أعياد الميلاد وإرسال تذكير لك إذا كان هناك تطابق.

لنبدأ!


✨ لماذا هذه الخطوة؟

البحث عن أعياد الميلاد في قاعدة بياناتك هو جزء فقط من المهمة. لجعل هذا التطبيق مفيدًا حقًا، نحتاج إلى إبلاغ شخص ما (أنت!) عن هذه التواريخ الخاصة.

تربط هذه الخطوة النقاط:

  • استخدم استعلامات SQL للعثور على أعياد الميلاد التي تتطابق مع تاريخ اليوم.
  • أرسل تذكير SMS ودي باستخدام Twilio.

من السهل إعدادها وتجعل التطبيق أكثر عملية على الفور.


🚀 ما ستتعلمه

إليك ما سنتناوله اليوم:

  1. استخدم استعلامات SQL للعثور على أعياد الميلاد المطابقة لتاريخ اليوم.
  2. أرسل إشعارات SMS باستخدام مجموعة أدوات Python من Twilio.
  3. اجمع هذه الخطوات في نص Python واحد يعمل.

🛠 ما ستحتاجه

قبل البدء، تأكد من أن لديك:


🧑‍🍳 وصفة اليوم الثالث: التحقق من أعياد الميلاد وإرسال الإشعارات

الخطوة 1: تثبيت مكتبة Twilio الخاصة بـ Python

لإرسال إشعارات SMS، سنحتاج إلى مكتبة Twilio الخاصة بـ Python. قم بتثبيتها عن طريق تشغيل:

pip install twilio

إذا لم يكن لديك بيانات اعتماد Twilio الخاصة بك (SID الحساب، رمز المصادقة، ورقم هاتف)، فاتبع دليل البدء السريع للرسائل من Twilio. سيوجهك خلال عملية التسجيل، وشراء رقم هاتف، والحصول على التفاصيل اللازمة.


الخطوة 2: تحديث ملف .env الخاص بك

يجب أن يتضمن ملف .env الخاص بك الآن بيانات اعتماد قاعدة البيانات الخاصة بك (من اليوم الثاني) وبيانات اعتماد 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: كتابة سكربت بايثون

إليك السكربت الكامل بلغة بايثون الذي يستعلم عن أعياد الميلاد لليوم ويرسل إشعارات 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 ليعمل في السحابة—دون الحاجة لإدارة الخادم. هنا تبدأ خدمة تذكير عيد الميلاد في العمل تلقائيًا. ترقبوا! 🚀

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