2023-04-04 17:01:50 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
#include <httplib/httplib.h>
|
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
|
2023-06-08 16:02:36 +00:00
|
|
|
#include "pixivmodels.h"
|
2023-06-09 06:42:21 +00:00
|
|
|
class Redis; // forward declared from hiredis_wrapper.h
|
2023-06-08 16:02:36 +00:00
|
|
|
|
2023-04-04 17:01:50 +00:00
|
|
|
class PixivClient {
|
|
|
|
public:
|
2023-06-08 16:02:36 +00:00
|
|
|
PixivClient(Redis* redis);
|
2023-04-04 17:01:50 +00:00
|
|
|
|
|
|
|
User get_user(uint64_t user_id);
|
2023-04-08 16:27:45 +00:00
|
|
|
Illusts get_illusts(uint64_t user_id, size_t page);
|
2023-04-08 16:06:56 +00:00
|
|
|
Illust get_illust(uint64_t illust_id);
|
2023-04-04 17:01:50 +00:00
|
|
|
|
2023-06-08 16:02:36 +00:00
|
|
|
SearchResults search_illusts(std::string query, size_t page, const std::string& order);
|
|
|
|
std::vector<SearchSuggestion> get_search_suggestions(std::string query);
|
2023-05-01 04:10:15 +00:00
|
|
|
|
2023-06-07 09:16:03 +00:00
|
|
|
bool i_pximg_url_valid(const std::string& path);
|
|
|
|
|
2023-04-04 17:01:50 +00:00
|
|
|
private:
|
2023-06-08 16:02:36 +00:00
|
|
|
nlohmann::json _call_api(std::string cache_key, std::optional<std::string> cache_field, time_t expiry,
|
|
|
|
std::string path, httplib::Params params, httplib::Headers headers);
|
2023-04-04 17:01:50 +00:00
|
|
|
httplib::Client _www_pixiv_net_client{"https://www.pixiv.net"};
|
2023-06-07 09:16:03 +00:00
|
|
|
httplib::Client _i_pximg_net_client{"https://i.pximg.net"};
|
2023-06-08 16:02:36 +00:00
|
|
|
Redis* _redis;
|
2023-04-04 17:01:50 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class HTTPLibException : public std::exception {
|
|
|
|
public:
|
|
|
|
HTTPLibException(httplib::Error error) {
|
|
|
|
this->_message = httplib::to_string(error);
|
|
|
|
}
|
|
|
|
|
2023-04-10 14:24:11 +00:00
|
|
|
inline const char* what() const noexcept {
|
2023-04-04 17:01:50 +00:00
|
|
|
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)) {}
|
|
|
|
|
2023-04-10 14:24:11 +00:00
|
|
|
inline const char* what() const noexcept {
|
2023-04-04 17:01:50 +00:00
|
|
|
return this->_message.c_str();
|
|
|
|
}
|
|
|
|
|
|
|
|
int status;
|
|
|
|
|
|
|
|
private:
|
|
|
|
std::string _message;
|
|
|
|
};
|