12 วัน (วันที่ 3) - ตรวจสอบวันเกิดและส่งการแจ้งเตือนทาง SMS
🎄 12 วันแห่ง DigitalOcean: ตรวจสอบวันเกิดและส่งการแจ้งเตือนทาง SMS 🎁
ยินดีต้อนรับสู่ วันที่ 3 ของ 12 วันของ DigitalOcean! ในช่วงสองวันที่ผ่านมา เราได้ตั้งค่าฐานข้อมูล PostgreSQL และเชื่อมต่อกับฐานข้อมูลโดยใช้ Python ตอนนี้ถึงเวลาที่จะทำให้บริการเตือนวันเกิดของเราทำสิ่งที่มีประโยชน์จริงๆ แล้ว ส่งข้อความถึงคุณเมื่อวันนี้เป็นวันเกิด
เราจะใช้ Twilio ซึ่งเป็นบริการที่ทำให้การส่งข้อความ SMS เป็นเรื่องง่ายด้วยโค้ดเพียงไม่กี่บรรทัด ภายในสิ้นวันนี้ แอปของคุณจะตรวจสอบฐานข้อมูลสำหรับวันเกิด และส่งการแจ้งเตือนถึงคุณหากมีรายการที่ตรงกัน
มาเริ่มกันเลย!
✨ ทำไมต้องเป็นขั้นตอนนี้?
การค้นหาวันเกิดในฐานข้อมูลของคุณเป็นเพียงส่วนหนึ่งของงานเท่านั้น เพื่อให้แอปนี้มีประโยชน์อย่างแท้จริง เราจำเป็นต้องแจ้งให้ใครบางคน (คุณ!) เกี่ยวกับวันพิเศษเหล่านี้
ขั้นตอนนี้เชื่อมต่อจุดต่างๆ:
- ใช้คำสั่ง SQL เพื่อค้นหาวันเกิดที่ตรงกับวันนี้
- ส่ง SMS เตือนความจำที่เป็นมิตรโดยใช้ Twilio
ตั้งค่าได้รวดเร็วและทำให้แอปใช้งานได้จริงมากขึ้นในทันที
🚀 สิ่งที่คุณจะได้เรียนรู้
นี่คือสิ่งที่เราจะแก้ไขในวันนี้:
- ใช้คำสั่ง SQL เพื่อค้นหาวันเกิดที่ตรงกับวันนี้
- ส่งการแจ้งเตือนทาง SMS โดยใช้ Python SDK ของ Twilio
- รวมขั้นตอนเหล่านี้เป็นสคริปต์ Python เดียวที่ใช้งานได้
🛠 สิ่งที่คุณต้องการ
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- บัญชี Twilio (หากคุณยังไม่มี ให้ปฏิบัติตามคู่มือการเริ่มต้นฉบับย่อนี้เพื่อสมัคร ซื้อหมายเลขโทรศัพท์ Twilio และรับข้อมูลประจำตัวของคุณ
ข้อมูลรับรอง Twilio ของคุณ:
- บัญชี SID
- โทเค็นการรับรองความถูกต้อง
- หมายเลขโทรศัพท์ทวิลิโอ
🧑🍳 สูตรอาหารสำหรับวันที่ 3: ตรวจสอบวันเกิดและส่งการแจ้งเตือน
ขั้นตอนที่ 1: ติดตั้ง Python SDK ของ Twilio
หากต้องการส่งการแจ้งเตือนทาง SMS เราจำเป็นต้องมีไลบรารี Twilio Python ติดตั้งโดยการรัน:
pip install twilio
หากคุณยังไม่มีข้อมูลรับรอง Twilio (SID ของบัญชี, โทเค็นการรับรองความถูกต้อง และหมายเลขโทรศัพท์) ให้ปฏิบัติตามการเริ่มต้นอย่างรวดเร็วของการส่งข้อความของ Twilio โดยจะแนะนำคุณเกี่ยวกับการสมัคร ซื้อหมายเลขโทรศัพท์ และการรับรายละเอียดที่จำเป็น
ขั้นตอนที่ 2: อัปเดตไฟล์ .env
ของคุณ
ไฟล์ .env ของคุณควรมีทั้งข้อมูลรับรองฐานข้อมูลของคุณ (ตั้งแต่วันที่ 2) และข้อมูลรับรอง Twilio ของคุณ คุณสามารถค้นหาข้อมูลรับรอง Twilio—SID บัญชี, โทเค็นการตรวจสอบสิทธิ์ และหมายเลขโทรศัพท์ Twilio ของคุณได้โดยการลงชื่อเข้าใช้แดชบอร์ดบัญชี 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
นี่คือสคริปต์ 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 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 เพื่อให้สคริปต์ทำงานในระบบคลาวด์ โดยไม่จำเป็นต้องจัดการเซิร์ฟเวอร์ นี่คือจุดที่บริการเตือนวันเกิดเริ่มทำงานโดยอัตโนมัติ คอยติดตาม!