مستندات وبسرویس تورهای Last Second
دسترسی برنامهنویسی به اطلاعات تورهای سینکشده با کلید لایسنس API. تمام پاسخها JSON و تاریخها به تقویم شمسی هستند.
معرفی
این API دادههای تور شامل هتلها، قیمتها، حملونقل و جزئیات سفر را در قالب JSON استاندارد برمیگرداند. برای استفاده نیاز به کلید لایسنس دارید که از پنل مدیریت وردپرس صادر میشود.
- Namespace:
ls-provider/v1 - فرمت: JSON با UTF-8
- متدهای مجاز:
GET
احراز هویت
کلید API را فقط در هدر ارسال کنید. ارسال کلید در query string ممنوع است (در لاگ سرور ذخیره میشود).
X-LS-API-Key: ls_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Authorization: Bearer ls_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
آدرس پایه (Base URL)
https://tour.imagineit.online/wp-json/ls-provider/v1
/health
بررسی سلامت سرویس. نیاز به کلید ندارد.
نمونه درخواست
curl "https://tour.imagineit.online/wp-json/ls-provider/v1/health"
نمونه پاسخ
{
"ok": true,
"version": "1.2.4"
}
/tours
دریافت لیست تورها با فیلتر و صفحهبندی. بدون فیلتر، همه تورها (صفحهبهصفحه) برگردانده میشوند.
در بدنهٔ پاسخ، min_price و max_price هر تور بهصورت خودکار از کمترین و بیشترین مبلغ معتبر در tour_treks (trekهای داخلی از Last Second) و فیلدهای amount_* هتلهای tour_hotels محاسبه میشوند. آرایهٔ tour_treks شامل هر بار/پکیج قابل رزرو (از treks/index و tours/show) است. پس از نصب/بهروزرسانی افزونه، یک بار sync تور از پنل اجرا کنید تا trekها و مبالغ در پایگاه داده پر شوند. پارامترهای query با همین نام برای فیلتر بودجه روی min_price / max_price ذخیرهشده در جدول تورها اعمال میشوند.
پارامترهای Query
| پارامتر | نوع | توضیح |
|---|---|---|
city | string | فیلتر شهر |
country | string | فیلتر کشور |
tour_type | string | نوع تور |
location_id | integer | شناسه مقصد |
min_price | integer | حداقل قیمت (ریال) |
max_price | integer | حداکثر قیمت (ریال) |
min_stars | integer | حداقل ستاره هتل |
is_charter | 0 | 1 | تور چارتر |
date_gone_from | date | از تاریخ رفت (YYYY-MM-DD میلادی) |
date_gone_to | date | تا تاریخ رفت |
vehicle_type | string | نوع وسیله |
shipping_company | string | شرکت حمل |
page | integer | شماره صفحه (پیشفرض: 1) |
per_page | integer | تعداد در صفحه (۱–۱۰۰، پیشفرض: 20) |
fields یا output_fields | string | فیلدهای خروجی با کاما؛ بدون این پارامتر همه فیلدها برمیگردد. برای زیرمجموعه هتل/ترک: tour_hotels.hotel_name |
preset | standard | خروجی استاندارد (مثل نمونه زیر، بدون trek و min/max_price) |
sort | enum | price_asc, price_desc, date_gone_asc, date_gone_desc |
انتخاب فیلدها (fields)
با fields یا preset=standard خروجی را دقیقاً به شکل نمونه زیر بگیرید (بدون tour_treks و min_price / max_price مگر اینکه خودتان بخواهید).
https://tour.imagineit.online/wp-json/ls-provider/v1/tours?per_page=5&preset=standard
https://tour.imagineit.online/wp-json/ls-provider/v1/tours?per_page=1&fields=tour_id,tour_type,tour_country,tour_city,tour_hotels,vehicle_type,shipping_company,origin_travel,source_travel,date_gone,time_gone,date_return,time_return,Length_stay,is_charter,services,documents,description
نمونه cURL
curl -H "X-LS-API-Key: YOUR_KEY" \
"https://tour.imagineit.online/wp-json/ls-provider/v1/tours?city=استانبول&min_stars=4&page=1&per_page=20&fields=tour_id,tour_city,min_price"
نمونه JavaScript
fetch('https://tour.imagineit.online/wp-json/ls-provider/v1/tours?city=استانبول', {
headers: { 'X-LS-API-Key': 'YOUR_KEY' }
})
.then(r => r.json())
.then(console.log);
نمونه پاسخ
{
"success": true,
"data": {
"items": [
{
"tour_id": 1,
"tour_type": "تور اروپا",
"tour_country": "ترکیه",
"tour_city": "استانبول",
"tour_hotels": [
{
"hotel_id": 1,
"hotel_name": "هتل شماره 1",
"service_type": "صبحانه",
"amount_2_beds": 10000000,
"amount_child_with_bed": 5000000,
"amount_1_beds": 7000000,
"amount_child_without_bed": 3000000,
"number_stars": 4,
"hotel_images": ["https://yoursite.com/ht-img/a1b2c3d4e5f67890"]
}
],
"vehicle_type": "هواپیما",
"shipping_company": "ماهان",
"origin_travel": "فرودگاه امام خمینی",
"source_travel": "فرودگاه استانبول",
"date_gone": "1403-12-05",
"time_gone": "12:30",
"date_return": "1403-12-10",
"time_return": "09:15",
"Length_stay": "مدت 4 شب و 5 روز",
"is_charter": 0,
"services": "خدمات",
"documents": "مدارک",
"description": "توضیحات"
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total": 150,
"total_pages": 8
}
}
}
/tours/{tour_id}
دریافت جزئیات یک تور با شناسه. ساختار پاسخ مانند لیست تورها است؛ شامل tour_treks و min_price / max_price محاسبهشده از trekها و هتلها. پارامتر fields همانند لیست تورها پشتیبانی میشود.
نمونه درخواست
curl -H "X-LS-API-Key: YOUR_KEY" \
"https://tour.imagineit.online/wp-json/ls-provider/v1/tours/1"
نمونه پاسخ
{
"success": true,
"data": { "...": "همان ساختار یک تور در لیست" }
}
راهنمای فیلترها
برای استخراج همه دادهها، درخواستها را با page و per_page=100 تکرار کنید تا total_pages پوشش داده شود.
- ترکیب
city+min_starsبرای تورهای یک شهر با هتلهای باکیفیت min_priceوmax_priceدر query برای فیلتر بازه بودجه (روی دادهٔ syncشده)min_priceوmax_priceدر پاسخ هر تور: بازهٔ قیمت ازtour_treksوtour_hotelstour_treks: trekهای داخلی هر تور (قیمت و تاریخ هر بار)sort=date_gone_ascبرای نزدیکترین تاریخ سفر
کدهای خطا
| HTTP | code | معنی |
|---|---|---|
| 401 | invalid_license | کلید نامعتبر، منقضی یا لغو شده |
| 403 | ip_not_allowed | IP غیرمجاز |
| 403 | https_required | نیاز به HTTPS |
| 429 | rate_limit_exceeded | سقف درخواست |
| 404 | tour_not_found | تور یافت نشد |
| 400 | invalid_params | پارامتر نامعتبر |
| 400 | invalid_fields | نام فیلد در fields مجاز نیست |
{
"success": false,
"error": {
"code": "invalid_license",
"message": "کلید API نامعتبر یا منقضی شده است."
}
}
محدودیتها
- هر کلید سقف ساعتی و روزانه دارد (در پنل ادمین قابل تنظیم)
- کلیدها مدت اعتبار دارند: ۱، ۳، ۶، ۱۲ ماه یا مادامالعمر
- حداکثر ۱۰۰ رکورد در هر صفحه
- IP whitelist اختیاری روی هر کلید
آزمایش API (Try it out)
کلید شما فقط در مرورگر ذخیره میشود و مستقیماً به API ارسال میگردد. فیلترها، تعداد، و فیلدهای خروجی را تنظیم کنید.
پاسخ
—