عن المشروع
NK Omladinac Niza هو مستودع الموقع الرسمي لنادي كرة القدم الذي يحمل الاسم نفسه من نيزا، بلدية كوشكا. تم بناء الموقع باستخدام Astro وTailwind CSS v4 وTypeScript، ويُستضاف على GitHub Pages. والمصدر المباشر للبيانات الرياضية هو HNS Semafor.
الميزة الرئيسية هي التحديث الآلي للمحتوى. تقوم ثلاث أدوات كشط ومصدر يدوي واحد بتعبئة البيانات:
1. HNS Semafor (البيانات الرياضية) — يستخدم السكربت scripts/scrape.mjs محلل Cheerio لاستخراج اسم النادي، والملعب، والعنوان، والشعار، والمنافسة والموسم الحاليين، وجدول الدوري بالكامل مع الشعارات والنتائج الأخيرة، وجميع مباريات الموسم من جميع المسابقات، الدوري والكأس، وتفاصيل المباريات المُلعوبة: التشكيلات، الأهداف، البطاقات، الحكام، وعدد الحضور، بالإضافة إلى اللاعبين مع الصور والأرقام والمراكز وإحصائيات المشاركات، وقوائم ترتيب الهدافين والبطاقات والأكثر مشاركة. تُكشط جميع المسابقات التي يشارك فيها النادي حسب الفئة العمرية، الكبار والمبتدئون تحت 11 سنة، وتأتي قائمة المسابقات عبر معالج getCompetitions الخاص بـ Semafor. تكون النتيجة في الملف src/data/hns.json مع بيانات لكل مسابقة وعرض موحد للفريق الأول.
2. أخبار فيسبوك — يستخدم scripts/scrape-facebook.mjs إصدار Graph API v21.0 لجلب أحدث المنشورات من صفحة @omladinacniza. تُنزَّل الصور محليًا لأن روابط CDN الخاصة بفيسبوك تنتهي صلاحيتها خلال أسبوع إلى أسبوعين. يلزم وجود إعدادي GitHub Secrets السريين FB_PAGE_ID وFB_ACCESS_TOKEN.
3. ألبومات فيسبوك، المعرض — يجلب scripts/scrape-facebook-albums.mjs جميع الألبومات وبيانات الصور الوصفية، مع حصة لكل سنة تقويمية عبر FB_PHOTOS_PER_YEAR، والقيمة الافتراضية 200. لكل صورة، تُحفظ صورة مصغرة WebP بحجم 500 بكسل مع أبعادها؛ تعرض الشبكة الصورة المصغرة، بينما يعرض العارض المنبثق الصورة الأصلية. تُستثنى صور الملف الشخصي والغلاف.
4. المباريات الودية — الملف الوحيد الذي يجوز تحريره يدويًا هو src/data/friendlies.json، مع إرشادات في الملف friendlies.README.md؛ ويمكن تحريره أيضًا من الهاتف عبر GitHub.
لا تكتب أدوات الكشط الملفات إلا عند تغيّر المحتوى، لذا لا تنشئ عمليات التزام ونشر غير ضرورية. يعمل سير عمل GitHub Action المسمى scrape-and-deploy.yml وفق جدول زمني كل 30 دقيقة، وعند كل دفع إلى الفرع main، وكذلك يدويًا. يشغّل أدوات الكشط الثلاث جميعها، ثم يلتزم بالتغييرات، ثم يعيد البناء والنشر؛ ولا تقوم مهمة البناء عمدًا بالكشط مرة أخرى حتى لا يختلف الموقع المنشور عن المستودع.
يتضمن هيكل المشروع مكونات مثل Header وFooter والبطاقات والجدول، وتخطيطًا مع إعدادات SEO وOG وfavicon وmanifest وRSS وView Transitions، ومكتبات للمسار الأساسي، والمباريات الموحدة، وتصريف الأرقام الكرواتية، وتنسيق منشورات فيسبوك. كما يتضمن صفحات: صفحات .astro ثابتة، وملفات تعريف اللاعبين، وتفاصيل المباريات، وصور OG ديناميكية لكل مباراة باستخدام satori وresvg، وخلاصة RSS، وجدولًا زمنيًا بتنسيق .ics للاشتراك، وبيان PWA manifest. تستخدم الأنماط Tailwind v4 @مع ألوان النادي والخطوط.
يتطلب التطوير المحلي Node.js 22.12 أو أحدث. تتضمن السكربتات خادم تطوير مع إعادة تحميل ساخنة، وscrape:hns، وscrape:facebook، وscrape:fb-albums، وscrape لتشغيل الثلاثة جميعًا، وthums لإنشاء الصور المصغرة WebP، وbuild الذي يقوم بالكشط تلقائيًا أولًا، وastro build بدون كشط، وcheck للتحقق من الأنواع، وpreview لمعاينة بنية الإنتاج.
يتم النشر على GitHub Pages عبر GitHub Actions، مع تهيئة النطاق omladinacniza.hr عبر الملف public/CNAME باستخدام deSEC DNS، بينما يتم ضبط SITE وBASE في الملف astro.config.mjs ويمكن تجاوزهما عبر المتغيرين ASTRO_SITE وASTRO_BASE. جميع محتويات النادي، بما في ذلك الشعار والصور والتاريخ، مملوكة لـ NK Omladinac Niza، والكود متاح مجانًا كإلهام للأندية الأخرى.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.