كيف تصنع نظام تنبيهات فورية لمباريات كرة القدم والكريكيت باستخدام API وTelegram



مقدمة

هل تود متابعة المباريات المهمة فورًا على هاتفك أو مجموعتك في تيليجرام دون فتح تطبيقات متعددة؟ في هذا الدليل العملي ستتعلم خطوة بخطوة كيفية بناء نظام بسيط وموثوق لإرسال تنبيهات فورية (Notifications) لمباريات كرة القدم والكريكيت باستخدام مزود بيانات (Sports API) وبوت تيليجرام. الطريقة مناسبة للمشجعين، المدونين، أو أي شخص يريد إشعارات مُخصصة للمباريات.

ما الذي ستحتاجه قبل البدء

  • حساب لدى مزود بيانات رياضية (Sports API) يدعم كرة القدم أو الكريكيت—تحقق من توثيق الواجهة (API docs) وتوقيت التحديثات ومعدل الطلبات (rate limits).
  • بوت تيليجرام واحد على الأقل (ستحصل على TOKEN عند إنشاء البوت).
  • بيئة لتشغيل السكربت بشكل مستمر أو مجدول (خادم VPS، خدمة استضافة مثل Replit/Render/Heroku، أو GitHub Actions cron).
  • معرفة أساسية بالبرمجة (مثال سنستخدم بايثون، لكن يمكنك تنفيذ الفكرة بلغة أخرى).

نظرة عامة على الحل

الفكرة الأساسية بسيطة:

  • نستعلم بانتظام من مزود بيانات المباريات عن المباريات الجارية أو النتائج.
  • نحلل الاستجابة ونقرر متى نرسل تنبيهاً (بداية المباراة، الهدف، نهاية الشوط، نتيجة نهائية... حسب تفضيلك).
  • نرسل رسالة إلى تيليجرام عبر واجهة Bot API.

اختيار مزود بيانات (Checklist)

  • سرعة التحديث (real-time أو تأخير دقائق).
  • الدعم لمنافسات كرة القدم أو الكريكيت التي تهمك.
  • سهولة الاستخدام وتوفر أمثلة استجابة JSON واضحة.
  • قيود السعر ومعدل الطلبات.
  • وسائل تصفية النتائج (حسب الدوري، الفريق، نوع المباراة).

خطوات عملية لبناء النظام

1. التسجيل والحصول على مفتاح API

سجل في مزوّد بيانات رياضية واطلع على توثيق الواجهات. انسخ مفتاح الـ API (API Key) واحتفظ به في متغيرات بيئية Environment Variables بدلاً من تضمينه في الكود.

2. إنشاء بوت تيليجرام والحصول على TOKEN

افتح محادثة مع @BotFather على تيليجرام، اتبع التعليمات لإنشاء بوت جديد، واحصل على TOKEN. لاحقًا ستحتاج إلى chat_id للمستخدم أو القناة/المجموعة التي سترسل إليها الرسائل.

3. كتابة سكربت بايثون بسيط (نموذجي)

في المثال التالي نوضح سكربت بسيط يطلب بيانات من API كل 60 ثانية ويُرسل رسالة عند اكتشاف مباراة مباشرة جديدة. عدّل أسماء الحقول حسب مزوّد البيانات الذي تستخدمه.

import requests
import time
import os

API_URL = "https://api.example.com/matches?status=live&api_key=YOUR_API_KEY"
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")  # ضع التوكن في متغير بيئي
CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")      # أو رقم المجموعة/المستخدم

notified = set()  # لتجنب التكرار

def fetch_live_matches():
    r = requests.get(API_URL, timeout=10)
    r.raise_for_status()
    return r.json()  # تفصيل الحقول يختلف حسب المزود

def send_telegram(message):
    url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
    payload = {"chat_id": CHAT_ID, "text": message, "parse_mode": "HTML"}
    requests.post(url, data=payload)

def format_match(m):
    # عدّل الحقول حسب استجابة API
    home = m.get("home_team", "Home")
    away = m.get("away_team", "Away")
    score = m.get("score", "N/A")
    minute = m.get("minute", "")
    return f"🔔 {home} vs {away}\nScore: {score}\nTime: {minute}"

def main():
    while True:
        try:
            data = fetch_live_matches()
            matches = data.get("matches", [])  # تحقق من هيكل JSON الحقيقي
            for m in matches:
                match_id = m.get("id")
                status = m.get("status")  # مثال: "LIVE"
                if status == "LIVE" and match_id not in notified:
                    msg = format_match(m)
                    send_telegram(msg)
                    notified.add(match_id)
        except Exception as e:
            print("Error:", e)
        time.sleep(60)

if __name__ == "__main__":
    main()

ملاحظات:

  • هيكل الاستجابة (JSON) يختلف بين مزودي البيانات؛ اطلع على التوثيق وعدّل أسماء الحقول في الدالة format_match.
  • استخدم متغيرات بيئية لتخزين المفاتيح الحساسة.
  • لتحسين الكفاءة يمكنك اكتشاف تغييرات الحالة (مثلاً إرسال تنبيه عند كل هدف أو عند تغيير النتيجة) بدلاً من إشعار عند البداية فقط.

4. تشغيل السكربت بشكل دائم أو مجدول

خيارات الاستضافة والتشغيل:

  • خادم VPS وتشغيل السكربت كخدمة systemd.
  • خدمات استضافة مجانية/رخيصة مثل Replit، Render، أو Heroku (تحقق من سياسات التشغيل وخيارات الصمود).
  • بدائل مجدولة: استخدام GitHub Actions مع مهمة cron لتشغيل استعلام متكرر وإرسال إشعار عند التغيير.

بديل بدون كود: استخدام IFTTT أو Zapier

إذا كنت تفضّل عدم كتابة كود يمكنك استخدام خدمات مثل IFTTT أو Zapier:

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

نصائح عملية لتحسين النظام

  • احترس من قيود الـ rate limit: قلّل تكرار الاستعلامات أو اشترِ خطة مناسبة.
  • أضف فلترة ذكية: إرسال إشعارات فقط للمباريات التي تهمك (فرق، دوريات، مرحلة)، أو للأحداث المهمة (أهداف، إنذارات حرجة، نهاية المباراة).
  • استخدم التنسيق الجيد في الرسائل (Emoji واستخدام HTML أو Markdown في تيليجرام) لزيادة الوضوح.
  • تعامل مع فروق التوقيت (Timezones) لتعرض الوقت الصحيح لمتابعيك.
  • سجل الأخطاء (logging) واحرص على استغلال حالات الفشل لإعادة المحاولة أو إرسال إشعار إلى مشرف النظام.
  • لو كانت الخدمة مهمة جداً، فكر في حلّ ثنائي (احتياطي) لمصدر البيانات أو مضيف آخر لضمان الاستمرارية.

أمثلة استخدام متقدمة

  • دمج تنبيهات المباريات مع تقويم جوجل (Google Calendar) لإضافة الأحداث تلقائيًا.
  • إنشاء لوحة إحصائيات بسيطة تعرض نتائج مباشرة على صفحة ويب باستخدام WebSockets لتحديث الواجهة.
  • إضافة تحليل بسيط باستخدام نماذج لتوقع نتيجة المباراة لاحقًا (يتطلب بيانات تاريخية ونموذج تعلم آلي منفصل).

الأسئلة الشائعة (FAQ)

هل يمكن استخدام نفس الفكرة لإرسال إشعارات للأحداث الرياضية الأخرى؟

نعم، نفس النمط يُطبق على أي رياضة طالما مزود البيانات يدعمها: كرة سلة، تنس، إلخ.

هل تيليجرام هو الخيار الوحيد للإشعارات؟

لا، يمكنك إرسال إشعارات إلى واتساب (باستخدام واجهات مدفوعة)، سلاك، إيميل، أو إشعارات دفع عبر خدمات مثل Pushover أو OneSignal.

الخلاصة

بناء نظام تنبيهات فورية للمباريات عملية عملية ومباشرة: سجل لدى مزود بيانات رياضية موثوق، أنشئ بوت تيليجرام، اكتب سكربت بسيط يتحقق من حالة المباريات ويُرسل رسائل عند وقوع أحداث مهمة، ثم شغله على بيئة تستمر في العمل. احرص على احترام قيود الـ API، استخدام متغيرات بيئية لحماية المفاتيح، وتحسين الفلاتر لتقليل الضجيج وزيادة الفاعلية.

أحدث أقدم

نموذج الاتصال