课表 API
更新于 27.10.2026
时间表是给API的主要内容VISH:团体及教师课程俄罗斯交通大学 (MIIT)与教室,类的类型,取消和编辑。 任何人都可以阅读它,没有钥匙。 2026年10月23日与摊位d1核对;本页的方法也可在生产中使用。
方法
课程:获取/时间表
的主要方法。 没有过滤器,他给所有的类在一页一页的基础上;通常他被问到一个小组或一个老师每个时期。
| Параметр | Что значит |
|---|---|
group | Код группы ровно как в /groups, например ШАД-111. Тогда в ответе есть и поле group |
groupId | 组ID也一样 |
teacher, teacherId | 教师的全名(俄语)或其标识符 |
scope | 一个小组和一个老师在一起: group(默认情况下)-只有这个老师的班级在这个小组, all -整个老师的时间表 |
date | 有一天, ГГГГ-ММ-ДД;取代dateFrom和dateTo |
dateFrom, dateTo | 期;默认情况下—从学期开始到时间表结束 |
lessonType | lecture, practice, lab, seminar, consultation, exam, credit, other |
room | 观众,例如8412 |
status | scheduled或cancelled |
page, perPage, all | 页面输出(默认情况下,每页20,不超过200; all=1 -一次最多2000) |
这个班有什么?: id, date, startAt, endAt, number(对的数量, null呼叫网格之外), subject(三种语言的名称), lessonType(对象: code从上面的列表和label三种语言), room和roomLabel(如果观众用单词命名,则命名), subgroup, status, weekParity (1或2), teachers, groups, extraGroups(不在同一类中的组VISH), notesCount, reactions, isSubscribed和subscribersCount(订阅类), isOverridden(该班在研究所编辑), updatedAt.
还有什么
GET /app-config-学期(semester.startDate,endDate,scheduleEndsAt),本周及其平价(currentWeek.number,currentWeek.parity),调用网格(schedule.lessonSlots).GET /schedule/changes-小组或教师的时间表最近发生了什么变化(groupId或teacherId);period=weeks-本周和下周班的变化。 方便调查—见通知及日历.GET /session-与小组或教师进行考试、测试和咨询;hasUpcoming—在接下来的30天内是否有考试或测试。GET /schedule/filters,GET /schedule/lesson-types,GET /schedule/subjects,GET /schedule/courses-过滤器的值:类,科目,课程的类型。GET /schedule/export.pdf-打印时间表(相同的过滤器),每分钟不超过10个请求。GET /calendar/schedule.ics和GET /session.ics在日历格式上是相同的.
只有拥有schedule:lesson:*权限可以更改时间表(POST, PATCH, DELETE到/schedule…),并且只在他们的团体和研究所。
示例:团体周
该示例采用该组当前周的类,并将每对的时间与调用网格进行比较/app-config. 组设置为变量VISH_GROUP(默认为ШАД-111).
// This week's lessons of one group, checked against the bell schedule.
const API = process.env.VISH_API ?? 'https://d1.vish-app.ru/api/v1'
const GROUP = process.env.VISH_GROUP ?? 'ШАД-111'
const get = async (path, params = {}) => {
const url = new URL(`${API}${path}`)
for (const [name, value] of Object.entries(params)) url.searchParams.set(name, String(value))
const response = await fetch(url)
if (!response.ok) throw new Error(`${url}: HTTP ${response.status}`)
return response.json()
}
// Monday to Sunday of the current week, on the Moscow calendar.
const moscowToday = new Date(Date.now() + 3 * 60 * 60 * 1000)
const monday = new Date(moscowToday)
monday.setUTCDate(moscowToday.getUTCDate() - ((moscowToday.getUTCDay() + 6) % 7))
const sunday = new Date(monday)
sunday.setUTCDate(monday.getUTCDate() + 6)
const day = (date) => date.toISOString().slice(0, 10)
const config = await get('/app-config')
const slots = new Map(config.schedule.lessonSlots.map((slot) => [slot.number, slot]))
const week = await get('/schedule', { group: GROUP, dateFrom: day(monday), dateTo: day(sunday), all: 1 })
if (week.group?.name !== GROUP) throw new Error(`group ${GROUP} not found`)
console.log(`${GROUP}, week ${config.currentWeek.number} (parity ${config.currentWeek.parity}): ${week.list.length} lessons`)
for (const lesson of week.list) {
// Wall-clock Moscow time in a UTC field: read the digits as they are.
const start = lesson.startAt.slice(11, 16)
const slot = slots.get(lesson.number)
if (slot && slot.startTime !== start) throw new Error(`lesson ${lesson.id} starts ${start}, pair ${lesson.number} at ${slot.startTime}`)
const cancelled = lesson.status === 'cancelled' ? ' (cancelled)' : ''
console.log(`${lesson.date.slice(0, 10)} ${start} ${lesson.subject.ru} — ${lesson.room ?? 'no room'}${cancelled}`)
}尝试
试一试请求
只有带锁的方法需要密钥。密钥只保存在本页:不会被存储,只作为本次请求的请求头发送,离开页面后即被清除。 如何获取密钥
如果出了什么问题
- 空的
list-本组在此期间(假期、时段)没有上课。 - 404
NOT_FOUND—没有这个代码的组。 代码必须匹配name的/groups字符(西里尔文,连字符);你可以在/groups?search=…. - 400
VALIDATION_ERROR参数格式不正确;error.details.issues说是哪一个。 - 400在
all=1-超过2000个课程被过滤掉:缩小时间或浏览网页。
验证:2026-10,PWA aa337c45,平台bff65fce._