From 28691c29e93fbc4fdb5ae4866287282840fba021 Mon Sep 17 00:00:00 2001 From: randomdan Date: Fri, 19 Sep 2014 23:52:30 +0000 Subject: First bash at a slicer ice proxy for TMDb and an untested instantiation in p2pvr's core adapter --- libtmdb/httpClient.h | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 libtmdb/httpClient.h (limited to 'libtmdb/httpClient.h') diff --git a/libtmdb/httpClient.h b/libtmdb/httpClient.h new file mode 100644 index 0000000..1b50b7e --- /dev/null +++ b/libtmdb/httpClient.h @@ -0,0 +1,73 @@ +#include +#include +#include +#include +#include +#include + +namespace TMDb { + class HttpClient { + public: + class ParameterValue { + public: + ParameterValue(const std::string & v) : + value(v) + { + } + + template + ParameterValue(const V & v) : + value(boost::lexical_cast(v)) + { + } + + template + ParameterValue(const IceUtil::Optional & v) : + value(v ? boost::lexical_cast(*v) : IceUtil::Optional()) + { + } + + IceUtil::Optional value; + }; + typedef std::map Parameters; + + protected: + HttpClient(const std::string & baseUrl, const std::string & apikey); + + template + std::string + GetUrl(const std::string & pathFormat, const Params & ... params, const Parameters & parameters) const + { + boost::format path(pathFormat); + packParams(path, params...); + std::string pathStr(path.str()); + appendQueryParameters(pathStr, parameters); + return BaseURL + pathStr; + } + + template + IceInternal::Handle + GetData(const std::string & pathFormat, const Params & ... params, const Parameters & parameters) const + { + json::Value data = FetchJson(GetUrl(pathFormat, params..., parameters)); + return Slicer::Deserialize(data); + } + + static void packParams(boost::format &); + + template + static void packParams(boost::format & fmt, const T & param, const Ts & ... params) + { + fmt % param; + packParams(fmt, params...); + } + + void appendQueryParameters(std::string & path, const Parameters & parameters) const; + void appendQueryParameters(std::string & path, const Parameters::value_type & nvp) const; + json::Value FetchJson(const std::string & path) const; + + const std::string BaseURL; + const std::string ApiKey; + }; +}; + -- cgit v1.2.3