الطلب الأول
ثلاث خطوات من اسم المحطة إلى المركبات المتجهة إليها. لا تحتاج إلى تثبيت شيء لـ curl؛ تحتاج JavaScript إلى Node.js 18 أو أحدث، وتكفي Python مكتبتها القياسية.
0. احصل على مفتاح#
بعد قبول طلبك، أنشئ مفتاحًا في صفحة المطوّر. يُعرض مرة واحدة. احفظه على خادمك، مثلًا في متغير بيئة:
export IBUS_API_KEY='ibk_live_k_…'كل الأمثلة أدناه ترسله في ترويسة Authorization. لا تضع المفتاح أبدًا في عنوان الطلب أو في صفحة ويب أو في حزمة تطبيق.
1. ابحث عن المحطة#
ابحث بالاسم بالعبرية أو الإنجليزية أو العربية، أو بالرمز المكتوب على لافتة المحطة.
curl -H "Authorization: Bearer $IBUS_API_KEY" "https://api.ibusisrael.online/api/transport/stops/search?q=Azrieli&limit=3&lang=en"const base = "https://api.ibusisrael.online/api/transport";
const res = await fetch(`${base}/stops/search?q=Azrieli&limit=3&lang=en`, { headers: { Authorization: `Bearer ${process.env.IBUS_API_KEY}` } });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(await res.json());import json, os, urllib.request
url = "https://api.ibusisrael.online/api/transport/stops/search?q=Azrieli&limit=3&lang=en"
req = urllib.request.Request(url, headers={"Authorization": "Bearer " + os.environ["IBUS_API_KEY"]})
with urllib.request.urlopen(req, timeout=15) as r:
print(json.load(r))[
{"stop_code": "34219", "stop_name": "Azrieli Mall", "stop_lat": 31.899117, "stop_lon": 35.007414},
{"stop_code": "21472", "stop_name": "Azrieli Mall/Menahem Begin Road", "stop_lat": 32.074584, "stop_lon": 34.790607}
]stop_code هو الرمز العام. قد يكون لعدة محطات الاسم نفسه: تحقّق من الموقع أو ابحث بالرمز.
2. اطلب مواعيد الوصول#
curl -H "Authorization: Bearer $IBUS_API_KEY" "https://api.ibusisrael.online/api/transport/v2/stop/21472/arrivals?limit=5&lang=en"const base = "https://api.ibusisrael.online/api/transport";
const res = await fetch(`${base}/v2/stop/21472/arrivals?limit=5&lang=en`, { headers: { Authorization: `Bearer ${process.env.IBUS_API_KEY}` } });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
for (const a of data.arrivals) {
const when = a.freshness.state === "live" ? `${a.expected_in_min} min` : a.freshness.state;
console.log(a.route_short_name, a.dest_names?.en ?? a.destination_name, when);
}import json, os, urllib.request
url = "https://api.ibusisrael.online/api/transport/v2/stop/21472/arrivals?limit=5&lang=en"
req = urllib.request.Request(url, headers={"Authorization": "Bearer " + os.environ["IBUS_API_KEY"]})
with urllib.request.urlopen(req, timeout=15) as r:
data = json.load(r)
for a in data["arrivals"]:
state = a["freshness"]["state"]
when = f'{a["expected_in_min"]} min' if state == "live" else state
print(a["route_short_name"], a.get("dest_names", {}).get("en"), when)3. اقرأ حداثة كل صف#
freshness.state | كيف تعرضه |
|---|---|
live | توقّع مباشر: expected_in_min وexpected_arrival_utc. |
scheduled_confirmed | وقت حسب الجدول: freshness.scheduled_arrival_utc. تقرير المركبة نفسه قديم، والجدول يؤكد الرحلة. |
stale_observation | شوهدت المركبة قبل age_sec ثانية؛ هذا ليس توقعًا مباشرًا. إذا كان eta_hidden يساوي true فلا تعرض أي وقت. |
unknown_age | لم يقدّم المصدر وقتًا صالحًا؛ لا تعرض الصف على أنه مباشر. |
يبيّن الحقل source_state في الغلاف ما إذا كان المصدر قد ردّ: ok أو no_data (ردّ بلا بيانات) أو unavailable.
المفاتيح للخوادم. صفحة الويب أو تطبيق الهاتف يتصل بخادمك، وخادمك يتصل بـ iBus بالمفتاح؛ الطلبات عبر النطاقات من المتصفح مسموحة لتطبيق iBus فقط.
ماذا بعد#
- البيانات والوقت: أيام الخدمة، والأوقات بعد منتصف الليل، والمعرّفات.
- الحدود والأخطاء: ماذا تفعل مع
429و5xx. - مرجع الواجهة: كل العمليات مع أمثلة.