https://github.com/AhmedElTabarani/dorar-hadith-api
API وسيط للـدرر السنية
https://github.com/AhmedElTabarani/dorar-hadith-api
api hadith islamic search
Last synced: 4 months ago
JSON representation
API وسيط للـدرر السنية
- Host: GitHub
- URL: https://github.com/AhmedElTabarani/dorar-hadith-api
- Owner: AhmedElTabarani
- License: mit
- Created: 2022-04-08T00:12:29.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2026-02-08T09:42:46.000Z (4 months ago)
- Last Synced: 2026-02-08T16:12:11.419Z (4 months ago)
- Topics: api, hadith, islamic, search
- Language: JavaScript
- Homepage:
- Size: 654 KB
- Stars: 102
- Watchers: 6
- Forks: 29
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-islamic-open-source-apps - dorar-hadith-api
README
# Dorar.net Hadith API
السلام عليكم ورحمة الله وبركاته
منذ مدة حاولت استعمال الـ `API` الخاص [بالدرر السنية](https://dorar.net/article/389/%D8%AE%D8%AF%D9%85%D8%A9-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D9%88%D8%B3%D9%88%D8%B9%D8%A9-%D8%A7%D9%84%D8%AD%D8%AF%D9%8A%D8%AB%D9%8A%D8%A9-API)
لكنني واجهت بعض الصعوبات منها أن الـ `API` يتعامل مع [JSONP](https://en.wikipedia.org/wiki/JSONP) فقط وأيضًا لن تستطيع التعامل معه بالطرق العادية بسبب الـ [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)
وإن نجحت بتجنب الـ `CORS` باستعمال `JSONP` فتحصل على الناتج بهيئة `HTML`
وأيضًا لا يوجد `documentation` أو مستند ما يشرح تفاصيل هذا الـ `API` وكيفية التعامل معه
فأنا قررت عمل `API` وسيط يتجنب مشكلة `CORS` ويعطيك البيانات كهيئة `JSON`
بجانب شرح مفصل للـ `API` وكيفية استخدامه
بالاضافة إلى احتواءه على بعض الخصائص الإضافية التي لا توجد في الـ `API` الرسمي
## تنبيه
- يتم عمل `cache` لكل عملية بحث لمدة `5` ثواني
- هناك حد للاستخدام: `100` عملية بحث في اليوم لكل `IP`
> يمكنك تعديلهم من ملف [config.js](./config/config.js)
## تشغيل الـ API
1. عمل `fork` أو `clone` لهذا المشروع
2. تثبيت الـ `dependencies`
```bash
npm install
```
3. أنشئ ملف `.env` (يمكنك نسخه من `.env.example`) وعدّل المتغيرات مثل `PORT` حسب الحاجة
ملاحظة: يتم تحميل `.env` تلقائيًا عند تشغيل السيرفر عبر `dotenv`
4. تفقد ملف [config.js](./config/config.js) وقم بتعديل ما تريده
5. تشغيل الـ `API`
```bash
npm start
```
6. الـ `API` سيكون متوفر على الرابط التالي (افتراضيًا إن لم تغيّر `PORT`):
```bash
http://localhost:5000
```
7. استخدمه على `localhost` كما تريد أو ارفعه على استضافة أو سيرفر خاص بك
## Documentation
### Postman
الرابط: [Postman](https://www.postman.com/crimson-robot-408440/workspace/hadith-api/collection/14391446-6a1c5404-cc59-4d59-933d-c07547ee75ca?action=share&creator=14391446)
- استعمل `Postman` لتعرف كيف تتعامل مع الـ `API` وترى أمثلة عليه
- قم بعمل `fork` للـ `collection` لتستخدمه كما تريد
- لا تنس تغير الـ `environment` إلى `dev` ويمكنك تغير الرابط الخاص بالمتغير `{{url}}` ان كنت قد غيرته أو غيرت الـ `port`
### OpenAPI v3 (Swagger)
## وثائق API
لعرض وثائق `API` التفاعلية:
1. قم بتشغيل الـ `Server`:
```bash
npm run dev
```
2. افتح المتصفح وانتقل إلى:
```
http://localhost:5000/api-docs
```
ستجد هنا واجهة `Swagger UI` التي تتيح لك استكشاف جميع نقاط النهاية المتاحة واختبار الـ `API` مباشرة من المتصفح
### Endpoints
يحتوي الـ `API` على مجموعة من الـ `endpoint`
- عندما يبدأ الـ `endpoint` بـ `/api` فهو هكذا يبحث عن طريق الـ `API` الرسمي الخاص بالدرر السنية
- عندما يبدأ الـ `endpoint` بـ `/site` فهو هكذا يبحث عن طريق صفحة البحث الخاص بالدرر السنية
- ردود الـ `site` تحتوي على حقل **`categories`** (التصنيف الموضوعي) لكل حديث: مصفوفة من `{ id, name }` من موقع الدرر
#### /v1/api/hadith/search?value={text}
للبحث عن الأحاديث يعطي `15` نتيجة
شكل الرد كـ `JSON`
```json
{
"metadata": {
"length": "عدد نتائج البحث",
"page": "رقم الصفحة",
"removeHTML": "هل عناصر الـ HTML ممسوحة أم لا",
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": [
{
"hadith": "الحديث",
"rawi": "الراوي",
"mohdith": "المحدث",
"book": "الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة"
}
]
}
```
#### /v1/site/hadith/search?value={text}
للبحث عن الأحاديث يعطي `30` نتيجة
شكل الرد كـ `JSON`
```json
{
"metadata": {
"length": "عدد نتائج البحث",
"page": "رقم الصفحة",
"removeHTML": "هل عناصر الـ HTML ممسوحة أم لا",
"specialist": "نوع الاحاديث هل هي للمتخصصين أم لا",
"numberOfNonSpecialist": "عدد الأحاديث لغير المتخصصين",
"numberOfSpecialist": "عدد الأحاديث للمتخصصين",
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": [
{
"hadith": "الحديث",
"rawi": "الراوي",
"mohdith": "المحدث",
"mohdithId": "رقم المحدث",
"book": "الكتاب",
"bookId": "رقم الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة",
"explainGrade": "توضيح درجة الصحة",
"takhrij": "تخريج الحديث في كتب أخرى",
"hadithId": "رقم الحديث لاستخدامه في البحث عن الأحاديث البديلة أو الحديث البديل الصحيح",
"categories": [
{
"id": "رقم التصنيف",
"name": "اسم التصنيف"
}
],
"hasSimilarHadith": "هل الحديث له أحاديث مشابهة أم لا",
"hasAlternateHadithSahih": "هل الحديث له حديث صحيح بديل أم لا",
"hasUsulHadith": "هل الحديث له أصول أم لا",
"similarHadithDorar": "رابط الأحاديث المشابهة في موقع الدرر",
"alternateHadithSahihDorar": "رابط الحديث الصحيح في موقع الدرر",
"usulHadithDorar": "رابط أصول الحديث في موقع الدرر",
"urlToGetSimilarHadith": "رابط لكي تبحث عن الأحاديث المشابهة",
"urlToGetAlternateHadithSahih": "رابط لكي تبحث عن الحديث الصحيح",
"urlToGetUsulHadith": "رابط لكي تبحث عن أصول الحديث",
"hasSharhMetadata": "هل الحديث له شرح أم لا",
"sharhMetadata": {
"id": "رقم الشرح",
"isContainSharh": "هل يحتوى هذا الرد على شرح الحديث أم لا؟",
"urlToGetSharh": "رابط لكي تبحث عن شرح الحديث"
}
}
]
}
```
#### /v1/site/hadith/similar/:id
يحضر لك أحاديث مشابهة المقابلة للـ `id`
شكل الرد كـ `JSON`
```json
{
"metadata": {
"length": "عدد نتائج البحث",
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": [
{
"hadith": "الحديث",
"rawi": "الراوي",
"mohdith": "المحدث",
"mohdithId": "رقم المحدث",
"book": "الكتاب",
"bookId": "رقم الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة",
"explainGrade": "توضيح درجة الصحة",
"hadithId": "رقم الحديث لاستخدامه في البحث عن الأحاديث البديلة أو الحديث البديل الصحيح",
"categories": [
{
"id": "رقم التصنيف",
"name": "اسم التصنيف"
}
],
"hasSimilarHadith": "هل الحديث له أحاديث مشابهة أم لا",
"hasAlternateHadithSahih": "هل الحديث له حديث صحيح بديل أم لا",
"hasUsulHadith": "هل الحديث له أصول أم لا",
"similarHadithDorar": "رابط الأحاديث المشابهة في موقع الدرر",
"alternateHadithSahihDorar": "رابط الحديث الصحيح في موقع الدرر",
"usulHadithDorar": "رابط أصول الحديث في موقع الدرر",
"urlToGetSimilarHadith": "رابط لكي تبحث عن الأحاديث المشابهة",
"urlToGetAlternateHadithSahih": "رابط لكي تبحث عن الحديث الصحيح",
"urlToGetUsulHadith": "رابط لكي تبحث عن أصول الحديث",
"hasSharhMetadata": "هل الحديث له شرح أم لا",
"sharhMetadata": {
"id": "رقم الشرح",
"isContainSharh": "هل يحتوى هذا الرد على شرح الحديث أم لا؟",
"urlToGetSharh": "رابط لكي تبحث عن شرح الحديث"
}
}
]
}
```
#### /v1/site/hadith/:id
يحضر لك الحديث المقابل للـ `id`
شكل الرد كـ `JSON`
```json
{
"metadata": {
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": {
"hadith": "الحديث",
"rawi": "الراوي",
"mohdith": "المحدث",
"mohdithId": "رقم المحدث",
"book": "الكتاب",
"bookId": "رقم الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة",
"explainGrade": "توضيح درجة الصحة",
"hadithId": "رقم الحديث لاستخدامه في البحث عن الأحاديث البديلة أو الحديث البديل الصحيح",
"categories": [
{
"id": "رقم التصنيف",
"name": "اسم التصنيف"
}
],
"hasSimilarHadith": "هل الحديث له أحاديث مشابهة أم لا",
"hasAlternateHadithSahih": "هل الحديث له حديث صحيح بديل أم لا",
"hasUsulHadith": "هل الحديث له أصول أم لا",
"similarHadithDorar": "رابط الأحاديث المشابهة في موقع الدرر",
"alternateHadithSahihDorar": "رابط الحديث الصحيح في موقع الدرر",
"usulHadithDorar": "رابط أصول الحديث في موقع الدرر",
"urlToGetSimilarHadith": "رابط لكي تبحث عن الأحاديث المشابهة",
"urlToGetAlternateHadithSahih": "رابط لكي تبحث عن الحديث الصحيح",
"urlToGetUsulHadith": "رابط لكي تبحث عن أصول الحديث",
"hasSharhMetadata": "هل الحديث له شرح أم لا",
"sharhMetadata": {
"id": "رقم الشرح",
"isContainSharh": "هل يحتوى هذا الرد على شرح الحديث أم لا؟",
"urlToGetSharh": "رابط لكي تبحث عن شرح الحديث"
}
}
}
```
#### /v1/site/hadith/alternate/:id
يحضر لك الحديث الصحيح المقابل للـ `id`
شكل الرد كـ `JSON`
```json
{
"metadata": {
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": {
"hadith": "الحديث",
"rawi": "الراوي",
"mohdith": "المحدث",
"mohdithId": "رقم المحدث",
"book": "الكتاب",
"bookId": "رقم الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة",
"hadithId": "رقم الحديث لاستخدامه في البحث عن الأحاديث البديلة أو الحديث البديل الصحيح",
"categories": [
{
"id": "رقم التصنيف",
"name": "اسم التصنيف"
}
],
"hasSimilarHadith": "هل الحديث له أحاديث مشابهة أم لا",
"hasAlternateHadithSahih": "هل الحديث له حديث صحيح بديل أم لا",
"similarHadithDorar": "رابط الأحاديث المشابهة في موقع الدرر",
"urlToGetSimilarHadith": "رابط لكي تبحث عن الأحاديث المشابهة",
"hasSharhMetadata": "هل الحديث له شرح أم لا",
"sharhMetadata": {
"id": "رقم الشرح",
"isContainSharh": "هل يحتوى هذا الرد على شرح الحديث أم لا؟",
"urlToGetSharh": "رابط لكي تبحث عن شرح الحديث"
}
}
}
```
#### /v1/site/hadith/usul/:id
يحضر لك أصول الحديث وطرق إخراجه للـ `id` المعطى
شكل الرد كـ `JSON`
```json
{
"metadata": {
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": {
"hadith": "الحديث الأساسي",
"rawi": "الراوي",
"mohdith": "المحدث",
"mohdithId": "رقم المحدث",
"book": "الكتاب",
"bookId": "رقم الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة",
"explainGrade": "توضيح درجة الصحة",
"hadithId": "رقم الحديث",
"categories": [
{
"id": "رقم التصنيف",
"name": "اسم التصنيف"
}
],
"hasSimilarHadith": "هل الحديث له أحاديث مشابهة أم لا",
"hasAlternateHadithSahih": "هل الحديث له حديث صحيح بديل أم لا",
"hasUsulHadith": "هل الحديث له أصول أم لا",
"usulHadith": {
"sources": [
{
"source": "مصدر الحديث مع الصفحة",
"chain": "سلسلة الرواة",
"hadithText": "نص الحديث"
}
],
"count": "عدد المصادر"
}
}
}
```
#### /v1/site/sharh/:id
للبحث عن شرح لحديث واحد عن طريق الـ `id`
شكل الرد كـ `JSON`
```json
{
"metadata": {
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": {
"hadith": "الحديث",
"rawi": "الراوي",
"mohdith": "المحدث",
"book": "الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة",
"takhrij": "تخريج الحديث في كتب أخرى",
"hasSharhMetadata": "هل الحديث له شرح أم لا",
"sharhMetadata": {
"id": "رقم الشرح",
"isContainSharh": "هل يحتوى هذا الرد على شرح الحديث أم لا؟",
"urlToGetSharh": "رابط لكي تبحث عن شرح الحديث",
"sharh": "شرح الحديث"
}
}
}
```
#### /v1/site/sharh/text/:text
للبحث عن شرح لحديث واحد عن طريقة النص المعطى
شكل الرد كـ `JSON`
```json
{
"metadata": {
"specialist": "نوع الاحاديث هل هي للمتخصصين أم لا",
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": {
"hadith": "الحديث",
"rawi": "الراوي",
"mohdith": "المحدث",
"book": "الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة",
"takhrij": "تخريج الحديث في كتب أخرى",
"hasSharhMetadata": "هل الحديث له شرح أم لا",
"sharhMetadata": {
"id": "رقم الشرح",
"isContainSharh": "هل يحتوى هذا الرد على شرح الحديث أم لا؟",
"urlToGetSharh": "رابط لكي تبحث عن شرح الحديث",
"sharh": "شرح الحديث"
}
}
}
```
#### /v1/site/sharh/search?value={text}
للبحث عن شرح للأحاديث يعطي `30` نتيجة
شكل الرد كـ `JSON`
```json
{
"metadata": {
"length": "عدد نتائج البحث",
"page": "رقم الصفحة",
"removeHTML": "هل عناصر الـ HTML ممسوحة أم لا",
"specialist": "نوع الاحاديث هل هي للمتخصصين أم لا",
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": [
{
"hadith": "الحديث",
"rawi": "الراوي",
"mohdith": "المحدث",
"book": "الكتاب",
"numberOrPage": "رقم الحديث او الصفحة",
"grade": "درجة الصحة",
"takhrij": "تخريج الحديث في كتب أخرى",
"hasSharhMetadata": "هل الحديث له شرح أم لا",
"sharhMetadata": {
"id": "رقم الشرح",
"isContainSharh": "هل يحتوى هذا الرد على شرح الحديث أم لا؟",
"urlToGetSharh": "رابط لكي تبحث عن شرح الحديث",
"sharh": "شرح الحديث"
}
}
]
}
```
#### /v1/site/mohdith/:id
للبحث عن معلومات عن المحدث عن طريق الـ `id`
شكل الرد كـ `JSON`
```json
{
"metadata": {
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": {
"name": "المحدث",
"mohdithId": "رقم المحدث",
"info": "معلومات عن المحدث"
}
}
```
#### /v1/site/book/:id
للبحث عن معلومات عن الكتاب عن طريق الـ `id`
شكل الرد كـ `JSON`
```json
{
"metadata": {
"isCached": "هل هذه النتائج من الـ cache أم لا"
},
"data": {
"name": "الكتاب",
"bookId": "رقم الكتاب",
"author": "المؤلف",
"reviewer": "المراجع",
"publisher": "دار النشر",
"edition": "رقم الطبعة",
"editionYear": "سنة الطبعة"
}
}
```
### Query
عناصر الـ `query` التي يمكنك استخدامها
مع شرح تفصيلي أسفل الجدول
| key | الوصف |
| :----------------------------: | :---------------------------------------------: |
| `value` | وهي محتوى نص الحديث المراد البحث عنه |
| `page` | لتحديد الصفحة التي تريدها |
| `removehtml` | حذف عناصر الـ `HTML` في الحديث |
| `specialist` | تستخدم لتحدد نوع الاحاديث هل هي للمتخصصين أم لا |
| `xclude` | كلمة أو جملة تريد استبعادها من البحث |
| `st` | تحدد طريقة البحث |
| `t` | تحديد نطاق البحث |
| `d[]` | تحديد درجة الحديث سواء صحيح ام ضعيف |
| `m[]` | تحديد اسماء المحدثين التي تريدهم |
| `s[]` | تحديد الكتب التي تريد البحث فيها |
| `rawi[]` | تحديد اسماء الرواة التي تريدهم |
- هذه الاقواس `[]` تفيد ان هذا العنصر يقبل اكثر من اختيار
#### value
- محتوى نص الحديث المراد البحث عنه
- مثال: `/v1/api/hadith/search?value=جملة البحث`
هكذا سيبحث بناءًا على جملة البحث
#### page
- لتحديد الصفحة التي تريدها
- مثال: `/v1/api/hadith/search?value=جملة البحث&page=1`
هكذا سيبحث في نتائج البحث للصفحة الثالثة أي المجموعة الثالثة لنتائج البحث
- القيمة الافتراضية ستكون الصفحة رقم واحد `page=1`
#### removehtml
- حذف عناصر الـ `HTML` في الحديث
مثل `...`
- مثال: `/v1/api/hadith/search?value=جملة البحث&removehtml=true`
هكذا سيمسح عناصر الـ `HTML` من نتائج البحث
- القيمة الافتراضي هي `true`
#### specialist
- تستخدم لتحدد نوع الاحاديث هل هي للمتخصصين أم لا
- قيمها هي `true` للمتخصصين و `false` لغير المتخصصين
- مثال: `/v1/api/hadith/search?value=جملة البحث&specialist=true`
سيعطيك أحاديث أكثر ومختلفة خاصة للمتخصصين
وتكون بها معلومة اضافية مثل تخريج الأحاديث في الكتب الأخرى
- القيمة الافتراضية هي `false`
#### xclude
- كلمة أو جملة تريد استبعادها من البحث مثال
- مثال: `/v1/api/hadith/search?value=جملة البحث&xclude=اليهود`
هكذا سيستبعد كلمة `اليهود` من البحث
#### st
- تحدد طريقة البحث بثلاثة خيارات فقط
- هذه الطرق هي: `جميع الكلمات`، `أي كلمة`، `بحث مطابق`
- قيمها هي: `w`, `a`, `p`
للبحث بـ `جميع الكلمات` فستكون `st=w`
للبحث بـ `أي كلمة` فستكون `st=a`
للبحث بـ `بحث مطابق` فستكون `st=p`
- مثال: `/v1/api/hadith/search?value=جملة البحث&st=p`
هكذا سيبحث بشكل مطابق لجملة البحث
[كل القيم وطرق البحث التي تمثلها](./data/method-search.txt)
أو يمكنك الحصول عليها كملف `JSON` من [هنا](./data/method-search.json)
#### t
- تحديد نطاق البحث
- هذه النطاقات هي: `جميع الأحاديث`، `الأحاديث المرفوعة`، `الأحاديث القدسية`، `آثار الصحابة`، `شروح الأحاديث`
- قيمها هي: `*`, `0`, `1`, `2`, `3`
للبحث عن `جميع الأحاديث` فستكون `t=*`
للبحث عن `الأحاديث المرفوعة` فستكون `t=0`
للبحث عن `الأحاديث القدسية` فستكون `t=1`
للبحث عن `آثار الصحابة` فستكون `t=2`
للبحث عن `شروح الأحاديث` فستكون `t=3`
- مثال: `/v1/api/hadith/search?value=جملة البحث&t=1`
هكذا سيبحث فقط عن الأحاديث القدسية المطابق لجملة البحث
[كل القيم ونطاقات البحث التي تمثلها](./data/zone-search.txt)
أو يمكنك الحصول عليها كملف `JSON` من [هنا](./data/zone-search.json)
#### d[]
- تحديد درجة الحديث سواء صحيح ام ضعيف
- قيمها هي: `0`، `1`، `2`، `3`، `4`
للبحث عن `جميع الدرجات` فستكون `d[]=0`
للبحث عن `أحاديث حكم المحدثون عليها بالصحة` فستكون `d[]=1`
للبحث عن `أحاديث حكم المحدثون على أسانيدها بالصحة` فستكون `d[]=2`
للبحث عن `أحاديث حكم المحدثون عليها بالضعف` فستكون `d[]=3`
للبحث عن `أحاديث حكم المحدثون على أسانيدها بالضعف` فستكون `d[]=4`
- مثال: `/v1/api/hadith/search?value=جملة البحث&d[]=3`
هكذا سيبحث فقط عن الأحاديث المحكوم عليها بالضعف
- يمكنك تحديد اكثر من اختيار
مثال: `/v1/api/hadith/search?value=جملة البحث&d[]=1&d[]=2`
هكذا سيبحث فقط عن الأحاديث المحكوم عليها بالصحة من ناحية المتن و الاسناد
[كل القيم والدرجات التي تمثلها](./data/degree.txt)
أو يمكنك الحصول عليها كملف `JSON` من [هنا](./data/degree.json)
#### m[]
- تحديد اسماء المحدثين التي تريدهم
- قيمها متعددة ومنها: `0`، `179`، `204`، `256`، `261` ... إلخ
حيث `0` تمثل `جميع المحدثين`
و`179` تمثل `الإمام المالك`
و`204` تمثل `الإمام الشافعي`
و`256` تمثل `البخاري`
و`261` تمثل `مسلم`
- مثال: `/v1/api/hadith/search?value=جملة البحث&m[]=179`
هكذا سيبحث فقط عن الأحاديث التي حدث بها الإمام مالك
- يمكنك تحديد اكثر من اختيار
مثال: `/v1/api/hadith/search?value=جملة البحث&m[]=256&m[]=261`
هكذا سيبحث فقط عن الأحاديث التي حدثا بها بخاري ومسلم
[كل القيم وأسماء المحدثين التي تمثلها](./data/mohdith.txt)
أو يمكنك الحصول عليها كملف `JSON` من [هنا](./data/mohdith.json)
#### s[]
- تحديد الكتب التي تريد البحث فيها
- قيمها متعددة ومنها: `0`، `13457`، `6216`، `3088`، `96` ... إلخ
حيث `0` تمثل `جميع المحدثين`
و`13457` تمثل `الأربعون النووية`
و`6216` تمثل `صحيح البخاري`
و`3088` تمثل `صحيح مسلم`
و`96` تمثل `الصحيح المسند`
- مثال: `/v1/api/hadith/search?value=جملة البحث&s[]=96`
هكذا سيبحث فقط عن الأحاديث الواردة في كتاب الصحيح المسند
- يمكنك تحديد اكثر من اختيار
مثال: `/v1/api/hadith/search?value=جملة البحث&s[]=6216&s[]=13457`
هكذا سيبحث فقط عن الأحاديث التي وردت في كتابي الأربعون النووية وكتاب صحيح البخاري
[كل القيم وأسماء الكتب التي تمثلها](./data/book.txt)
أو يمكنك الحصول عليها كملف `JSON` من [هنا](./data/book.json)
#### rawi[]
- تحديد اسماء الرواة التي تريدهم
- قيمها متعددة ومنها: `0`،`1819`، `8918`، `2664` ... إلخ
حيث `0` تمثل `جميع الرواة`
حيث `1819` تمثل `أسماء بنت أبي بكر`
و`8918` تمثل `عمر بن الخطاب`
و`2664` تمثل `ابن عباس`
- مثال: `/v1/api/hadith/search?value=جملة البحث&rawi[]=1819`
هكذا سيبحث فقط عن الأحاديث التي رواتها أسماء بنت أبي بكر
- يمكنك تحديد اكثر من اختيار
مثال: `/v1/api/hadith/search?value=جملة البحث&rawi[]=8918&rawi[]=2664`
هكذا سيبحث فقط عن الأحاديث التي رواها عمر بن الخطاب وابن عباس
- هنا قيم ترمز لأكثر من شخص في آن واحد
مثل `2665` ترمز لـ `ابن عباس أو أبو هريرة`
و`8924` ترمز لـ `عمر بن الخطاب وأبو هريرة`
و`264` ترمز لـ `أبو الدرداء وأبو أمامة وعبدالله بن عمر وابن عباس وجابر بن عبدالله`
[كل القيم وأسماء الرواة التي تمثلها](./data/rawi.txt)
أو يمكنك الحصول عليها كملف `JSON` من [هنا](./data/rawi.json)
### Data
كل البيانات المتاحة والقيم التي تمثلها يمكنكم الحصول عليه من هذه الـ `endpoints`
```json
[
{
"endpoint": "/v1/data/book",
"description": "احضار كل الكتب المتاحة",
"abstractResponse": [
{
"key": "الكلمة المفتاحية",
"value": "القيمة"
}
]
},
{
"endpoint": "/v1/data/degree",
"description": "احضار كل درجات الحديث المتاحة",
"abstractResponse": [
{
"key": "الكلمة المفتاحية",
"value": "القيمة"
}
]
},
{
"endpoint": "/v1/data/methodSearch",
"description": "احضار كل طرق البحث المتاحة",
"abstractResponse": [
{
"key": "الكلمة المفتاحية",
"value": "القيمة"
}
]
},
{
"endpoint": "/v1/data/mohdith",
"description": "احضار كل المحدثين المتاحين",
"abstractResponse": [
{
"key": "الكلمة المفتاحية",
"value": "القيمة"
}
]
},
{
"endpoint": "/v1/data/rawi",
"description": "احضار كل الرواة المتاحين",
"abstractResponse": [
{
"key": "الكلمة المفتاحية",
"value": "القيمة"
}
]
},
{
"endpoint": "/v1/data/zoneSearch",
"description": "احضار كل نطاقات البحث المتاحة",
"abstractResponse": [
{
"key": "الكلمة المفتاحية",
"value": "القيمة"
}
]
}
]
```
## توجد مشكلة أو لديك اقتراح؟
افتح issue إذا قابلت مشكلة ما او لديك اقتراح
## المساهمة
بالطبع نرحب بأي مساهمة لدينا ❤