Jalali Calendar API

دریافت تعطیلات و رویدادهای تقویم جلالی با API

Jalali Calendar API یک رابط برنامه‌نویسی کاربردی (API) برای دریافت اطلاعات روزانه تقویم شمسی ایران است. با استفاده از این API می‌توانید اطلاعات یک روز مشخص از تقویم جلالی شامل وضعیت تعطیلی و لیست رویدادهای آن روز را در برنامه‌ها، وب‌سایت‌ها یا اپلیکیشن‌های خود دریافت کنید.

این API برای توسعه‌دهندگانی طراحی شده که نیاز دارند:

  • تعطیلات رسمی ایران را در سیستم خود نمایش دهند
  • رویدادهای تقویم جلالی را در اپلیکیشن‌ها استفاده کنند
  • در سایت‌های رزرو، فروشگاه یا سیستم‌های برنامه‌ریزی از تعطیلات مطلع شوند
  • تقویم شمسی را در پروژه‌های نرم‌افزاری ادغام کنند

ویژگی‌های Jalali Calendar API

  • دریافت اطلاعات یک روز از تقویم جلالی
  • تشخیص تعطیل یا کاری بودن روز
  • ارائه لیست رویدادهای مرتبط با آن روز
  • استفاده ساده از طریق REST API
  • قابل استفاده در PHP، JavaScript، Python و سایر زبان‌ها
مستندات API تقویم جلالی (MJC)
مستندات رسمی API

API تقویم جلالی (MJC) — سرور رویدادها

این مستند، قرارداد رسمی REST API برای دریافت اطلاعات روزانه تقویم جلالی، وضعیت تعطیلی، و فهرست رویدادها را ارائه می‌کند. تمامی مثال‌ها production-ready و قابل copy/paste هستند.

📌 نسخه API: v1 🧾 نسخه سند: 1.5.0 🌐 ارائه‌دهنده: pardazmaan.ir 🔒 پروتکل: HTTPS / JSON 🕓 آخرین بروزرسانی: تیر ۱۴۰۵
🔗 آدرس پایه (Base URL)

تمام درخواست‌ها باید به آدرس زیر ارسال شوند:

https://pardazmaan.ir/wp-json/mjc/v1
تمام ارتباطات فقط از طریق HTTPS پشتیبانی می‌شود. درخواست HTTP با خطای امنیتی رد می‌شود.
🔑 احراز هویت (Authentication)

ارسال API Key معتبر برای تمام endpoint ها الزامی است. اولویت روش‌ها:

1) هدر پیشنهادی
X-API-Key: mjc_your_api_key_here
2) هدر جایگزین
X-MJC-API-Key: mjc_your_api_key_here
3) Query String (فقط توسعه)
?api_key=mjc_your_api_key_here
هشدار امنیتی: API Key را هرگز در کلاینت عمومی (HTML/JS) قرار ندهید.
📦 قرارداد پاسخ (Response Contract)

برای یکنواختی، تمام پاسخ‌ها دارای ساختار استاندارد زیر هستند:

موفق
{
  "success": true,
  "data": {},
  "meta": {
    "request_id": "req_abc123",
    "version": "v1"
  }
}
خطا
{
  "success": false,
  "error": {
    "code": "invalid_parameter",
    "message": "پارامتر month باید بین 1 تا 12 باشد.",
    "details": { "month": 13 }
  },
  "meta": {
    "request_id": "req_abc123",
    "version": "v1"
  }
}
📡 Endpoint ها
GET /jalali/{year}/{month}/{day} اطلاعات یک روز

اطلاعات یک روز جلالی شامل وضعیت تعطیل و فهرست رویدادها را برمی‌گرداند.

پارامترنوعالزامیقوانین اعتبارسنجیمثال
yearintegerالزامیبین 1300 تا 14991405
monthintegerالزامیبین 1 تا 121
dayintegerالزامیوابسته به ماه/کبیسه (اعتبار تاریخ کامل بررسی می‌شود)1
expandintegerاختیاری0 یا 1؛ اگر 1 باشد metadata رویدادها برمی‌گرددexpand=1
نمونه درخواست
curl --request GET \
  --url "https://pardazmaan.ir/wp-json/mjc/v1/jalali/1405/1/1?expand=1" \
  --header "X-API-Key: mjc_your_api_key_here"
نمونه پاسخ موفق (200)
{
  "success": true,
  "data": {
    "date": "1405-01-01",
    "is_holiday": true,
    "events": [
      {
        "title": "آغاز نوروز",
        "type": "national",
        "is_holiday": true,
        "description": "",
        "source": "official_calendar"
      },
      {
        "title": "عید سعید فطر",
        "type": "religious",
        "is_holiday": true,
        "description": "",
        "source": "official_calendar"
      }
    ]
  },
  "meta": {
    "request_id": "req_8f91f8",
    "version": "v1"
  }
}
GET /events فهرست رویدادها

فهرست رویدادها را بر اساس سال/ماه با قابلیت صفحه‌بندی برمی‌گرداند.

پارامترنوعالزامیپیش‌فرضقوانین
yearintegerاختیاریسال جاری جلالی1300..1499
monthintegerاختیاری1..12
limitintegerاختیاری1001..500
offsetintegerاختیاری0>= 0
نمونه درخواست
curl --request GET \
  --url "https://pardazmaan.ir/wp-json/mjc/v1/events?year=1405&month=1&limit=50&offset=0" \
  --header "X-API-Key: mjc_your_api_key_here"
نمونه پاسخ موفق (200)
{
  "success": true,
  "data": {
    "items": [
      {
        "id": 142,
        "title": "نوروز — جشن سال نو",
        "jalali_date": "1405-01-01",
        "gregorian_date": "",
        "event_type": "national",
        "is_holiday": true,
        "description": "",
        "source": "official_calendar"
      }
    ],
    "pagination": {
      "total": 14,
      "limit": 50,
      "offset": 0
    },
    "filters": {
      "year": 1405,
      "month": 1
    }
  },
  "meta": {
    "request_id": "req_8112af",
    "version": "v1"
  }
}
خطاها و کدهای وضعیت
HTTPerror.codeتوضیحاقدام پیشنهادی
400invalid_parameter / invalid_dateورودی نامعتبر یا تاریخ غیرواقعیپارامترها را اصلاح کنید
401missing_api_key / invalid_api_keyکلید API ارسال نشده یا نامعتبر استکلید معتبر را در هدر بفرستید
404route_not_foundمسیر API نادرست استURL را بررسی کنید
429rate_limit_exceededبیش از حد مجاز درخواست ارسال شدهبر اساس Retry-After مجدداً تلاش کنید
500internal_errorخطای داخلی سروربا backoff مجدد تلاش کنید
نمونه خطا (400)
{
  "success": false,
  "error": {
    "code": "invalid_date",
    "message": "تاریخ واردشده معتبر نیست.",
    "details": {
      "year": 1405,
      "month": 12,
      "day": 31
    }
  },
  "meta": {
    "request_id": "req_2290ad",
    "version": "v1"
  }
}
⏱️ محدودیت نرخ، Timeout و Retry
  • Rate Limit: حداکثر 60 درخواست در دقیقه برای هر API Key.
  • Headers: در پاسخ ممکن است هدرهای X-RateLimit-Limit، X-RateLimit-Remaining و Retry-After ارسال شود.
  • Timeout پیشنهادی کلاینت: 10 ثانیه.
  • Retry policy: فقط برای 429 و 5xx با Exponential Backoff (مثلاً 1s, 2s, 4s).
پاسخ endpoint روزانه /jalali/{year}/{month}/{day} تا 24 ساعت cache می‌شود.
🧭 نسخه‌بندی و پایداری API
  • نسخه فعلی در مسیر: /wp-json/mjc/v1
  • Backward-compatible تغییرات غیرشکننده در v1 منتشر می‌شوند.
  • تغییرات شکننده فقط با نسخه جدید (مثل v2) ارائه خواهد شد.
  • در صورت deprecation، حداقل 90 روز قبل اطلاع‌رسانی می‌شود.
🧪 نمونه کدهای کامل
JavaScript (Node.js / fetch)
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 10000);

(async () => {
  try {
    const res = await fetch("https://pardazmaan.ir/wp-json/mjc/v1/jalali/1405/1/1", {
      method: "GET",
      headers: { "X-API-Key": "mjc_your_api_key_here" },
      signal: controller.signal
    });

    const json = await res.json();
    if (!res.ok || !json.success) {
      throw new Error(json?.error?.message || "API error");
    }

    console.log(json.data);
  } catch (e) {
    console.error(e.message);
  } finally {
    clearTimeout(timeout);
  }
})();
PHP (WordPress wp_remote_get)
$url = 'https://pardazmaan.ir/wp-json/mjc/v1/events?year=1405&month=1&limit=50&offset=0';

$response = wp_remote_get($url, [
  'timeout' => 10,
  'headers' => [
    'X-API-Key' => 'mjc_your_api_key_here',
    'Accept'    => 'application/json',
  ],
]);

if (is_wp_error($response)) {
  error_log($response->get_error_message());
  return;
}

$status = wp_remote_retrieve_response_code($response);
$body   = wp_remote_retrieve_body($response);
$data   = json_decode($body, true);

if ($status !== 200 || empty($data['success'])) {
  error_log($data['error']['message'] ?? 'Unknown API error');
  return;
}

print_r($data['data']);

این API توسط تیم پردازمان ارائه می‌شود.

نسخه API: v1 | نسخه سند: 1.5.0