Простенекий (назовем это так) "нтерфейс" для работы с школьным API, все что нужно это в аргументы конструктора передать ник\логин и пароль, после этого объект сам получит токен, и вы сможете приступить к работе, к сожалению пока что нету таймера, который по истечению валидности токена, обновил бы его.
Так же есть констурктор в который вы можете передать заведомо известный вам токен, если вы переживаете за безопасность данных (ну вдруг вы боитесь что я их украду). Ну и так же это просто удобно для отладки что бы каждый раз не получать новый токен.
s21Api api("YOUR_TOKEN");
Можете использовать данный код в своих проектах, переделывать и привносить новый функционал и фичи на свое усмотрение.
Если у вас есть какие либо вопросы и предложения стучитесь в телегу @robot3human0.
Так же проект открыт для контрибьюта.
- curl
- ssl
- json-cpp
Для установки на ubuntu можно воспользоваться такой командой:
sudo apt install libcurl4-openssl-dev libssl-dev libjsoncpp-dev
Пример компиляции программы:
g++ -g main.cc ./s21api.cc -o kebaba -lcurl -lssl -lcrypto -ljsoncpp
int main() {
s21Api api("yourlogin@student.21-school.ru", "YOUR PASS");
std::cout << api.Campus->campuses() << std::endl;
std::cout << api.Coalition->participant(50, 666, 30) << std::endl;
return 0;
}
*Для вызова API "Participant" требуется логин. Так вот на платформу он должен передаваться целиком т.е.:
yourlogin@student.21-school.ru но для удобства я сделал что можно вписать и просто логин. Оба следующих примера не будут ошибкой:
api.Participant->courses("aboba", 120);
api.Participant->courses("aboba@student.21-school.ru", 120);
Другая ситуация если вам нужен специфичный логин, например тестовый которые есть на платформе и у него отсутствует доменное имя ящика, то в конце списка аргументов нужно педеать "0" или "false":
api.Participant->participants("deadpooc", false); (к стати реальный тестовый ник)
- Так же глобально доступны такие enum "структры"
enum Type {
ACTIVITY = 1,
EXAM,
TEST
};
enum Status {
ASSIGNED = 1,
REGISTERED,
IN_PROGRESS,
IN_REVIEWS,
ACCEPTED,
FAILED
};
что так же облегчит вам жизнь. Примеры:
api.Participant->projects("werewolf", 30, 10, Status::ACCEPTED);
api.Event->events("2024-06-30T00:00:00Z", "2024-09-28T00:00:00Z" Type::ACTIVITY, 1, 1);
- Предпологаю нужен таймер для обновления токена. Пока что токен можно только получить автоматом но не обновить.
- Пока особо не задавался вопросом но предпологаю, что может быть было бы полезно, что бы все это работало асинхронно в несколько потоков.