مشروع quran_data
يوفر بيانات شاملة عن القرآن الكريم، بما في ذلك السور، الآيات، والصوتيات. يوفر المشروع قواعد البيانات بصيغ متعددة مثل JSON وCSV وSQLite، ويشمل أيضًا واجهة برمجة تطبيقات (API) لعرض هذه المعلومات وتسهيل الوصول إليها.
📂 quran_data
│
├── 📂 server
│ ├── 📂 controllers
│ │ └── surahController.mjs # مسؤول عن معالجة الطلبات المتعلقة بالسور والآيات.
│ ├── 📂 middleware
│ │ └── rateLimiter.mjs # إدارة الحد من عدد الطلبات لتحسين الأداء والأمان.
│ ├── 📂 routes
│ │ └── apiRoutes.mjs # تعريف المسارات الخاصة بواجهة برمجة التطبيقات (API).
│ ├── 📂 utils
│ │ ├── errorHandler.mjs # معالجة الأخطاء في تطبيق الويب.
│ │ ├── errorUtils.mjs # أدوات مساعدة لمعالجة الأخطاء.
│ │ └── notFoundHandler.mjs # معالجة المسارات غير المعروفة.
│ ├── config.mjs # إعدادات التكوين الخاصة بالتطبيق.
│ └── server.js # نقطة الدخول للتطبيق وتشغيل الخادم.
│
├── 📂 data
│ ├── mainDataQuran.json # البيانات الرئيسية المتعلقة بالقرآن الكريم.
│ ├── pagesQuran.json # بيانات صفحات القرآن الكريم
│ ├── 📂 json
│ │ ├── metadata.json # بيانات تعريفية حول السور.
│ │ ├── 📂 surah
│ │ │ └── surah_1.json # بيانات السور بشكل مفصل.
│ │ ├── 📂 verses
│ │ │ └── 001_001.json # بيانات الآيات لكل سورة.
│ │ ├── 📂 audio
│ │ │ └── audio_surah_1.json # بيانات الصوتيات لكل سورة.
│ │ └── ...
│ ├── 📂 sqlite
│ │ ├── database.sqlite # قاعدة البيانات بصيغة SQLite.
│ └── 📂 csv
│ └── database.csv # قاعدة البيانات بصيغة CSV.
├── 📂 scripts
│ ├── jsonToCsv.mjs # سكربت لتحويل بيانات JSON إلى CSV.
│ ├── jsonToSqlite.mjs # سكربت لتحويل بيانات JSON إلى SQLite.
│ └── splitData.mjs # سكربت لتقسيم البيانات الكبيرة إلى ملفات أصغر.
│
├── 📂 docs
│ └── api_documentation.md # توثيق واجهة برمجة التطبيقات (API).
│
└── 📄 README.md
-
تثبيت التبعيات:
تأكد من أنك في المجلد الرئيسي للمشروع ثم قم بتثبيت التبعيات باستخدام npm:
npm install
-
تشغيل الخادم:
لتشغيل الخادم، استخدم الأمر التالي:
npm start
سيتم تشغيل الخادم على المنفذ المحدد في ملف
config.mjs
. -
تشغيل السكربتات:
لتحويل بيانات JSON إلى CSV أو SQLite، استخدم السكربتات الموجودة في مجلد
scripts
. على سبيل المثال:node scripts/jsonToCsv.mjs
node scripts/jsonToSqlite.mjs
يحتوي على بيانات مفصلة عن السور والآيات بما في ذلك النصوص، عدد الآيات، عدد الكلمات، عدد الحروف، الصوتيات، والمزيد. الهيكل العام للبيانات هو كما يلي:
[
{
"number": 0, // رقم السورة
"name": {
"ar": "", // الاسم بالعربية
"en": "", // الاسم بالإنجليزية
"transliteration": "" // الاسم بالنقل الصوتي
},
"revelation_place": {
"ar": "", // مكان النزول بالعربية
"en": "" // مكان النزول بالإنجليزية
},
"verses_count": 0, // عدد الآيات في السورة
"words_count": 0, // عدد الكلمات في السورة
"letters_count": 0, // عدد الحروف في السورة
"verses": [
{
"number": 0, // رقم الآية في السورة
"text": {
"ar": "", // النص بالعربية
"en": "" // النص بالإنجليزية
},
"juz": 0, // الجزء الذي تنتمي إليه الآية
"page": 0, // رقم الصفحة التي تظهر فيها الآية
"sajda": false // معلومات حول السجدة
}
],
"audio": [
{
"id": 0, // معرف التسجيل الصوتي
"reciter": {
"ar": "", // اسم القارئ بالعربية
"en": "" // اسم القارئ بالإنجليزية
},
"rewaya": {
"ar": "", // الرواية بالعربية
"en": "" // الرواية بالإنجليزية
},
"server": "", // اسم الخادم
"link": "" // رابط التسجيل الصوتي
}
]
}
]
لمزيد من المعلومات حول كيفية استخدام واجهة برمجة التطبيقات، راجع الصفحة.
- الخادم المحلي:
http://localhost:5000/api
- النقطة:
/surahs
- الطريقة:
GET
- الوصف: استرجاع قائمة بجميع السور في القرآن.
curl -X GET "http://localhost:5000/api/surahs"
{
"success": true,
"result": [
{
"number": 1,
"name": {
"ar": "الفاتحة",
"en": "The Opening",
"transliteration": "Al-Fatihah"
},
"revelation_place": {
"ar": "مكية",
"en": "Meccan"
},
"verses_count": 7,
"words_count": 29,
"letters_count": 139
}
]
}
- النقطة:
/surah
- الطريقة:
GET
- الوصف: استرجاع سورة معينة باستخدام معرف (ID) السورة.
surah_id
(إجباري) - معرف السورة.
curl -X GET "http://localhost:5000/api/surah?surah_id=1"
or
curl -X GET "http://localhost:5000/api/surah/1"
{
"success": true,
"result": {
"number": 1,
"name": {
"ar": "الفاتحة",
"en": "The Opening",
"transliteration": "Al-Fatihah"
},
"verses_count": 7,
"audio": [
{
"id": 1,
"reciter": {
"ar": "أحمد الحواشي",
"en": "Ahmed Al-Hawashi"
},
"link": "https://server11.mp3quran.net/hawashi/001.mp3"
}
]
}
}
- النقطة:
/verses
- الطريقة:
GET
- الوصف: استرجاع جميع الآيات الخاصة بسورة معينة.
surah_id
(إجباري) - معرف السورة.
curl -X GET "http://localhost:5000/api/verses?surah_id=1"
or
curl -X GET "http://localhost:5000/api/verses/1"
{
"success": true,
"result": [
{
"number": 1,
"text": {
"ar": "الٓمٓ",
"en": "Alif, Lam, Meem"
},
"juz": 1,
"page": 2
}
]
}
- النقطة:
/sajda
- الطريقة:
GET
- الوصف: استرجاع قائمة بالآيات التي تحتوي على مواضع سجدة.
curl -X GET "http://localhost:5000/api/sajda"
{
"success": true,
"result": [
{
"number": 15,
"text": {
"ar": "وَلِلَّهِۤ يَسۡجُدُۤ...",
"en": "And to Allah prostrates..."
},
"sajda": {
"id": 2,
"recommended": true
}
}
]
}
- النقطة:
/audio
- الطريقة:
GET
- الوصف: استرجاع التسجيل الصوتي لسورة معينة.
surah_id
(إجباري) - معرف السورة.
curl -X GET "http://localhost:5000/api/audio?surah_id=1"
or
curl -X GET "http://localhost:5000/api/audio/1"
{
"success": true,
"result": [
{
"id": 1,
"reciter": {
"ar": "أحمد الحواشي",
"en": "Ahmed Al-Hawashi"
},
"link": "https://server11.mp3quran.net/hawashi/001.mp3"
}
]
}
- النقطة:
/pages
- الطريقة:
GET
- الوصف: استرجاع معلومات الصفحات التي تحتوي على سورة معينة أو آية محددة. يمكن تحديد السورة فقط، أو السورة والآية معًا للحصول على الصفحة الدقيقة.
surah_id
معرف السورة.verse_id
معرف الآية.page
رقم الصفحة.
استرجاع الصفحات بناءً على معرف السورة:
curl -X GET "http://localhost:5000/api/pages/2"
or
curl -X GET "http://localhost:5000/api/pages?surah_id=2"
استرجاع الصفحة بناءً على السورة والآية:
curl -X GET "http://localhost:5000/api/pages?surah_id=2&verse_id=15"
or
curl -X GET "http://localhost:5000/api/pages/2/15"
استرجاع الصفحة بناءً على رقم الصفحة:
curl -X GET "http://localhost:5000/api/pages?page=604"
{
"success": true,
"result": {
"page": 5,
"image": {
"url": "/data/quran_image/5.png"
},
"start": {
"surah_number": 2,
"verse": 25,
"name": {
"ar": "البقرة",
"en": "The Cow",
"transliteration": "Al-Baqarah"
}
},
"end": {
"surah_number": 2,
"verse": 29,
"name": {
"ar": "البقرة",
"en": "The Cow",
"transliteration": "Al-Baqarah"
}
}
}
}
يوفر quran_data
دعمًا لتشغيله داخل حاوية Docker. اتبع الخطوات أدناه لبناء الصورة وتشغيل الحاوية.
-
تأكد من تثبيت Docker:
تأكد من أنك قد قمت بتثبيت Docker على جهازك. يمكنك تنزيله وتثبيته من موقع Docker الرسمي.
-
بناء صورة Docker:
انتقل إلى جذر مشروعك ثم استخدم الأمر التالي لبناء الصورة:
docker build -t quran_data .
-
تشغيل حاوية Docker:
بعد بناء الصورة، يمكنك تشغيل الحاوية باستخدام الأمر التالي:
docker run -d -p 3000:5000 -e PORT=5000 -e API_RATE_LIMIT=300 --name quran_data_container quran_data
-d
: تشغيل الحاوية في الخلفية.-p 3000:5000
: تعيين المنفذ 5000 في الحاوية إلى المنفذ 3000 على جهازك.--name quran_data_container
: تعيين اسم للحاوية.
-
الوصول إلى التطبيق:
يمكنك الوصول إلى التطبيق عبر متصفح الويب باستخدام العنوان التالي:
http://localhost:5000
لإيقاف الحاوية، استخدم الأمر التالي:
docker stop quran_data_container
إذا كنت ترغب في حذف الحاوية والصورة، استخدم الأوامر التالية:
docker rm quran_data_container
docker rmi quran_data
إذا كنت ترغب في المساهمة في هذا المشروع، يرجى فتح طلبات سحب (Pull Requests) عبر GitHub وتقديم اقتراحاتك أو التعديلات التي ترغب في إضافتها.
يتم ترخيص هذا المشروع تحت رخصة MIT.
- مثال على الواجهة quran-data
للهم أجعل هذا العمل صدقه جاريه لي ولوالدي ولأهل بيتي ولكل مسلم ساهم او دعم او نشر هذه المشروع 🤲🏻