Files
wiki/tasks/flightradar24/docs/FR24_API_NOTES.md
2026-04-24 17:50:01 +03:00

109 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FR24 API — Особенности и ограничения
Исследовано: 2026-04-24. Тариф: **Explorer**.
---
## Endpoint: `/api/flight-summary/full`
### Explorer tier — жёсткий лимит 20 результатов на запрос
Независимо от значения параметра `limit` (даже `limit=20000`) — Explorer всегда возвращает
**максимум 20 записей** за один запрос. Это hard limit тарифа, не баг.
### Параметр `offset` не существует
В документации FR24 API нет параметра `offset`. Если его передать — он молча игнорируется,
и каждый запрос возвращает одни и те же первые 20 рейсов.
**Неправильно** (так мы сожгли все кредиты первый раз):
```
?airports=both:SVO&limit=20&offset=0 → 20 рейсов
?airports=both:SVO&limit=20&offset=20 → те же 20 рейсов (offset игнорируется)
?airports=both:SVO&limit=20&offset=40 → те же 20 рейсов
```
### Правильная пагинация — временны́е окна
Данные отсортированы по `first_seen`. Для получения всех рейсов за сутки нужно
разбить день на часовые окна:
**Правильно**:
```
?airports=inbound:SVO&flight_datetime_from=2026-04-23T00:00:00&flight_datetime_to=2026-04-23T01:00:00
?airports=inbound:SVO&flight_datetime_from=2026-04-23T01:00:00&flight_datetime_to=2026-04-23T02:00:00
...и т.д.
```
Если в окне >20 рейсов — нужно уменьшать окно (30 мин) или разделять на `inbound:` + `outbound:`.
---
## Параметр `airports` — правильные prefixes
| Prefix | Значение | Работает |
|--------|----------|---------|
| `both:SVO` | прилёты + вылеты SVO | ✅ |
| `inbound:SVO` | только прилёты | ✅ |
| `outbound:SVO` | только вылеты | ✅ |
| `departure:SVO` | — | ❌ не существует |
| `arrival:SVO` | — | ❌ не существует |
Принимает IATA (`SVO`), ICAO (`UUEE`) и ISO коды стран (`RU`). До 15 аэропортов через запятую.
---
## Стоимость
| Endpoint | Данные | Кредитов/запись |
|----------|--------|-----------------|
| `/flight-summary/light` | Live | 1 |
| `/flight-summary/light` | История < 30 дней | 2 |
| `/flight-summary/light` | История > 30 дней | 3 |
| `/flight-summary/full` | Live | 2 |
| `/flight-summary/full` | История < 30 дней | **3** |
| `/flight-summary/full` | История > 30 дней | **6** |
| `/flight-tracks` | любые | 40 |
Стоимость считается за каждую **возвращённую** запись, не за запрос.
---
## Поля ответа `/full`
Все поля `light` плюс:
- `orig_iata` / `dest_iata` / `dest_iata_actual`
- `orig_icao` / `dest_icao` / `dest_icao_actual`
- `flight_time` (секунды)
- `runway_takeoff` / `runway_landed`
- `circle_distance` / `actual_distance` (км)
- `category` (Passenger, Cargo, ...)
Поля могут быть `null` если рейс ещё в воздухе или данные не обнаружены.
---
## Оценка объёма SVO (23.04.2026)
| Окно | `inbound:SVO` | `outbound:SVO` | `both:SVO` |
|------|---------------|----------------|------------|
| 00:0001:00 | 17 рейсов | 2 рейса | 19 рейсов |
Типичный день SVO: ~400 рейсов (прилёты + вылеты).
---
## Рекомендуемая стратегия загрузки
```
Для 4 аэропортов (SVO, DME, VKO, ZIA) за 1 день:
24 окна × inbound: × 4 аэропорта = 96 запросов
24 окна × outbound: × 4 аэропорта = 96 запросов
Итого: 192 запроса × ~10 рейсов × 3 кредита ≈ 5 760 кредитов/день
При остатке 51 000 кредитов: ~9 дней данных
```
> **Важно**: дедупликация по `fr24_id` обязательна — один рейс может попасть
> в два смежных временных окна.