مستندات

جست‌وجو در مستندات

نام اندپوینت، موضوع یا کلیدواژه را بنویسید

جست‌وجوی جریانی پرواز

نتایج پرواز را همان لحظه که می‌رسند از طریق Server-Sent Events (SSE) دریافت کنید تا اولین نتایج سریع نمایش داده شوند و فهرست به‌تدریج کامل شود.

POST/Air/AirLowFareSearchIncremental

دسترسی نیازمند مجوز air_low_fare_search

این نسخهٔ جریانی (streaming) AirLowFareSearch است و همان بدنهٔ درخواست را می‌گیرد. به‌جای یک پاسخ JSON، یک text/event-stream برمی‌گرداند. آن را به‌صورت جریان بخوانید و اتصال را تا رسیدن رویداد done باز نگه دارید.

درخواست#

بدنهٔ درخواست دقیقاً مثل AirLowFareSearch است.

curl -N -X POST https://api.simorghapi.com/api/Air/AirLowFareSearchIncremental \
  -H "Content-Type: application/json" \
  -d '{
    "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
    "AdultCount": 1,
    "PricingSourceType": "All",
    "RequestOption": "All",
    "TravelPreference": { "CabinType": 3 },
    "OriginDestinationInformations": [
      { "OriginLocationCode": "IST", "DestinationLocationCode": "DXB", "DepartureDateTime": "2026-10-12T00:00:00" }
    ]
  }'
const res = await fetch("https://api.simorghapi.com/api/Air/AirLowFareSearchIncremental", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    SessionId: "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
    AdultCount: 1,
    PricingSourceType: "All",
    RequestOption: "All",
    TravelPreference: { CabinType: 3 },
    OriginDestinationInformations: [
      { OriginLocationCode: "IST", DestinationLocationCode: "DXB", DepartureDateTime: "2026-10-12T00:00:00" }
    ]
  })
});

const reader = res.body.getReader();
const decoder = new TextDecoder();
let itineraries = [];

while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  for (const block of decoder.decode(value).split("\n\n")) {
    if (!block.startsWith("event:")) continue;
    const event = block.match(/event: (.*)/)[1];
    const data = JSON.parse(block.match(/data: (.*)/)[1]);
    if (event === "itineraries") itineraries = data.PricedItineraries; // replace, do not append
    if (event === "done") console.log("finished", data.Total);
  }
}
import json
import requests

payload = {
    "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
    "AdultCount": 1,
    "PricingSourceType": "All",
    "RequestOption": "All",
    "TravelPreference": {"CabinType": 3},
    "OriginDestinationInformations": [
        {"OriginLocationCode": "IST", "DestinationLocationCode": "DXB", "DepartureDateTime": "2026-10-12T00:00:00"}
    ],
}

with requests.post(
    "https://api.simorghapi.com/api/Air/AirLowFareSearchIncremental",
    json=payload, stream=True,
) as res:
    event = None
    for line in res.iter_lines(decode_unicode=True):
        if line.startswith("event:"):
            event = line.split(": ", 1)[1]
        elif line.startswith("data:"):
            data = json.loads(line.split(": ", 1)[1])
            if event == "itineraries":
                itineraries = data["PricedItineraries"]  # replace, do not append

پاسخ#

پاسخ، جریانی از رویدادهاست. هر رویداد یک خط event و یک خط data دارد.

رویداددادهمعنا
itineraries{ "PricedItineraries": [ ... ], "Replace": true }سبد کامل فعلی نتایج. فهرست خود را با آن جایگزین کنید؛ به آن اضافه نکنید.
done{ "Success": true, "SearchId": N, "Total": N }رویداد پایانی؛ جست‌وجو تمام شد. SearchId مثل اندپوینت غیرجریانی (blocking) کار می‌کند.
error{ "Success": false, "Error": { "Id", "Message" } }رویداد پایانی؛ جست‌وجو ناموفق بود.
event: itineraries
data: {"PricedItineraries":[ { "FareSourceCode": "...", "AirItineraryPricingInfo": { "ItinTotalFare": { "TotalFare": 219.60, "Currency": "USD" } } } ],"Replace":true}

event: itineraries
data: {"PricedItineraries":[ { "FareSourceCode": "..." }, { "FareSourceCode": "..." } ],"Replace":true}

event: done
data: {"Success":true,"SearchId":428713,"Total":137}
جایگزین کنید، اضافه نکنید. هر رویداد itineraries کل سبد نتایج تا آن لحظه را، مرتب‌شده و بدون تکرار، در خود دارد. هر بار فهرست خود را بازنویسی کنید، نه این‌که به آن اضافه کنید.
ویرایش این صفحه در گیت‌هابمشکلی دیدید؟ از پنل ← پشتیبانی خبرمان کنید.