From 34ba40ca622a7362eb48618deae3c91eac4b6f9a Mon Sep 17 00:00:00 2001 From: Aotrix <9aotrix@protonmail.com> Date: Sun, 1 Feb 2026 02:55:28 +0100 Subject: Download all the cards with API --- battleNetApi/src/hearthstoneApi.cpp | 28 +++++++++++++++++++++++++++- battleNetApi/src/main.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 battleNetApi/src/main.cpp (limited to 'battleNetApi/src') diff --git a/battleNetApi/src/hearthstoneApi.cpp b/battleNetApi/src/hearthstoneApi.cpp index 1d2d870..7290a5d 100644 --- a/battleNetApi/src/hearthstoneApi.cpp +++ b/battleNetApi/src/hearthstoneApi.cpp @@ -1,14 +1,18 @@ #include "hearthstoneApi.hpp" +#include #include #include #include #include +#include #include HearthstoneApi::HearthstoneApi(Token &&iToken) : mToken(iToken), mAuthorizationHeader(authorizationHeader()) {} HearthstoneApi::HearthstoneApi(const Token &iToken) : mToken(iToken), mAuthorizationHeader(authorizationHeader()) {} -std::string HearthstoneApi::authorizationHeader() { return std::format("Authorization: Bearer {}", mToken.text()); } +std::string HearthstoneApi::authorizationHeader() const { + return std::format("Authorization: Bearer {}", mToken.text()); +} size_t HearthstoneApi::curlCallbackStringOutput(void *iContent, size_t iSize, size_t iNmemb, std::string *iS) { const size_t kNewLength = iSize * iNmemb; @@ -97,3 +101,25 @@ std::vector HearthstoneApi::makeApiRequest(const std::vector } return aJsonOutputs; } + +void HearthstoneApi::downloadAllCards(ApiUrl &iApiUrl, const std::string &iOutputJsonPath) const { + HearthstoneApi aHearthstoneApi(mToken); + iApiUrl.setPage("1"); + std::vector aRequests; + json aFirstPageJson = aHearthstoneApi.makeApiRequest(iApiUrl()); + + int kNumberOfPages{aFirstPageJson["pageCount"]}; + for (int i{1}; i < kNumberOfPages; ++i) { + iApiUrl.setPage(std::to_string(i + 1)); + aRequests.push_back(iApiUrl()); + } + json::reference &aMergedCards = aFirstPageJson["cards"]; + std::vector kApiResponses = aHearthstoneApi.makeApiRequest(aRequests); + for (json &aPage : kApiResponses) { + for (json::reference &aCard : aPage["cards"]) { + aMergedCards.push_back(std::move(aCard)); + } + } + std::ofstream aOutputJson(iOutputJsonPath); + aOutputJson << aMergedCards.dump(4); +} diff --git a/battleNetApi/src/main.cpp b/battleNetApi/src/main.cpp new file mode 100644 index 0000000..4e3885b --- /dev/null +++ b/battleNetApi/src/main.cpp @@ -0,0 +1,27 @@ +#include "apiUrl.hpp" +#include +#include +#include + +int main(int argc, char *argv[]) { + if (argc < 3) { + // Example of parameters: + // ./build/downloadCards tests/resources/credentials.json build/output.json + throw std::invalid_argument("/ "); + } + std::string aCredentialsFilePath{argv[1]}; + Token aToken(aCredentialsFilePath); + HearthstoneApi aHearthstoneApi(aToken); + std::string aOutputPath{argv[2]}; + const std::string kContentType{"cards"}; + const std::string kRegion{"eu"}; + ApiUrl aApiUrl(kContentType, kRegion); + aApiUrl.setLocale("fr_FR"); + aApiUrl.setGameMode("constructed"); + aApiUrl.setPageSize("100"); + std::cout << "Downloading cards...\n"; + aHearthstoneApi.downloadAllCards(aApiUrl, aOutputPath); + std::cout << "Download done.\n"; + + return 0; +} -- cgit v1.2.3