
برمجة تطبيق تذكير بالمواعيد باستخدام بايثون schedule وplaysound
يُعتبر تطبيق تذكير بالمواعيد أداةً أساسيةً لتنظيم الوقت وزيادة الإنتاجية.
باستخدام بايثون ومكتبتي schedule وplaysound، يمكنك بناء تطبيق بسيط وفعال
لتذكير المستخدمين بالمواعيد المهمة، في هذا المقال، سنستعرض
كيفية برمجة هذا التطبيق خطوة بخطوة، مع التركيز على الأكواد البرمجية والأمثلة العملية.
مميزات استخدام schedule و playsound :
* سهولة الاستخدام: توفر المكتبتان واجهات برمجة تطبيقات بسيطة وواضحة.
* فعالية: يمكن جدولة المهام بدقة وتشغيل التنبيهات الصوتية بشكل موثوق.
* تخصيص: يمكن تخصيص وقت التذكير وملف الصوت المستخدم للتنبيه.
خطوات برمجة تطبيق تذكير بالمواعيد :
1. تثبيت المكتبات اللازمة :
قبل البدء، يجب تثبيت مكتبتي schedule و playsound :
pip install schedule playsound
--
2. إنشاء بنية المشروع :
يمكنك إنشاء ملف بايثون واحد (مثل reminder_app.py ) لبدء التطبيق.
3. برمجة وظائف التطبيق :
كتابة أكواد بايثون لجدولة المهام وتشغيل التنبيهات الصوتية.
* الأكواد ( reminder_app.py ):
import schedule import time from playsound import playsound
def reminder(): print("حان موعد التذكير!") playsound("reminder_sound.wav") # استبدل بمسار ملف الصوت الخاص بك
# جدولة التذكير schedule.every().day.at("10:30").do(reminder) # ضبط الوقت المراد للتذكير
while True: schedule.run_pending() time.sleep(1)
4. إنشاء واجهة المستخدم (اختياري) :
* يمكنك إضافة واجهة مستخدم رسومية باستخدام مكتبة tkinter لتمكين المستخدمين
من إدخال المواعيد وتخصيص التنبيهات.
* الأكواد (باستخدام tkinter) :
import tkinter as tk from tkinter import messagebox import schedule import time from playsound import playsound
def set_reminder(): time_str = time_entry.get() sound_file = sound_entry.get()
def reminder(): messagebox.showinfo("تذكير", "حان موعد التذكير!") playsound(sound_file)
schedule.every().day.at(time_str).do(reminder) messagebox.showinfo("تم", "تم ضبط التذكير بنجاح!")
root = tk.Tk() root.title("تطبيق التذكير")
time_label = tk.Label(root, text="أدخل الوقت (HH:MM):") time_label.pack() time_entry = tk.Entry(root) time_entry.pack()
sound_label = tk.Label(root, text="أدخل مسار ملف الصوت:") sound_label.pack() sound_entry = tk.Entry(root) sound_entry.pack()
set_button = tk.Button(root, text="ضبط التذكير", command=set_reminder) set_button.pack()
def run_scheduler(): while True: schedule.run_pending() time.sleep(1)
import threading threading.Thread(target=run_scheduler).start()
root.mainloop()
5. تشغيل التطبيق :
* لتشغيل التطبيق، قم بتنفيذ ملف بايثون من سطر الأوامر:
python reminder_app.py
--
6. تثبيت التطبيق (اختياري) :
* يمكنك تحويل التطبيق إلى ملف تنفيذي باستخدام مكتبة PyInstaller لتشغيله
على أنظمة التشغيل المختلفة دون الحاجة إلى تثبيت بايثون :
pip install pyinstaller
pyinstaller --onefile reminder_app.py
--
7. إضافة خيارات تكرار التذكير :
import scheduleimport timefrom playsound import playsound
def reminder(message, sound_file): print(message) playsound(sound_file)
# جدولة التذكيرschedule.every().day.at("10:30").do(reminder, "حان موعد التذكير اليومي!", "daily_sound.wav")schedule.every().monday.at("09:00").do(reminder, "حان موعد التذكير الأسبوعي!", "weekly_sound.wav")schedule.every().first_day_of_month.at("14:00").do(reminder, "حان موعد التذكير الشهري!", "monthly_sound.wav")
while True: schedule.run_pending() time.sleep(1)
8. إضافة خيارات تخصيص التنبيه :
import tkinter as tkfrom tkinter import messageboximport scheduleimport timefrom playsound import playsound
def set_reminder(): time_str = time_entry.get() sound_file = sound_entry.get() message = message_entry.get()
def reminder(): messagebox.showinfo("تذكير", message) playsound(sound_file)
schedule.every().day.at(time_str).do(reminder) messagebox.showinfo("تم", "تم ضبط التذكير بنجاح!")
# ... (بقية أكواد واجهة المستخدم tkinter)message_label = tk.Label(root, text="أدخل رسالة التذكير:")message_label.pack()message_entry = tk.Entry(root)message_entry.pack()
9. إضافة قاعدة بيانات لتخزين المواعيد :
import sqlite3import scheduleimport timefrom playsound import playsound
conn = sqlite3.connect('reminders.db')c = conn.cursor()c.execute('''CREATE TABLE IF NOT EXISTS reminders (id INTEGER PRIMARY KEY, time TEXT, message TEXT, sound_file TEXT)''')
def add_reminder(time_str, message, sound_file): c.execute("INSERT INTO reminders (time, message, sound_file) VALUES (?, ?, ?)", (time_str, message, sound_file)) conn.commit()
def get_reminders(): c.execute("SELECT * FROM reminders") return c.fetchall()
def reminder(message, sound_file): playsound(sound_file)
reminders = get_reminders()for reminder_data in reminders: schedule.every().day.at(reminder_data[1]).do(reminder, reminder_data[2], reminder_data[3])
# ... (بقية أكواد التطبيق)
10. إضافة واجهة مستخدم أكثر تطورًا (باستخدام PyQt):
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayoutimport scheduleimport timefrom playsound import playsound
class ReminderApp(QWidget): def __init__(self): super().__init__() self.initUI()
def initUI(self): # ... (إنشاء عناصر واجهة المستخدم PyQt) self.setLayout(vbox) self.setWindowTitle('تطبيق التذكير') self.show()
# ... (بقية أكواد PyQt)
11. إضافة خيارات المزامنة (باستخدام تقويم جوجل API):
from googleapiclient.discovery import buildfrom google_auth_oauthlib.flow import InstalledAppFlowfrom google.auth.transport.requests import Requestimport os.pathimport pickle
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
def get_calendar_events(): creds = None if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) creds = flow.run_local_server(port=0) with open('token.pickle', 'wb') as token: pickle.dump(creds, token)
service = build('calendar', 'v3', credentials=creds) # ... (استخدام service لاسترداد الأحداث من تقويم جوجل)
12. إضافة خيارات التنبيه عبر البريد الإلكتروني أو الرسائل النصية :
import smtplibfrom email.mime.text import MIMETextfrom twilio.rest import Client
def send_email(subject, body, to_email): msg = MIMEText(body) msg['Subject'] = subject msg['From'] = 'your_email@gmail.com' msg['To'] = to_email with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp: smtp.login('your_email@gmail.com', 'your_password') smtp.send_message(msg)
def send_sms(message, to_phone_number): client = Client('your_twilio_account_sid', 'your_twilio_auth_token') message = client.messages.create(body=message, from_='your_twilio_phone_number', to=to_phone_number)
12. إضافة خيارات التنبيه بناءً على الموقع :
from geopy.geocoders import Nominatimimport webbrowser
def get_location(address): geolocator = Nominatim(user_agent="reminder_app") location = geolocator.geocode(address) return location.latitude, location.longitude
def open_maps(latitude, longitude): url = f"https://www.google.com/maps/search/?api=1&query={latitude},{longitude}" webbrowser.open(url)
13. إضافة خيارات للتحكم في التذكير بواسطة الأوامر الصوتية :
import speech_recognition as sr
def listen(): r = sr.Recognizer() with sr.Microphone() as source: audio = r.listen(source) try: text = r.recognize_google(audio, language="ar-EG") return text except sr.UnknownValueError: return "لم يتم التعرف على الصوت" except sr.RequestError as e: return "تعذر الاتصال بخدمة التعرف على الكلام"
14. تثبيت المكتبات اللازمة :
إليك الأكواد لتثبيت المكتبات اللازمة وإضافة المزيد من الأمان إلى التطبيق :
* schedule :
pip install schedule
--
* playsound :
pip install playsound
--
* tkinter : (مدمجة مع بايثون، لا تحتاج إلى تثبيت)
* sqlite3 : (مدمجة مع بايثون، لا تحتاج إلى تثبيت).
* PyQt5 :
pip install PyQt5
--
* google-api-python-client :
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
--
* smtplib : (مدمجة مع بايثون، لا تحتاج إلى تثبيت)
* twilio :
pip install twilio
--
* geopy :
pip install geopy
--
* speechrecognition :
pip install SpeechRecognition
--
* bcrypt :
pip install bcrypt
--
* Flask-Limiter :
pip install Flask-Limiter
--
* Flask-WTF :
pip install Flask-WTF
--
15. إضافة المزيد من الأمان إلى التطبيق :
** تجزئة كلمات المرور (باستخدام bcrypt) :
import bcrypt
def hash_password(password): salt = bcrypt.gensalt() hashed_password = bcrypt.hashpw(password.encode('utf-8'), salt) return hashed_password
def check_password(password, hashed_password): return bcrypt.checkpw(password.encode('utf-8'), hashed_password)
# مثال للاستخدام password = "mysecretpassword" hashed_password = hash_password(password) is_correct = check_password(password, hashed_password)
** الحماية من هجمات القوة الغاشمة (باستخدام Flask-Limiter) :
from flask_limiter import Limiter from flask_limiter.util import get_remote_address
limiter = Limiter( app, key_func=get_remote_address, default_limits=["5 per minute"] )
@app.route('/login', methods=['GET', 'POST']) @limiter.limit("5 per minute") def login(): # ... (كود تسجيل الدخول)
**الحماية من هجمات CSRF (باستخدام Flask-WTF):
from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect(app)
# في قالب HTML
<form method="POST" action="/login">
{{ form.csrf_token }}
# ... (بقية عناصر النموذج)
</form>
--
* استخدام HTTPS:
- يتم توفير HTTPS تلقائيًا على خدمات مثل Heroku و PythonAnywhere.
- للاستخدام المحلي، يمكنك استخدام خادم تطوير Flask مع شهادة SSL محلية.
* تحديث المكتبات :
pip install --upgrade <اسم_المكتبة>
--
* إضافة ميزات أمان إضافية :
* المصادقة الثنائية (2FA): يمكنك استخدام مكتبات مثل Flask-Security-Too.
* سياسة كلمات المرور القوية: يمكنك إضافة منطق للتحقق من قوة كلمات المرور.
* تسجيل الدخول باستخدام OAuth: يمكنك استخدام مكتبات مثل Authlib.
** ملاحظات :
* يجب استبدال `your_email@gmail.com` و `your_password` و
`your_twilio_account_sid` و `your_twilio_auth_token` و
`your_twilio_phone_number` بالقيم الحقيقية.
* يجب تخزين كلمات المرور الحساسة بشكل آمن، مثل استخدام متغيرات البيئة.
* يجب إجراء اختبارات أمان شاملة للتأكد من أن التطبيق آمن.
* باستخدام بايثون ومكتبتي schedule و playsound، يمكنك
بناء تطبيق تذكير بالمواعيد بسيط وفعال. يتطلب ذلك فهمًا جيدًا لأساسيات
برمجة بايثون واستخدام الأدوات المناسبة.