Skip to content

Оболочка для удобного использования мобильного API Дневника на Java

Notifications You must be signed in to change notification settings

alllexey123/dnevnik-mobile-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Java Dnevnik Ru Mobile API

Оболочка для удобного использования мобильного API Дневника на Java

В стадии разработки...

Зависимости

  • Retrofit
  • Gson
  • RxJava3
  • Lombok

Документация

Официальная документация отсутствует

Использование

  1. Добавьте в pom.xml:
<dependency>
    <groupId>io.github.alllexey123</groupId>
    <artifactId>dnevnik-mobile-api</artifactId>
    <version>1.1.0</version>
</dependency>
  1. Создайте объект Dnevnik:
Dnevnik dnevnik = Dnevnik.create();
  1. Получение данных для использования API:
    • Передача токенов, айди пользователя и т.д. напрямую:
    Credentials credentials = new Credentials();
    credentials.setUserId(12345L); // used in many methods
    credentials.setAccessToken("abc123"); // used in almost all methods
    ...
    dnevnik.getStorage().setCredentials(credentials);
    • Вход по логину/паролю Дневника:
    dnevnik.getStorage().setCredentials(credentials);
    dnevnik.auth("my_cool_username", "my_strong_password")
        .blockingSubscribe(r -> {}, Throwable::printStackTrace);
    • Вход через Госуслуги:
    dnevnik.getEsiaRegions()
        .flattenAsFlowable(EsiaRegionsResponse::getRegions)
        .map(region -> region.getRegionId() + " " + region.getName() + " " + region.getEsiaUrl())
        .blockingSubscribe(System.out::println, Throwable::printStackTrace); // print regions and their auth links
    Через полученную ссылку нужно войти в аккаунт Госуслуг в браузере (или в эмуляторе), а после использовать полученный taskId для входа:
    String taskId = "123123-123123123-123123123-123123";
    int regionId = 123;
    
    dnevnik.esiaAuth(taskId, regionId)
        .blockingSubscribe(System.out::println, Throwable::printStackTrace);
  2. Обновление контекста пользователя:
dnevnik.updateUserContext()
    .blockingSubscribe(System.out::println, Throwable::printStackTrace); // print user context (example)

Обновление контекста необходимо для получения дополнительной информации о пользователе (группа, школа, личные данные и т.п.). Многое из этого используется в других запросах к API.

  1. Дальнейшее использование библиотеки: Класс Dnevnik содержит в себе все реализованные методы API, в которые не надо передавать такие параметры, как userId, groupId, accessToken и т.д., они передаются из объекта Storage. Можно создать свою реализацию Storage (например, хранить данные в БД). Доступ к чистому API можно получить так:
Dnevnik dnevnik = Dnevnik.create();
DnevnikApi api = dnevnik.api();

Взаимодействие с API реализовано благодаря RxJava3, все методы возвращают объект Single с результатом, либо исключение, которое можно обработать инструментами этой библиотеки. Если объект, возвращённый API, наследуется от Restrictable, то поля в нём могут быть скрыты из-за отсутствия подписки (это может быть оценка, рейтинг и т.д.).

Примеры

Вывод среднего балла ученика по предметам за текущий период:

// user context is required
dnevnik.getPeriodMarks(dnevnik.getStorage().getUserContext().getCurrentPeriod().getId())
    .flattenAsFlowable(PeriodMarksResponse::getPeriodMarks)
    .subscribe(finalMark -> {
        System.out.println(finalMark.getSubject().getName() + " " + finalMark.getAverageMarks().getAverageMark());
    }, Throwable::printStackTrace);

Вывод последних оценок через получение фида:

dnevnik.getUserFeed().flattenAsFlowable(FeedResponse::getRecentMarks)
    .map(FeedRecentMarkWrapper::getContent)
    .subscribe(recentMark -> {
        System.out.println(recentMark.getDate() + " " + recentMark.marksToString());
    }, Throwable::printStackTrace);

About

Оболочка для удобного использования мобильного API Дневника на Java

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages