pixwhile/pixivclient.h

65 lines
1.3 KiB
C++

#pragma once
#include <vector>
#include <utility>
#include <optional>
#include <httplib/httplib.h>
#include <nlohmann/json.hpp>
struct Images {
std::optional<std::string> original;
std::vector<std::string> thumbnails;
};
struct User {
std::string username;
std::string display_name;
uint64_t user_id;
std::optional<Images> cover_images;
Images profile_pictures;
std::vector<std::pair<std::string, std::string>> links;
};
class PixivClient {
public:
PixivClient();
User get_user(uint64_t user_id);
private:
nlohmann::json _handle_result(httplib::Result res);
httplib::Client _www_pixiv_net_client{"https://www.pixiv.net"};
};
class HTTPLibException : public std::exception {
public:
HTTPLibException(httplib::Error error) {
this->_message = httplib::to_string(error);
}
const constexpr char* what() const noexcept {
return this->_message.c_str();
}
private:
std::string _message;
};
class PixivException : public std::exception {
public:
PixivException(int status_, std::string message) : status(status_), _message(std::move(message)) {}
const constexpr char* what() const noexcept {
return this->_message.c_str();
}
int status;
private:
std::string _message;
};
void from_json(const nlohmann::json& j, User& user);