coroutined Опубликовано: 29 апреля 2023 Опубликовано: 29 апреля 2023 (изменено) Привет, ты пришёл сюда из интереса или искал что-то полезное? Тогда ты в нужном месте, потому что это C++ библиотека для работы с VimeWorld API. Всю полезную информацию я разбил на главы, так что ориентироваться будет относительно легко. [История] C++ один из первых языков, который я стал изучать и один из первых, на который я забил. Вспомнив о нём я поставил себе задачу: написать что-то полезное для программистов, интересное для меня и при этом получить новых знаний с закреплением старых. Так и пришла в голову эта тема. Из SDK уже существовали реализации на Java, Python и Go, так почему бы мне не опробовать сделать такое?.. [Зависимости и версии] Стандарт: C++17 и новее. CMake: 3.11 и новее. Но лучше самую свежую... Внешние зависимости: 1. libcpr 1.10.2 - Легковесная библиотека для HTTP-запросов, ссылка на документацию. 2. jsoncpp 1.9.5 - Легковесная библиотека для JSON, ссылка на документацию. [Установка] 1. Скачать репозиторий. git clone https://github.com/coroutined/VimeCpp.git 2. Собрать проект с помощью cmake. mkdir VimeCpp\build && cd VimeCpp\build && cmake .. 3. Собрать библиотеку (--config может быть Debug/Release). cmake --build . --config=Release [Документация] Если вам необходимо знать всё о методах, то в client.hpp вы сможете прочитать какой метод за что отвечает. А может я в будущем сделаю нормальную документацию, не знаю. Будущее до безумия непредсказуемо. [Примеры] Взаимодействие с игроками: Скрытый текст auto [users, status] = api.getUsersByNames({"AlesteZ", "Okssi", "CharkosOff"}); std::tie(users, status) = api.getUsersByIDs({1476864, 94245, 4278493}); std::cout << "Users by nicknames:" << std::endl; if(status == RequestStatus::SUCCESS_CODE) { for(std::size_t index = 0; index < users.size(); index++) { User &user = users.at(index); std::cout << format("\tUser #{0}: {1} ({2} lvl, {3}%)", index, user.username, user.level, user.levelPercentage * 100) << std::endl; } } else { std::cout << "\tCode error: " << status << std::endl; } Взаимодействие со статистикой игрока: Скрытый текст auto [stats, status] = api.getUserStats(38609); std::cout << "BlockParty global stats:" << std::endl; for(std::string &key: stats["BP"]["global"].getMemberNames()) { std::cout << format("\t{0}: {1}", key, stats["BP"]["global"][key]) << std::endl; } std::cout << "BlockParty season stats:" << std::endl; for(std::string &key: stats["BP"]["season"]["monthly"].getMemberNames()) { std::cout << format("\t{0}: {1}", key, stats["BP"]["season"]["monthly"][key]) << std::endl; } auto bwhypeGlobal = stats["BWHYPE"]["global"]; std::cout << format("BedWars Hype total kills/deaths: {0}/{1}", bwhypeGlobal["kills"], bwhypeGlobal["deaths"]) << std::endl; Взаимодействие с матчами игрока: Скрытый текст auto [userMatches, status] = api.getUserMatchesOffset(38609); // 20 последних матчей игрока. std::tie(userMatches, status) = api.getUserMatchesOffset(38609, 5); // 20 матчей игрока после 5 последних игр. std::tie(userMatches, status) = api.getUserMatchesOffset(38609, 0, 1); // Последний матч. Взаимодействие с таблицами рекордов: Скрытый текст auto [leaders, status] = api.getLeaderboard("user", 20, 0); // Топ 20 пользователей по уровню. std::cout << leaders.leaderboard << std::endl; for(uint index = 0; index < leaders.records.size(); index++) { auto record = leaders.records[index]; std::cout << format("#{0}: {1} ({2} lvl, {3}%);", index + 1, record["username"], record["level"], record["levelPercentage"].asFloat() * 100) << std::endl; } std::tie(leaders, status) = api.getLeaderboard("guild", 10, 10, "total_coins"); // Топ 10 гильдий по вложенным коинам после 10 первых гильдий. std::cout << std::endl << leaders.leaderboard << std::endl; for(uint index = 0; index < leaders.records.size(); index++) { auto record = leaders.records[index]; std::cout << format("#{0}: {1}, ({2} lvl, {3}%), {4} coins total;", index + 11, record["name"], record["level"], record["levelPercentage"].asFloat() * 100, record["total_blocks"]) << std::endl; } std::tie(leaders, status) = api.getLeaderboard("prison", 5, 0); // Топ 5 игроков по блокам на Prison. std::cout << std::endl << leaders.leaderboard << std::endl; for(uint index = 0; index < leaders.records.size(); index++) { auto record = leaders.records[index]; std::cout << format("#{0}: {1}, {2} blocks total;", index + 1, record["user"]["username"], record["total_blocks"]) << std::endl; } Взаимодействие с информацией о матчах: Скрытый текст auto [match, status] = api.getMatch("572314156045172736"); if(match.game == "BP") { std::cout << "Found BlockParty:" << std::endl; std::cout << "\tTotal levels: " << match.additional["levels"]; std::cout << "Events:" << std::endl; for(uint index = 0; index < match.events.size(); index++) { auto gameEvent = match.events[index]; std::cout << format("\tEvent #{0}: {1}, player {2}, time elapsed {3};", index + 1, gameEvent["type"], gameEvent["player"], gameEvent["time"]) << std::endl; } std::cout << "Winner: " << match.winner["player"] << std::endl; } // else ... [Исходный код] Ссылка на GitHub-репозиторий. [Просто мысли] Если рассуждать на холодную голову, то я не отрицаю наличие говно-кода, который буду стараться править, поэтому опытных прошу писать в эту тему. Бонусом нужно отметить, что я ни разу не писал библиотеки, для меня это казалось что-то на ступеньке выше. А ещё я уверен, что людей пищущих на C++ найдётся не так уж много, но это уже не так важно. [Список изменений] [29.04.2023] v1.0: Релиз проекта. Изменено 29 апреля 2023 пользователем coroutined Незначительные исправления в теме. Charkos0ff, Jonny, AuBuKOPE3_TyT и 7 других 5 4 1
coroutined Опубликовано: 29 апреля 2023 Автор Опубликовано: 29 апреля 2023 1 час назад, KaiHavertz сказал: подпись крутая Благодарю. Жаль работа не моя, руки не из того места растут.
SweetSprite Опубликовано: 7 июля 2023 Опубликовано: 7 июля 2023 (изменено) на с++ ток с апи вайма и работать Изменено 7 июля 2023 пользователем SweetSprite Sunfle 1
Sunfle Опубликовано: 13 октября 2023 Опубликовано: 13 октября 2023 29.04.2023 в 12:25, coroutined сказал: std::
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас