مستندات API رهگنج
REST API فقطخواندنی برای دسترسی به بیانات، مخاطبین، کلیدواژهها و وظایف. احراز هویت با توکن bearer، محدودیت نرخ، خروجی JSON استاندارد.
دانلود OpenAPI 3.1شروع سریع
- از مدیر سامانه یک توکن API با scope مناسب دریافت کنید.
- توکن را در هدر
Authorization: Bearer …یاX-API-Keyارسال کنید. - ابتدا endpoint
/healthرا بدون توکن آزمایش کنید تا از اتصال مطمئن شوید.
احراز هویت
توکنها با پیشوند rgj_live_ صادر میشوند و فقط یک بار در لحظه ساخت نمایش داده میشوند. مقدار خام هرگز در دیتابیس نگهداری نمیشود (فقط hash).
curl -H "Authorization: Bearer rgj_live_..." \
"https://rahganj.ir/api/public/v1/speeches?size=5"محدودیت نرخ
هر کلید سقف دقیقه/روز مستقل دارد. پاسخها هدرهای X-RateLimit-Limit، X-RateLimit-Remaining و X-RateLimit-Reset را ارسال میکنند. در صورت عبور، پاسخ 429 با هدر Retry-After دریافت میکنید.
قالب پاسخ / خطا
// موفق
{ "data": {...}, "meta": { "request_id": "...", "page": 1, "size": 20, "total": 137 } }
// خطا
{ "error": { "code": "invalid_token", "message": "...", "request_id": "..." } }کدهای خطا: missing_token، invalid_token، revoked_token، expired_token، insufficient_scope، rate_limited، invalid_query، not_found، internal_error.
مرجع Endpointها
/healthscope: —بررسی سلامت سرویس. بدون نیاز به توکن.
/speechesscope: read:speechesفهرست بیانات با صفحهبندی و جستوجو.
| پارامتر | نوع | توضیح |
|---|---|---|
page | int | شماره صفحه (پیشفرض ۱) |
size | int | اندازه صفحه (حداکثر ۱۰۰) |
q | string | جستوجو در عنوان |
year | int | سال شمسی |
/speeches/{id}scope: read:speechesجزئیات یک سخنرانی شامل پاراگرافها، مخاطبین و کلیدواژهها.
/audiencesscope: read:audiencesفهرست همه مخاطبین با شمارش وظایف و بیانات.
/audiences/{id}/tasksscope: read:tasksوظایف مربوط به یک مخاطب.
| پارامتر | نوع | توضیح |
|---|---|---|
page | int | شماره صفحه |
size | int | اندازه صفحه |
/tagsscope: read:tagsفهرست کلیدواژهها با شمارش بیانات.
/tasksscope: read:tasksفهرست وظایف با جستوجو، فیلتر مخاطب و صفحهبندی.
| پارامتر | نوع | توضیح |
|---|---|---|
q | string | جستوجو در متن |
audience_id | uuid | فیلتر مخاطب |
featured | bool | فقط وظایف برگزیده |
page | int | شماره صفحه |
size | int | اندازه صفحه |
/tasks/featuredscope: read:featuredوظایف برگزیده توسط ادمین.
| پارامتر | نوع | توضیح |
|---|---|---|
limit | int | حداکثر ۵۰ (پیشفرض ۱۰) |
/tasks/randomscope: read:tasksیک وظیفهٔ تصادفی — مناسب «وظیفه روز» در باتها.
| پارامتر | نوع | توضیح |
|---|---|---|
audience_id | uuid | فقط از این مخاطب |
featured | bool | فقط از وظایف برگزیده |
/speeches/randomscope: read:speechesیک سخنرانی تصادفی.
| پارامتر | نوع | توضیح |
|---|---|---|
year | int | فقط از این سال شمسی |
/today-in-historyscope: read:speechesبیانات مطابق روز شمسی جاری (یا تاریخ دلخواه) در سالهای مختلف.
| پارامتر | نوع | توضیح |
|---|---|---|
date | string | قالب YYYY/MM/DD شمسی (اختیاری) |
limit | int | حداکثر ۵۰ |
include | string | با include=paragraphs متن پاراگرافها هم میآید |
/searchscope: read:publicجستوجوی ترکیبی روی بیانات و وظایف.
| پارامتر | نوع | توضیح |
|---|---|---|
q | string | عبارت جستوجو (الزامی) |
limit | int | حداکثر ۵۰ |
بهترین روشها برای مصرف
- توکن را فقط در سمت سرور نگهداری کنید (متغیر محیطی)، نه در مرورگر یا کد کلاینتی.
- پاسخهای عمومی هدر
Cache-Controlباs-maxageبرمیگردانند؛ آنها را کش کنید تا با هر درخواست بات یک کوئری تازه ایجاد نکنید. - روی
429از هدرRetry-Afterو backoff نمایی استفاده کنید. بیشتر از ۴ بار تلاش نکنید. - برای «وظیفهٔ روز» از
/tasks/random?featured=trueاستفاده کنید (سبک و بدون کش). - برای متن آمادهٔ ارسال در پیامرسانها از
/today-in-history?include=paragraphs&limit=1استفاده کنید.
// Node/TS client with retry + Retry-After
export async function rahganjFetch(path: string) {
const url = `https://rahganj.ir/api/public/v1${path}`;
for (let attempt = 0; attempt < 4; attempt++) {
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.RAHGANJ_API_KEY!}` },
});
if (res.status === 429 || res.status >= 500) {
const wait = Number(res.headers.get("retry-after") ?? 2 ** attempt);
await new Promise((r) => setTimeout(r, wait * 1000));
continue;
}
if (!res.ok) throw new Error(`Rahganj ${res.status}: ${await res.text()}`);
return await res.json();
}
throw new Error("Rahganj: too many retries");
}Playground
توکن فقط در مرورگر شما استفاده میشود و ذخیره نمیگردد.
