Skip to content

Commit 37dd031

Browse files
committed
expand MyITMO API coverage for 1.6.0
- add study plan, finance, requests and system endpoints - expand sport and record book models - document API methods, models and observed values - update README and bump version to 1.6.0
1 parent eb7b5a3 commit 37dd031

64 files changed

Lines changed: 1097 additions & 76 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 93 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,124 @@
1-
<h1 align = "center">Java MyITMO API</h1>
2-
<p align = "center"><strong>Интерфейс для сервиса <a href="https://my.itmo.ru">MyITMO</a> на Java</strong></p>
1+
<h1 align="center">Java MyITMO API</h1>
32

4-
### 🌟 Текущие возможности
5-
- **Вход по логину/паролю ITMO ID**
6-
- Вход по refresh_token MyITMO
7-
- Автоматическое обновление токенов
8-
- Можно получать:
9-
- **Расписание (как уроков, так и спорта)**
10-
- **QR-пропуск в корпуса (в HEX-формате)**
11-
- **Свои записи на спорт (а также редактировать их)**
12-
- **Свои записи во время выборности (и изменять их)**
13-
- Зачётную книжку
14-
- Персоналии по ID (а также искать по ФИО)
3+
<p align="center"><strong>Неофициальная Java-библиотека для работы с <a href="https://my.itmo.ru">MyITMO</a></strong></p>
154

16-
### 🛠️ Зависимости
5+
## Возможности
176

18-
- `Retrofit`
19-
- `OkHttp`
20-
- `Gson`
21-
- `Lombok`
7+
- Аутентификация через ITMO ID по логину и паролю или refresh token.
8+
- Автоматическое обновление access token.
9+
- Получение личного учебного расписания и временных слотов.
10+
- Получение зачётки и дерева контрольных мероприятий дисциплины.
11+
- Получение структуры учебного плана.
12+
- Просмотр и поиск персоналий.
13+
- Работа со спортом:
14+
- расписание и фильтры;
15+
- личный календарь и выбранные секции;
16+
- запись на занятия и отмена записи;
17+
- баллы, попытки, задолженность и медицинская группа;
18+
- отборы, нормативы и специальные проекты.
19+
- Получение раскладки главного экрана, меню и каталога сервисов MyITMO.
20+
- Получение списка пользовательских заявок.
21+
- Получение суммарных выплат по категориям.
22+
- Просмотр и изменение выбора дисциплин и потоков.
23+
- Получение QR-пропуска в корпуса в HEX-формате.
2224

23-
### 🚀 Использование
25+
## Требования
2426

25-
Добавьте в pom.xml:
27+
- Java 8 или новее.
28+
- Maven или другая система сборки с поддержкой Maven Central.
29+
30+
Основные зависимости библиотеки: Retrofit, OkHttp, Gson и Lombok.
31+
32+
## Подключение
33+
34+
Добавьте зависимость в `pom.xml`:
2635

2736
```xml
28-
<dependencies>
29-
<dependency>
30-
<groupId>dev.alllexey</groupId>
31-
<artifactId>my-itmo-api</artifactId>
32-
<version>1.5.0</version>
33-
</dependency>
34-
</dependencies>
37+
<dependency>
38+
<groupId>dev.alllexey</groupId>
39+
<artifactId>my-itmo-api</artifactId>
40+
<version>1.6.0</version>
41+
</dependency>
3542
```
3643

37-
#### Аутентификация
44+
## Аутентификация
3845

39-
* Логин через почту/ID и пароль
40-
```java
41-
MyItmo myItmo = new MyItmo();
42-
myItmo.auth("my_cool_id", "my_strong_password");
43-
```
44-
* Логин через refresh_token (можно получить через F12 → cookies в браузере)
45-
```java
46-
MyItmo myItmo = new MyItmo();
47-
myItmo.getStorage().setRefreshToken("long_refresh_token");
48-
myItmo.getStorage().setRefreshExpiresAt(Long.MAX_VALUE);
49-
myItmo.forceRefreshTokens();
50-
```
51-
* Своя реализация Storage (далее)
46+
### Логин и пароль
5247

53-
**Логины и пароли не сохраняются, и используются только один раз - при входе.**
54-
Подробнее: [AuthHelper.java](/src/main/java/api/myitmo/utils/AuthHelper.java)
48+
```java
49+
MyItmo myItmo = new MyItmo();
50+
myItmo.auth("my_cool_id", "my_strong_password");
51+
```
52+
53+
Логин и пароль не сохраняются и используются только во время входа.
54+
55+
### Refresh token
56+
57+
```java
58+
MyItmo myItmo = new MyItmo();
59+
myItmo.getStorage().setRefreshToken("long_refresh_token");
60+
myItmo.getStorage().setRefreshExpiresAt(Long.MAX_VALUE);
61+
myItmo.forceRefreshTokens();
62+
```
5563

56-
По умолчанию токены хранятся в памяти, рекомендуется создать свою реализацию Storage, чтобы хранить как-то иначе:
64+
Токены по умолчанию хранятся только в памяти. Для постоянного хранения передайте собственную реализацию `Storage`:
5765

5866
```java
5967
MyItmo myItmo = new MyItmo();
60-
myItmo.setStorage(customStorageImpl);
68+
myItmo.setStorage(customStorage);
6169
```
6270

63-
Время жизни refreshToken - 30 дней, accessToken - 30 минут; если он устареет - токены обновятся.
71+
Не записывайте access token, refresh token, логин и пароль в логи или сообщения об ошибках.
72+
73+
## Использование API
6474

65-
#### API
75+
Методы доступны через `MyItmo#getApi()` и возвращают Retrofit `Call`.
6676

67-
Методы API доступны через **MyItmo#getApi()** <br>
68-
Например, получение расписания на сегодня и завтра:
77+
### Учебное расписание
6978

7079
```java
7180
MyItmo myItmo = new MyItmo();
72-
myItmo.setStorage(storageWithTokens); // или получите токены любым способом выше
81+
myItmo.setStorage(storageWithTokens);
82+
83+
LocalDate today = LocalDate.now();
84+
DataResponse<List<Schedule>> response = myItmo.getApi()
85+
.getPersonalSchedule(today, today.plusDays(1))
86+
.execute()
87+
.body();
7388

74-
LocalDate now = LocalDate.now();
75-
MyItmoResponse<List<Schedule>> r = myItmo.getApi().getPersonalSchedule(now, now.plusDays(1)).execute().body();
76-
List<Schedule> schedules = r.getData();
89+
List<Schedule> schedules = response == null ? null : response.getData();
7790
```
7891

79-
#### QR
92+
### Зачётка
93+
94+
```java
95+
ResultResponse<List<Specialization>> response = myItmo.getApi()
96+
.getSpecializations()
97+
.execute()
98+
.body();
99+
```
80100

81-
Генерировать QR-код (почти) 1-в-1 как приложение можно с помощью [io.nayuki/qrcodegen](https://central.sonatype.com/artifact/io.nayuki/qrcodegen) таким образом:
101+
Большинство методов использует `ResultResponse<T>`, где `errorCode == 0` означает успешный ответ. Старые сервисы расписания используют `DataResponse<T>` с аналогичным значением `code == 0`.
102+
103+
Полный перечень методов и параметров находится в [`MyItmoApi.java`](src/main/java/api/myitmo/MyItmoApi.java).
104+
105+
## QR-пропуск
106+
107+
Полученный HEX можно преобразовать в QR-код, например с помощью [io.nayuki/qrcodegen](https://central.sonatype.com/artifact/io.nayuki/qrcodegen):
82108

83109
```java
84110
String qrHex = "12345ABC";
85111
QrSegment segment = QrSegment.makeBytes(qrHex.getBytes(StandardCharsets.ISO_8859_1));
86-
QrCode qr = QrCode.encodeSegments(Collections.singletonList(segment), QrCode.Ecc.LOW, 1, 1, -1, false);
112+
QrCode qr = QrCode.encodeSegments(
113+
Collections.singletonList(segment),
114+
QrCode.Ecc.LOW,
115+
1,
116+
1,
117+
-1,
118+
false
119+
);
87120
```
121+
122+
## Особенности
123+
124+
MyITMO не предоставляет публичную документацию для всех используемых сервисов. Модели основаны на наблюдаемых ответах API, поэтому сервер может добавлять новые поля и справочные значения. Неизвестные, но подтверждённо присутствующие поля отмечены в моделях закомментированными объявлениями до уточнения их типов.

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>dev.alllexey</groupId>
88
<artifactId>my-itmo-api</artifactId>
9-
<version>1.5.0</version>
9+
<version>1.6.0</version>
1010

1111
<name>my-itmo-api</name>
1212
<description>An interface for MyITMO service</description>
@@ -219,4 +219,4 @@
219219
</plugins>
220220
</build>
221221

222-
</project>
222+
</project>

0 commit comments

Comments
 (0)