مشروع مفتوح المصدر يوفر قاعدة بيانات متعددة التنسيقات تشمل JSON، SQLite، وCSV، إضافةً إلى واجهة برمجة تطبيقات (API) مخصصة لتسهيل استخدام الأسئلة الشرعية في التطبيقات والمشاريع المختلفة.
- تقييم مستوى المعرفة بالعلوم الشرعية وتطوير الحصيلة العلمية.
- تقديم الأسئلة في مجالات مختلفة مع دعم الفئات والمواضيع المتنوعة.
- مرونة الاستخدام حيث يمكن للمطورين اختيار التنسيق الأنسب لمشاريعهم.
- الاستناد إلى إجابات موثوقة مقتبسة من موقع الدرر السنية.
- واجهة API سهلة الاستخدام لعرض الأسئلة، الفئات، والمواضيع.
- تنسيقات متعددة للبيانات (JSON، SQLite، وCSV) لسهولة التوافق مع التطبيقات المختلفة.
- تحكم في التصفح والبحث داخل الأسئلة.
- إمكانية تحديد عدد معين من الأسئلة العشوائية لمزيد من المرونة.
- حماية وأمان باستخدام Helmet وRate Limiting لتقليل المخاطر.
- Node.js (إصدار 18 أو أحدث)
- Git (في حال التنزيل من المستودع)
- إدارة الحزم باستخدام npm أو yarn
-
استنساخ المستودع
git clone https://github.com/rn0x/IslamicQuizAPI.git cd IslamicQuizAPI
-
تثبيت التبعات
npm install
-
إنشاء ملف البيئة (.env)
أنشئ ملف.env
في جذر المشروع وأضف المتغيرات التالية:PORT=3000 BODY_SIZE_LIMIT=10mb RATE_LIMIT_WINDOW_MS=3600000 # 1 ساعة RATE_LIMIT_MAX=500 # 500 طلب في الساعة
-
تشغيل المشروع في وضع التطوير
npm run dev
-
تشغيل المشروع في الوضع الإنتاجي
npm start
-
اختياري: تحويل البيانات
لتحويل بيانات JSON إلى SQLite وCSV:npm run db
يمكنك تشغيل مشروع IslamicQuizAPI داخل حاوية Docker لتبسيط عملية النشر والتوزيع. إليك الخطوات اللازمة لذلك:
قبل البدء، تأكد من أنك قد قمت بتثبيت:
- Docker على نظامك. يمكنك تحميله من الموقع الرسمي لـ Docker.
-
استنساخ المستودع
إذا لم تكن قد قمت بذلك بعد، استنساخ المستودع إلى جهازك:
git clone https://github.com/rn0x/IslamicQuizAPI.git cd IslamicQuizAPI
-
بناء صورة Docker
قم بإنشاء صورة Docker من ملف
Dockerfile
الموجود في المشروع:docker build -t islamic-quiz-api .
-t islamic-quiz-api
: هذا هو اسم الصورة التي ستقوم بإنشائها.
-
تشغيل حاوية Docker
بعد إنشاء الصورة، قم بتشغيلها باستخدام الأمر التالي:
docker run -p 3000:5000 islamic-quiz-api
-
-p 3000:5000
: يربط المنفذ 3000 على جهازك بالمنفذ 5000 داخل الحاوية.الجزء الأول
(3000): هذا هو المنفذ على جهازك المضيف (host).الجزء الثاني
(5000): هذا هو المنفذ الذي يستمع عليه التطبيق داخل الحاوية (container). -
--env-file .env
: يقوم بتحميل المتغيرات البيئية من ملف.env
ليتم استخدامها داخل الحاوية.
-
-
الوصول إلى واجهة API
بعد تشغيل الحاوية، يمكنك الوصول إلى واجهة API من خلال المتصفح أو باستخدام أدوات مثل Postman عبر الرابط التالي:
http://localhost:3000/api
-
تأكد من أن لديك Docker يعمل بشكل صحيح على نظامك قبل اتباع الخطوات.
-
يمكنك التحقق من حالة الحاويات قيد التشغيل باستخدام الأمر:
docker ps
-
إذا كنت ترغب في إيقاف الحاوية، يمكنك استخدام:
docker stop <container_id>
حيث
<container_id>
هو المعرف الخاص بالحاوية التي ترغب في إيقافها.
-
عرض جميع الفئات والمواضيع
GET /api/categories
الإستجابة:
[ { "id": 1, "arabicName": "التفسير", "englishName": "tafseer", "description": "فهم القرآن الكريم ومعرفة مقصوده من أسمى المقاصد, يقول الله تعالى {كِتَابٌ أَنزَلْنَاهُ إِلَيْكَ مُبَارَكٌ لِّيَدَّبَّرُوا آيَاتِهِ وَلِيَتَذَكَّرَ أُولُو الْأَلْبَابِ} ص:29", "topics": [] }, { "id": 2, "arabicName": "العقيدة", "englishName": "aqeedah", "description": "الإيمان بالله وملائكته وكتبه ورسله واليوم الآخر والقدر خيره وشره.", "topics": [] }, { "id": 3, "arabicName": "السيرة النبوية", "englishName": "sira", "description": "دراسة حياة الرسول محمد صلى الله عليه وسلم وأحداث حياته.", "topics": [] } ]
- id: معرف الفئة.
- arabicName: الاسم باللغة العربية.
- englishName: الاسم باللغة الإنجليزية.
- description: وصف مختصر للفئة.
- topics: قائمة المواضيع المرتبطة بهذه الفئة []
-
عرض جميع الأسئلة بصفحات محددة
GET /api/questions?page=1&limit=10
الإستجابة:
{ "page": 1, "limit": 10, "totalQuestions": 5820, "totalPages": 582, "questions": [ { "id": 1, "q": "من أسْماءِ سورةِ الفاتحةِ:", "link": "https://dorar.net/tafseer/1#tt1", "answers": [ { "answer": "فاتحةُ الكِتابِ", "t": 1 }, { "answer": "أمُّ السوَرِ", "t": 0 }, { "answer": "نورُ الهدايةِ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 2, "q": "ما هي أول سورة نزلت في القرآن؟", "link": "https://dorar.net/tafseer/2#tt1", "answers": [ { "answer": "العلق", "t": 1 }, { "answer": "الفاتحة", "t": 0 }, { "answer": "البقرة", "t": 0 } ], "category": "التفسير", "topic": "النزول" } // يمكن إضافة المزيد من الأسئلة هنا ] }
- page: رقم الصفحة الحالية.
- limit: عدد الأسئلة في الصفحة.
- totalQuestions: إجمالي عدد الأسئلة في قاعدة البيانات.
- totalPages: إجمالي عدد الصفحات المتاحة.
- questions: مصفوفة تحتوي على الأسئلة في الصفحة الحالية:
- id: معرف السؤال.
- q: نص السؤال.
- link: رابط للمزيد من التفاصيل حول السؤال.
- answers: مصفوفة تحتوي على الإجابات المحتملة:
- answer: نص الإجابة.
- t: قيمة تشير إلى ما إذا كانت الإجابة صحيحة (1) أو خاطئة (0).
- category: الفئة التي ينتمي إليها السؤال.
- topic: الموضوع المرتبط بالسؤال.
-
عرض مواضيع فئة معينة
GET /api/categories/1/topics
الإستجابة:
[ { "slug": "tahara", "name": "الطهارة" }, { "slug": "salah", "name": "الصلاة" }, { "slug": "zakah", "name": "الزكاة" }, { "slug": "siam", "name": "الصيام" }, { "slug": "hajj", "name": "الحج" }, { "slug": "figh-zina", "name": "اللباس والزينة" }, { "slug": "figh-atema", "name": "الأطعمة والأشربة" }, { "slug": "figh-said", "name": "التذكية والعقيقة والصيد" }, { "slug": "figh-nikah", "name": "النكاح" }, { "slug": "figh-talag", "name": "الطلاق" }, { "slug": "figh-iela", "name": "الخلع والإيلاء" }, { "slug": "ridaa", "name": "الرضاع والحضانة والنفقات" }, { "slug": "idah", "name": "اللعان والعدة" }, { "slug": "e-nozor", "name": "الأيمان والنذور" }, { "slug": "wagf", "name": "الوقف" }, { "slug": "wasaya", "name": "الوصايا" }, { "slug": "hibat", "name": "الهبات" } ]
- slug: معرف الموضوع باللغة الإنجليزية، يُستخدم غالبًا في الروابط.
- name: اسم الموضوع باللغة العربية.
-
جلب أسئلة عشوائية
GET /api/questions/random?count=5
الإستجابة:
[ { "id": 1, "q": "هِبةُ الوَديعةِ لِمَن هي عِندَه", "link": "https://www.dorar.net/feqhia/6634", "answers": [ { "answer": "لا تَجوزُ", "t": 0 }, { "answer": "تُكرَهُ", "t": 0 }, { "answer": "تَجوزُ", "t": 1 } ], "category": "الفقه", "topic": "الهبات" }, { "id": 17, "q": "قُرِئَ \"لِلْعَالِمِينَ\" بكسر اللَّامِ في قَولِه تَعالَى: {إِنَّ فِي ذَلِكَ لَآيَاتٍ لِلْعَالِمِينَ} أي:", "link": "https://www.dorar.net/tafseer/30/4#tt4", "answers": [ { "answer": "عَالمُ الأَرضِ وعَالَمُ السَّماءِ", "t": 0 }, { "answer": "أَحبارُ اليَهُودِ", "t": 0 }, { "answer": "جَمع عالِمٍ", "t": 1 } ], "category": "التفسير", "topic": "الروم" }, { "id": 10, "q": "معنى قولِه: {نَادِيكُمُ}:", "link": "https://dorar.net/tafseer/29/9", "answers": [ { "answer": "قَريَتُكم", "t": 0 }, { "answer": "بُستَانُكم", "t": 0 }, { "answer": "مَجلِسُكُم", "t": 1 } ], "category": "التفسير", "topic": "العنكبوت" }, { "id": 18, "q": "مَن كَذَب على رَسولِ اللهِ ﷺ في تَحليلِ حَرامٍ أو عَكسِه، فهو:", "link": "https://www.dorar.net/aqeeda/2939", "answers": [ { "answer": "مُنافِقٌ مَعلومُ النِّفاِق", "t": 0 }, { "answer": "مُسلِمٌ مُرتكِبٌ لكَبيرةٍ", "t": 0 }, { "answer": "كافِرٌ خارِجٌ منَ المِلَّةِ", "t": 1 } ], "category": "العقيدة", "topic": "نواقض الإيمان" }, { "id": 6, "q": "مَعنَى \"زَاغَتْ\" في قَولِه تعالى: {أَمْ زَاغَتْ عَنْهُمُ الْأَبْصَارُ}: ", "link": "https://dorar.net/tafseer/38/11", "answers": [ { "answer": "عَمِيَت", "t": 0 }, { "answer": "تَعالَت وتَكبَّرَت", "t": 0 }, { "answer": "عدَلتْ ومالَتْ", "t": 1 } ], "category": "التفسير", "topic": "ص" } ]
- id: معرف السؤال.
- q: نص السؤال.
- link: رابط إلى مزيد من المعلومات حول السؤال.
- answers: قائمة بالإجابات المحتملة:
- answer: نص الإجابة.
- t: تشير إلى ما إذا كانت الإجابة صحيحة (1) أم لا (0).
- category: الفئة التي ينتمي إليها السؤال.
- topic: الموضوع المحدد للسؤال.
-
البحث في الأسئلة عبر النص
GET /api/search?q=الصلاة
الإستجابة:
[ { "id": 5, "q": "قُدِّمت الصلاةُ على الزكاةِ في قولِه تَعالَى: {الَّذِينَ يُقِيمُونَ الصَّلَاةَ وَيُؤْتُونَ الزَّكَاةَ}:", "link": "https://www.dorar.net/tafseer/31/1", "answers": [ { "answer": "لأنَّها أوَّلُ ما فُرِضَ مِن فَرائضِ الإسلامِ", "t": 0 }, { "answer": "لأنَّ الصَّلاةَ نَفعُها لازِمٌ، والزَّكاةَ نفعُها مُتعَدٍّ للغيرِ", "t": 0 }, { "answer": "لأنَّها أحبُّ الأعْمالِ إلى اللهِ تَعالَى ", "t": 1 } ], "category": "التفسير", "topic": "لقمان" }, { "id": 20, "q": "قال اللهُ تعالَى: {إِنَّمَا تُنْذِرُ الَّذِينَ يَخْشَوْنَ رَبَّهُمْ بِالْغَيْبِ وَأَقَامُوا الصَّلَاةَ} فيه فَضيلةُ الصلاةِ؛ وأنَّها سببٌ لـ:", "link": "https://dorar.net/tafseer/35/5", "answers": [ { "answer": "مُضاعفَةِ الأَجرِ", "t": 0 }, { "answer": "الكَفِّ عن الشَّهَواتِ", "t": 0 }, { "answer": "الانتفاعِ بإنذارِ النَّبِيِّ صلَّى الله عليه وسلَّم", "t": 1 } ], "category": "التفسير", "topic": "فاطر" }, { "id": 19, "q": "القَهْقَهةُ (الضَّحِكُ) في الصلاةِ", "link": "https://www.dorar.net/feqhia/443", "answers": [ { "answer": "لا تَنقُضُ الوُضوءَ، وإنْ كانت تُفسِدُ الصلاةَ", "t": 1 }, { "answer": "تَنقُضُ الوُضوءَ ولا تَنقُضُ الصلاةَ", "t": 0 }, { "answer": "تَنقُضُ الوُضوءَ والصلاةَ", "t": 0 } ], "category": "الفقه", "topic": "الطهارة" }, { "id": 8, "q": "أصدرَتِ الحكومةُ التركيةُ برئاسةِ مصطفى كمال أتاتورك قرارًا حكوميًّا سنةَ 1353هـ 1934م بتوقُّفِ الصلاةِ في:", "link": "https://www.dorar.net/history/?page=255", "answers": [ { "answer": "جامعِ الفاتِحِ", "t": 0 }, { "answer": "جامعِ أيوب سُلطان", "t": 0 }, { "answer": "جامِعِ آيا صُوفْيا", "t": 1 } ], "category": "التاريخ", "topic": "التاريخ المعاصر" } ]
- id: معرف السؤال.
- q: نص السؤال.
- link: رابط إلى مزيد من المعلومات حول السؤال.
- answers: قائمة بالإجابات المحتملة:
- answer: نص الإجابة.
- t: تشير إلى ما إذا كانت الإجابة صحيحة (1) أم لا (0).
- category: الفئة التي ينتمي إليها السؤال.
- topic: الموضوع المحدد للسؤال.
-
عرض جميع الأسئلة لفئة معينة
GET /api/categories/1/questions?page=1&limit=10
الإستجابة:
{ "page": 1, "limit": 10, "totalQuestions": 2400, "totalPages": 240, "questions": [ { "id": 1, "q": "من أسْماءِ سورةِ الفاتحةِ:", "link": "https://dorar.net/tafseer/1#tt1", "answers": [ { "answer": "فاتحةُ الكِتابِ", "t": 1 }, { "answer": "أمُّ السوَرِ", "t": 0 }, { "answer": "نورُ الهدايةِ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 2, "q": "من فَضائلِها", "link": "https://dorar.net/tafseer/1#tt1", "answers": [ { "answer": "حُصولُ السَّعةُ في الرِّزقِ", "t": 0 }, { "answer": "حُصولُ المناجاةِ في الصَّلاةِ بينَ العَبدِ وربِّه", "t": 1 }, { "answer": "النَّجاةُ من عَذابِ القَبرِ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 3, "q": "من خَصائصِ سورةِ الفاتحةِ", "link": "https://dorar.net/tafseer/1#tt1", "answers": [ { "answer": "أنَّه لا صَلاةَ لِمَن لم يَقْرأْ بها", "t": 1 }, { "answer": "أنَّها تعصِمُ من فِتنةِ الدجَّالِ", "t": 0 }, { "answer": "أنَّ قِراءَتَها تَفتحُ أَبوابَ الخيرِ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 4, "q": "من فَضائلِ سورةِ الفاتحةِ", "link": "https://dorar.net/tafseer/1#tt2", "answers": [ { "answer": "أنَّها تُعينُ على قيامِ الليلِ", "t": 0 }, { "answer": "أنَّها رُقْيةٌ شافيةٌ", "t": 1 }, { "answer": "أنَّها تَزيدُ في الرِّزقِ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 5, "q": "معنى الربِّ هو:", "link": "https://www.dorar.net/tafseer/1/1#tt7", "answers": [ { "answer": "المُستحِقُّ للحَمدِ", "t": 0 }, { "answer": "الذي لا يُعبَدُ سِواهُ", "t": 0 }, { "answer": "السيِّدُ، والمالِكُ، والمصلِحُ، والصَّاحبُ، والمُرَبِّي، والخالِقُ", "t": 1 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 6, "q": "المقصودُ بالضَّالِّينَ في قولِه تعالى: {غَيْرِ الْمَغْضُوبِ عَلَيْهِمْ وَلَا الضَّالِّينَ} هُم:", "link": "https://www.dorar.net/tafseer/1/1#tt4", "answers": [ { "answer": "المرتَدُّونَ الذين آمنُوا ثم كَفرُوا فطَبعَ اللهُ على قُلوبِهم", "t": 0 }, { "answer": "النَّصارى ومَن سلَك طريقتَهم ممَّن جهِلوا الحقَّ، فعبَدوا اللهَ تعالى بغَيرِ عِلمٍ", "t": 1 }, { "answer": "الذين قال الله فيهم: {الَّذِينَ ضَلَّ سَعْيُهُمْ فِي الْحَيَاةِ الدُّنْيَا وَهُمْ يَحْسَبُونَ أَنَّهُمْ يُحْسِنُونَ صُنْعًا}", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 7, "q": "مِن صِفاتِ الذينَ أنعَمَ اللهُ تعالى عليهمُ المذكورةِ في سورةِ الفاتحةِ:", "link": "https://dorar.net/tafseer/1/1#tt7", "answers": [ { "answer": "أنَّهم لَيسوا كاليَهودِ", "t": 1 }, { "answer": "أنَّهم منَ الصَّابِرينَ", "t": 0 }, { "answer": "أنَّهم لَيسوا منَ المنافِقينَ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 8, "q": "الرَّحْمَنِ الرَّحِيمِ:", "link": "https://www.dorar.net/tafseer/1/1#tt4", "answers": [ { "answer": "اسْمانِ مُشتَقَّانِ منَ الرَّحمةِ على وَجهِ المُبالَغةِ، والرَحيمٌ أشَدُّ مُبالَغةً من الرَحمنَ", "t": 0 }, { "answer": "اسْمانِ مُشتَقَّانِ منَ الرَّحمةِ على وَجهِ المُبالَغةِ، والرَحمنُ تدُلُّ على الرَحيمٍ، دونَ فَرقٍ بَينَهما", "t": 0 }, { "answer": "اسْمانِ مُشتَقَّانِ منَ الرَّحمةِ على وَجهِ المُبالَغةِ، والرَحمنُ أشدُّ مُبالَغةً من الرَحيمٍ", "t": 1 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 9, "q": "معنى: {مَالِكِ يَوْمِ الدِّينِ}", "link": "https://dorar.net/tafseer/1/1#tt4", "answers": [ { "answer": "المتصرِّفُ في جميعِ خلْقِه بالفِعلِ فقطْ", "t": 0 }, { "answer": "المتصرِّفُ في جميعِ خلْقِه بالقَولِ فقطْ", "t": 0 }, { "answer": "المتصرِّفُ في جميعِ خلْقِه بالقَولِ والفِعلِ", "t": 1 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 10, "q": "في قولُه صلَّى اللهُ عليه وسلَّمَ: \"وما يُدْريكَ أنَّها رُقْيةٌ؟\" يُقصَدُ بها:", "link": "https://dorar.net/tafseer/1#tt1", "answers": [ { "answer": "المعوِّذتان", "t": 0 }, { "answer": "سورةُ الفاتحة", "t": 1 }, { "answer": "سورةُ الإخْلاص", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" } ] }
- page: رقم الصفحة الحالية.
- limit: عدد الأسئلة في الصفحة.
- totalQuestions: إجمالي عدد الأسئلة.
- totalPages: إجمالي عدد الصفحات.
- questions: قائمة الأسئلة:
- id: معرف السؤال.
- q: نص السؤال.
- link: رابط لمزيد من المعلومات حول السؤال.
- answers: قائمة بالإجابات المحتملة:
- answer: نص الإجابة.
- t: تشير إلى ما إذا كانت الإجابة صحيحة (1) أم لا (0).
- category: الفئة التي ينتمي إليها السؤال.
- topic: الموضوع المحدد للسؤال.
-
عرض جميع الأسئلة لموضوع معين
GET /api/categories/1/topics/some-topic/questions
الإستجابة:
[ { "id": 1, "q": "من أسْماءِ سورةِ الفاتحةِ:", "link": "https://dorar.net/tafseer/1#tt1", "answers": [ { "answer": "فاتحةُ الكِتابِ", "t": 1 }, { "answer": "أمُّ السوَرِ", "t": 0 }, { "answer": "نورُ الهدايةِ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 2, "q": "من فَضائلِها", "link": "https://dorar.net/tafseer/1#tt1", "answers": [ { "answer": "حُصولُ السَّعةُ في الرِّزقِ", "t": 0 }, { "answer": "حُصولُ المناجاةِ في الصَّلاةِ بينَ العَبدِ وربِّه", "t": 1 }, { "answer": "النَّجاةُ من عَذابِ القَبرِ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" }, { "id": 3, "q": "من خَصائصِ سورةِ الفاتحةِ", "link": "https://dorar.net/tafseer/1#tt1", "answers": [ { "answer": "أنَّه لا صَلاةَ لِمَن لم يَقْرأْ بها", "t": 1 }, { "answer": "أنَّها تعصِمُ من فِتنةِ الدجَّالِ", "t": 0 }, { "answer": "أنَّ قِراءَتَها تَفتحُ أَبوابَ الخيرِ", "t": 0 } ], "category": "التفسير", "topic": "الفاتحة" } ]
- id: معرف السؤال.
- q: نص السؤال.
- link: رابط لمزيد من المعلومات حول السؤال.
- answers: قائمة بالإجابات المحتملة:
- answer: نص الإجابة.
- t: تشير إلى ما إذا كانت الإجابة صحيحة (1) أم لا (0).
- category: الفئة التي ينتمي إليها السؤال.
- topic: الموضوع المحدد للسؤال.
IslamicQuizAPI/
│
├── database/ # يحتوي على ملفات JSON SQLITE C
│
├── src/ # مجلد المصدر الرئيسي
│ ├── routes/ # يحتوي على تعريف المسارات والوظائف
│ │ └── quizRoutes.mjs
│ ├── logger.mjs # ملف تسجيل الأخطاء والعمليات
│ └── index.mjs # ملف الدخول الرئيسي للتطبيق
│
├── unused/ # يحتوي على سكربتات وملفات غير مستخدمة
│
├── .env # ملف إعداد المتغيرات البيئية
├── package.json # تعريف المشروع والتبعيات
└── README.md # التوثيق
- Express: لإنشاء السيرفر.
- Helmet: لتعزيز أمان التطبيق.
- Rate Limiting: لتحديد عدد الطلبات لكل IP.
- CORS: للسماح بالوصول عبر مصادر متعددة.
- fs-extra: للتعامل مع ملفات JSON.
- dotenv: لتحميل المتغيرات البيئية.
- better-sqlite3: لتحويل البيانات إلى SQLite.
- json2csv: لتحويل البيانات إلى CSV.
- قم بعمل Fork من المشروع.
- أنشئ فرعًا جديدًا باستخدام:
git checkout -b feature/new-feature
- أضف تعديلاتك وقدم طلب سحب (Pull Request).
هذا المشروع مرخص تحت رخصة MIT، مما يسمح بالاستخدام المفتوح والتعديل بحرية.
رابط المشروع على GitHub:
IslamicQuizAPI - GitHub
dorar.net | جميع البيانات ماخوذه من موقع معلمة الدرر
لا تنسنا من دعوة صالحة بظهر الغيب 🤲