spectrum2/backends/twitter/libtwitcurl/twitcurl.h
2016-01-21 15:58:35 +03:00

191 lines
6.7 KiB
C++

#ifndef _TWITCURL_H_
#define _TWITCURL_H_
#include <string>
#include <sstream>
#include <cstring>
#include <vector>
#include <algorithm>
#include "oauthlib.h"
#include "curl/curl.h"
/* Few common types used by twitCurl */
namespace twitCurlTypes
{
typedef enum _eTwitCurlApiFormatType
{
eTwitCurlApiFormatJson = 0,
eTwitCurlApiFormatXml,
eTwitCurlApiFormatMax
} eTwitCurlApiFormatType;
typedef enum _eTwitCurlProtocolType
{
eTwitCurlProtocolHttps = 0,
eTwitCurlProtocolHttp,
eTwitCurlProtocolMax
} eTwitCurlProtocolType;
};
/* twitCurl class */
class twitCurl
{
public:
twitCurl();
~twitCurl();
/* Twitter OAuth authorization methods */
oAuth& getOAuth();
bool oAuthRequestToken( std::string& authorizeUrl /* out */ );
bool oAuthAccessToken();
bool oAuthHandlePIN( const std::string& authorizeUrl /* in */ );
/* Twitter login APIs, set once and forget */
std::string& getTwitterUsername();
std::string& getTwitterPassword();
void setTwitterUsername( std::string& userName /* in */ );
void setTwitterPassword( std::string& passWord /* in */ );
/* Twitter search APIs */
bool search( std::string& searchQuery /* in */, std::string resultCount = "" /* in */ );
/* Twitter status APIs */
bool statusUpdate( std::string& newStatus /* in */, std::string inReplyToStatusId = "" /* in */ );
bool statusShowById( std::string& statusId /* in */ );
bool statusDestroyById( std::string& statusId /* in */ );
bool retweetById( std::string& statusId /* in */ );
/* Twitter timeline APIs */
bool timelineHomeGet( std::string sinceId = "" /* in */ );
bool timelinePublicGet();
bool timelineFriendsGet();
bool timelineUserGet( bool trimUser /* in */, bool includeRetweets /* in */,
unsigned int tweetCount /* in */,
std::string userInfo = "" /* in */,
bool isUserId = false /* in */ );
bool featuredUsersGet();
bool mentionsGet( std::string sinceId = "" /* in */ );
/* Twitter user APIs */
bool userLookup( std::vector<std::string> &userInfo /* in */, bool isUserId = false /* in */ );
bool userGet( std::string& userInfo /* in */, bool isUserId = false /* in */ );
bool friendsGet( std::string userInfo = "" /* in */, bool isUserId = false /* in */ );
bool followersGet( std::string userInfo = "" /* in */, bool isUserId = false /* in */ );
/* Twitter direct message APIs */
bool directMessageGet( std::string sinceId = "" /* in */ );
bool directMessageSend( std::string& userInfo /* in */, std::string& dMsg /* in */, bool isUserId = false /* in */ );
bool directMessageGetSent();
bool directMessageDestroyById( std::string& dMsgId /* in */ );
/* Twitter friendships APIs */
bool friendshipCreate( std::string& userInfo /* in */, bool isUserId = false /* in */ );
bool friendshipDestroy( std::string& userInfo /* in */, bool isUserId = false /* in */ );
bool friendshipShow( std::string& userInfo /* in */, bool isUserId = false /* in */ );
/* Twitter social graphs APIs */
bool friendsIdsGet( std::string& nextCursor /* in */,
std::string& userInfo /* in */, bool isUserId = false /* in */ );
bool followersIdsGet( std::string& nextCursor /* in */,
std::string& userInfo /* in */, bool isUserId = false /* in */ );
/* Twitter account APIs */
bool accountRateLimitGet();
bool accountVerifyCredGet();
/* Twitter favorites APIs */
bool favoriteGet();
bool favoriteCreate( std::string& statusId /* in */ );
bool favoriteDestroy( std::string& statusId /* in */ );
/* Twitter block APIs */
bool blockCreate( std::string& userInfo /* in */ );
bool blockDestroy( std::string& userInfo /* in */ );
bool blockListGet( std::string& nextCursor /* in */,
bool includeEntities /* in */, bool skipStatus /* in */ );
bool blockIdsGet( std::string& nextCursor /* in */, bool stringifyIds /* in */ );
/* Twitter search APIs */
bool savedSearchGet();
bool savedSearchCreate( std::string& query /* in */ );
bool savedSearchShow( std::string& searchId /* in */ );
bool savedSearchDestroy( std::string& searchId /* in */ );
/* Twitter trends APIs (JSON) */
bool trendsGet();
bool trendsDailyGet();
bool trendsWeeklyGet();
bool trendsCurrentGet();
bool trendsAvailableGet();
/* cURL APIs */
bool isCurlInit();
void getLastWebResponse( std::string& outWebResp /* out */ );
void getLastCurlError( std::string& outErrResp /* out */);
/* Internal cURL related methods */
int saveLastWebResponse( char*& data, size_t size );
/* cURL proxy APIs */
std::string& getProxyServerIp();
std::string& getProxyServerPort();
std::string& getProxyUserName();
std::string& getProxyPassword();
void setProxyServerIp( std::string& proxyServerIp /* in */ );
void setProxyServerPort( std::string& proxyServerPort /* in */ );
void setProxyUserName( std::string& proxyUserName /* in */ );
void setProxyPassword( std::string& proxyPassword /* in */ );
/* Clones this object */
twitCurl* clone();
private:
/* cURL data */
CURL* m_curlHandle;
char* m_errorBuffer;
std::string m_callbackData;
/* cURL flags */
bool m_curlProxyParamsSet;
bool m_curlLoginParamsSet;
bool m_curlCallbackParamsSet;
/* cURL proxy data */
std::string m_proxyServerIp;
std::string m_proxyServerPort;
std::string m_proxyUserName;
std::string m_proxyPassword;
/* Twitter data */
std::string m_twitterUsername;
std::string m_twitterPassword;
/* Twitter API type */
twitCurlTypes::eTwitCurlApiFormatType m_eApiFormatType;
twitCurlTypes::eTwitCurlProtocolType m_eProtocolType;
/* OAuth data */
oAuth m_oAuth;
/* Private methods */
void clearCurlCallbackBuffers();
void prepareCurlProxy();
void prepareCurlCallback();
void prepareCurlUserPass();
void prepareStandardParams();
bool performGet( const std::string& getUrl );
bool performGetInternal( const std::string& getUrl,
const std::string& oAuthHttpHeader );
bool performDelete( const std::string& deleteUrl );
bool performPost( const std::string& postUrl, std::string dataStr = "" );
/* Internal cURL related methods */
static int curlCallback( char* data, size_t size, size_t nmemb, twitCurl* pTwitCurlObj );
};
/* Private functions */
void utilMakeCurlParams( std::string& outStr, std::string& inParam1, std::string& inParam2 );
void utilMakeUrlForUser( std::string& outUrl, const std::string& baseUrl, std::string& userInfo, bool isUserId );
#endif // _TWITCURL_H_