API расписания
Расписания программ основных станций RadioMV: время эфира, категории и описания.
Эндпоинты
GET
/english-programv2.json
GET
/slavic-programv2.json
GET
/spanish-programv2.json
GET
/german-programv2.json
Формат ответа
{
"schemaVersion": "2.0.0",
"lastUpdated": "2024-12-19",
"station": {
"id": 1,
"name": "English",
"language": "en",
"timezone": "America/Los_Angeles"
},
"schedule": [
{
"id": "1-001",
"name": "Kids Hour",
"description": "An hour-long children's program.",
"category": "children",
"days": [0, 1, 2, 3, 4, 5, 6],
"startTime": "07:00",
"endTime": "08:00"
}
]
}
Корневые поля
schemaVersion
string
обязательное
Семантическая версия формата схемы. Проверяйте её для совместимости.
lastUpdated
string
обязательное
Дата последнего изменения расписания в формате ISO 8601 (например, "2024-12-19").
station
object
обязательное
Объект с метаданными станции.
schedule
array
обязательное
Массив элементов расписания программ.
Объект station
id
number
обязательное
Уникальный идентификатор станции. Совпадает с ID в appv1.json.
name
string
обязательное
Отображаемое название станции.
language
string
обязательное
Код языка ISO 639-1:
en, es, de, ru
timezone
string
обязательное
Идентификатор часового пояса IANA. Всё время в расписании указано в этом поясе.
Объект элемента расписания
id
string
обязательное
Уникальный идентификатор в формате
{stationId}-{порядковый номер} (например, "1-001").
name
string
обязательное
Название программы на языке станции.
description
string
обязательное
Описание программы. Может быть пустой строкой.
category
string
обязательное
Стандартизированная категория для фильтрации. См. Категории.
days
number[]
обязательное
Массив номеров дней (0-6). См. Дни недели.
startTime
string
обязательное
Время начала в 24-часовом формате
HH:MM.
endTime
string
обязательное
Время окончания в 24-часовом формате
HH:MM.Дни недели
Дни представлены числами по соглашению JavaScript Date.getDay():
| Число | День |
|---|---|
0 | Воскресенье |
1 | Понедельник |
2 | Вторник |
3 | Среда |
4 | Четверг |
5 | Пятница |
6 | Суббота |
Формат времени
Время указывается в 24-часовом формате (HH:MM) для единообразного разбора:
| 12-часовой | 24-часовой |
|---|---|
| 12:00 AM | 00:00 |
| 7:00 AM | 07:00 |
| 12:00 PM | 12:00 |
| 1:00 PM | 13:00 |
| 6:30 PM | 18:30 |
| 11:00 PM | 23:00 |
Часовой пояс
Всё время указано в локальном часовом поясе станции (поле
station.timezone). Сейчас все станции используют America/Los_Angeles (тихоокеанское время).
Категории
Стандартизированные категории позволяют фильтровать программы на всех станциях независимо от языка:
| Категория | Описание |
|---|---|
bible-reading | Чтение Писания (ВЗ, НЗ, Псалмы, Притчи) |
bible-study | Углублённое изучение Библии |
sermon | Проповеди пасторов |
testimony | Личные свидетельства |
music | Музыкальные программы |
children | Детские программы |
family | Программы о семье |
live | Прямые эфиры, программы со звонками |
missionary | Миссионерские репортажи и новости |
educational | Образовательные/научные программы |
audiobook | Чтение аудиокниг |
devotional | Ежедневные духовные размышления |
talk-show | Дискуссии и интервью |
Примеры кода
Текущая программа
function getCurrentProgram(schedule) {
const now = new Date();
const currentDay = now.getDay();
const currentTime = now.toTimeString().slice(0, 5); // "HH:MM"
return schedule.find(item =>
item.days.includes(currentDay) &&
item.startTime <= currentTime &&
item.endTime > currentTime
);
}
Расписание на сегодня
function getTodaySchedule(schedule) {
const today = new Date().getDay();
return schedule
.filter(item => item.days.includes(today))
.sort((a, b) => a.startTime.localeCompare(b.startTime));
}
Фильтр по категории
function getProgramsByCategory(schedule, category) {
return schedule.filter(item => item.category === category);
}
// Все проповеди
const sermons = getProgramsByCategory(schedule, 'sermon');
Проверка обновлений
function isScheduleStale(data, maxAgeDays = 30) {
const lastUpdated = new Date(data.lastUpdated);
const now = new Date();
const diffDays = (now - lastUpdated) / (1000 * 60 * 60 * 24);
return diffDays > maxAgeDays;
}
Пример на Swift
func getScheduleForDay(_ schedule: [ScheduleItem], day: Int) -> [ScheduleItem] {
return schedule
.filter { $0.days.contains(day) }
.sorted { $0.startTime < $1.startTime }
}
Пример на Kotlin
fun getProgramsByCategory(
schedule: List<ScheduleItem>,
category: String
): List<ScheduleItem> {
return schedule.filter { it.category == category }
}