VISH 应用——俄罗斯交通大学课表

面向所有学院学生和教职工的俄罗斯交通大学课表。按天和按周查看自己班级和任意教师的课表、此刻的空闲教室、教室、班级和教师的使用情况、课表变更通知以及课表人工智能助手。

学院

俄罗斯交通大学应用涵盖五个学院:高等工程学院、民航学院、道路管理学院、先进工程学院“高铁学院”和国际交通运输学院。在任何学院,班级课表和教师课表的查找方式都相同。

VISH 应用的功能
栏目
指南

通知与日历

更新于 27.10.2026

如何在没有每分钟询问API的情况下了解计划更改。 2026年10月23日与摊位d1核对;本页的方法也可在生产中使用。

选择什么

问题比解决
Google日历,Apple日历,Outlook中的时间表订阅日历提要GET /calendar/schedule.ics
日历中的考试和测试GET /session.ics
报告更改的机器人或服务民调结果GET /schedule/changes每隔几分钟
在家时间表的完整副本GET /schedule一两个小时的时间,比较updatedAt
推送到浏览器仅适用于应用程序本身VISH -见下文

日历提要

GET /calendar/schedule.ics返回iCalendar格式的计划,其过滤器与GET /schedule: group或groupId, teacher或teacherId, scope, dateFrom, dateTo,而lessonIds和subjectIds (只有这些课程或科目), locale (ru, en, zh)和attachment=1(给作为一个文件)。

  • 您不需要钥匙:这是任何访客看到的相同时间表。
  • 订阅地址-日历本身重读它,并拿起编辑,取消和删除。 每个活动都有一个常数UID,所以更改更新事件,而不是添加第二个。
  • 时间与时区(DTSTART;TZID=Europe/Moscow:…).
  • 一个地址每分钟不超过60个请求。
text
https://d1.vish-app.ru/api/v1/calendar/schedule.ics?group=ШАД-111

GET /session.ics是相同的会话。:考试,测试和咨询小组或教师。

改变饲料

GET /schedule/changes -最近在一组的时间表中发生了什么变化(groupId)或教师(teacherId),从上面新。

  • period=recent(默认情况下)-最近的更改; limit -有多少。
  • period=weeks -本周和下周的课程变化。
  • 记录在案: lessonId, change (created, announced, updated, deleted), subject, room, startAt, endAt, changedFields, changes(菲尔德,曾经,成为), origin (institute -研究所的修订, source -新大学时间表)及createdAt.

如何投票:每5-15分钟一次,记忆id或createdAt最后处理的记录,并且只处理更新的记录。 答案来自period=weeks被缓存一分钟—更频繁地询问是毫无意义的。

在浏览器中推送

POST /push/subscriptions和POST /push/unsubscribe订阅应用程序的浏览器VISH通知有关组或教师的更改;订阅的公共蒸汽密钥在GET /app-config (push.publicKey). 这些方法是为应用而设计的VISH本身:订阅由其service worker创建。 更改feed对您的网站或机器人更方便。

无法加载接口方法列表打开接口参考 (在新标签页中打开)

示例:feed和更改

该示例下载组的日历提要,检查其格式和唯一性UID,然后阅读本周和下周的变化。 该组是VISH_GROUP,与ШАД-111默认情况下。

// The group's calendar feed and its recent changes; no key needed.
const API = process.env.VISH_API ?? 'https://d1.vish-app.ru/api/v1'
const GROUP = process.env.VISH_GROUP ?? 'ШАД-111'

const groups = await (await fetch(`${API}/groups?search=${encodeURIComponent(GROUP)}&all=1`)).json()
const group = groups.list.find((item) => item.name === GROUP)
if (!group) throw new Error(`group ${GROUP} not found`)

const feed = await fetch(`${API}/calendar/schedule.ics?group=${encodeURIComponent(GROUP)}`)
const calendar = await feed.text()
if (!feed.ok || !feed.headers.get('content-type')?.startsWith('text/calendar') || !calendar.startsWith('BEGIN:VCALENDAR')) {
	throw new Error(`not a calendar: HTTP ${feed.status}`)
}
const uids = [...calendar.matchAll(/^UID:(.+)$/gmu)].map((match) => match[1].trim())
if (new Set(uids).size !== uids.length) throw new Error('duplicate UIDs')

const response = await fetch(`${API}/schedule/changes?groupId=${group.id}&period=weeks`)
if (!response.ok) throw new Error(`changes: HTTP ${response.status}`)
const changes = (await response.json()).list
if (!Array.isArray(changes) || changes.some((item) => !item.lessonId || !item.change || !item.createdAt)) {
	throw new Error('unexpected changes answer')
}

console.log(`${GROUP}: ${uids.length} events in the feed, ${changes.length} changes this week and next`)
for (const item of changes.slice(0, 5)) {
	console.log(`- ${item.createdAt.slice(0, 16)} ${item.change}: ${item.subject?.ru ?? item.lessonId} (${item.changedFields?.join(', ') ?? ''})`)
}

尝试

当前周、调用网格和推送公钥:

试一试请求

只有带锁的方法需要密钥。密钥只保存在本页:不会被存储,只作为本次请求的请求头发送,离开页面后即被清除。 如何获取密钥

验证:2026-10,PWA aa337c45,平台bff65fce._