From 40fb5c2d3f4b0ba3e84c18623bac7a0902307c5d Mon Sep 17 00:00:00 2001 From: vitalyster Date: Sun, 7 Jul 2013 07:19:15 +0000 Subject: [PATCH] update twitcurl dependency to latest revision --- backends/twitter/libtwitcurl/base64.cpp | 2 +- backends/twitter/libtwitcurl/base64.h | 2 +- backends/twitter/libtwitcurl/oauthlib.cpp | 241 +++---- backends/twitter/libtwitcurl/oauthlib.h | 36 - backends/twitter/libtwitcurl/twitcurl.cpp | 662 +++++++++++-------- backends/twitter/libtwitcurl/twitcurl.h | 154 +---- backends/twitter/libtwitcurl/twitcurl.vcproj | 8 +- backends/twitter/libtwitcurl/twitcurlurls.h | 156 +++++ backends/twitter/libtwitcurl/urlencode.cpp | 2 +- backends/twitter/libtwitcurl/urlencode.h | 2 +- 10 files changed, 701 insertions(+), 564 deletions(-) create mode 100644 backends/twitter/libtwitcurl/twitcurlurls.h diff --git a/backends/twitter/libtwitcurl/base64.cpp b/backends/twitter/libtwitcurl/base64.cpp index f4a1dc23..08951794 100644 --- a/backends/twitter/libtwitcurl/base64.cpp +++ b/backends/twitter/libtwitcurl/base64.cpp @@ -120,4 +120,4 @@ std::string base64_decode(std::string const& encoded_string) { } return ret; -} +} \ No newline at end of file diff --git a/backends/twitter/libtwitcurl/base64.h b/backends/twitter/libtwitcurl/base64.h index 870e09e0..639e696c 100644 --- a/backends/twitter/libtwitcurl/base64.h +++ b/backends/twitter/libtwitcurl/base64.h @@ -1,4 +1,4 @@ #include std::string base64_encode(unsigned char const* , unsigned int len); -std::string base64_decode(std::string const& s); +std::string base64_decode(std::string const& s); \ No newline at end of file diff --git a/backends/twitter/libtwitcurl/oauthlib.cpp b/backends/twitter/libtwitcurl/oauthlib.cpp index d3403d42..00732766 100644 --- a/backends/twitter/libtwitcurl/oauthlib.cpp +++ b/backends/twitter/libtwitcurl/oauthlib.cpp @@ -1,3 +1,4 @@ +#include "twitcurlurls.h" #include "oauthlib.h" #include "HMAC_SHA1.h" #include "base64.h" @@ -43,16 +44,16 @@ oAuth::~oAuth() *--*/ oAuth oAuth::clone() { - oAuth cloneObj; - cloneObj.m_consumerKey = m_consumerKey; - cloneObj.m_consumerSecret = m_consumerSecret; - cloneObj.m_oAuthTokenKey = m_oAuthTokenKey; - cloneObj.m_oAuthTokenSecret = m_oAuthTokenSecret; - cloneObj.m_oAuthPin = m_oAuthPin; - cloneObj.m_nonce = m_nonce; - cloneObj.m_timeStamp = m_timeStamp; - cloneObj.m_oAuthScreenName = m_oAuthScreenName; - return cloneObj; + oAuth cloneObj; + cloneObj.m_consumerKey = m_consumerKey; + cloneObj.m_consumerSecret = m_consumerSecret; + cloneObj.m_oAuthTokenKey = m_oAuthTokenKey; + cloneObj.m_oAuthTokenSecret = m_oAuthTokenSecret; + cloneObj.m_oAuthPin = m_oAuthPin; + cloneObj.m_nonce = m_nonce; + cloneObj.m_timeStamp = m_timeStamp; + cloneObj.m_oAuthScreenName = m_oAuthScreenName; + return cloneObj; } @@ -254,7 +255,7 @@ void oAuth::generateNonceTimeStamp() char szRand[oAuthLibDefaults::OAUTHLIB_BUFFSIZE]; memset( szTime, 0, oAuthLibDefaults::OAUTHLIB_BUFFSIZE ); memset( szRand, 0, oAuthLibDefaults::OAUTHLIB_BUFFSIZE ); - srand( time( NULL ) ); + srand( (unsigned int)time( NULL ) ); sprintf( szRand, "%x", rand()%1000 ); sprintf( szTime, "%ld", time( NULL ) ); @@ -285,35 +286,22 @@ void oAuth::buildOAuthRawDataKeyValPairs( const std::string& rawData, oAuthKeyValuePairs& rawDataKeyValuePairs ) { /* Raw data if it's present. Data should already be urlencoded once */ - if( rawData.length() ) + if( rawData.empty() ) { - size_t nSep = std::string::npos; - size_t nPos = std::string::npos; - std::string dataKeyVal; - std::string dataKey; - std::string dataVal; + return; + } - /* This raw data part can contain many key value pairs: key1=value1&key2=value2&key3=value3 */ - std::string dataPart = rawData; - while( std::string::npos != ( nSep = dataPart.find_first_of("&") ) ) - { - /* Extract first key=value pair */ - dataKeyVal = dataPart.substr( 0, nSep ); + size_t nSep = std::string::npos; + size_t nPos = std::string::npos; + std::string dataKeyVal; + std::string dataKey; + std::string dataVal; - /* Split them */ - nPos = dataKeyVal.find_first_of( "=" ); - if( std::string::npos != nPos ) - { - dataKey = dataKeyVal.substr( 0, nPos ); - dataVal = dataKeyVal.substr( nPos + 1 ); - - /* Put this key=value pair in map */ - rawDataKeyValuePairs[dataKey] = urlencodeData ? urlencode( dataVal ) : dataVal; - } - dataPart = dataPart.substr( nSep + 1 ); - } - - /* For the last key=value */ + /* This raw data part can contain many key value pairs: key1=value1&key2=value2&key3=value3 */ + std::string dataPart = rawData; + while( std::string::npos != ( nSep = dataPart.find_first_of("&") ) ) + { + /* Extract first key=value pair */ dataKeyVal = dataPart.substr( 0, nSep ); /* Split them */ @@ -326,6 +314,21 @@ void oAuth::buildOAuthRawDataKeyValPairs( const std::string& rawData, /* Put this key=value pair in map */ rawDataKeyValuePairs[dataKey] = urlencodeData ? urlencode( dataVal ) : dataVal; } + dataPart = dataPart.substr( nSep + 1 ); + } + + /* For the last key=value */ + dataKeyVal = dataPart.substr( 0, nSep ); + + /* Split them */ + nPos = dataKeyVal.find_first_of( "=" ); + if( std::string::npos != nPos ) + { + dataKey = dataKeyVal.substr( 0, nPos ); + dataVal = dataKeyVal.substr( nPos + 1 ); + + /* Put this key=value pair in map */ + rawDataKeyValuePairs[dataKey] = urlencodeData ? urlencode( dataVal ) : dataVal; } } @@ -390,7 +393,7 @@ bool oAuth::buildOAuthTokenKeyValuePairs( const bool includeOAuthVerifierPin, /* Version */ keyValueMap[oAuthLibDefaults::OAUTHLIB_VERSION_KEY] = std::string( "1.0" ); - return ( keyValueMap.size() ) ? true : false; + return !keyValueMap.empty(); } /*++ @@ -417,7 +420,7 @@ bool oAuth::getSignature( const eOAuthHttpRequestType eType, std::string sigBase; /* Initially empty signature */ - oAuthSignature.assign( "" ); + oAuthSignature = ""; /* Build a string using key-value pairs */ paramsSeperator = "&"; @@ -481,7 +484,7 @@ bool oAuth::getSignature( const eOAuthHttpRequestType eType, /* Do an url encode */ oAuthSignature = urlencode( base64Str ); - return ( oAuthSignature.length() ) ? true : false; + return !oAuthSignature.empty(); } /*++ @@ -511,7 +514,7 @@ bool oAuth::getOAuthHeader( const eOAuthHttpRequestType eType, std::string pureUrl( rawUrl ); /* Clear header string initially */ - oAuthHttpHeader.assign( "" ); + oAuthHttpHeader = ""; rawKeyValuePairs.clear(); /* If URL itself contains ?key=value, then extract and put them in map */ @@ -551,7 +554,7 @@ bool oAuth::getOAuthHeader( const eOAuthHttpRequestType eType, oAuthHttpHeader.assign( oAuthLibDefaults::OAUTHLIB_AUTHHEADER_STRING ); oAuthHttpHeader.append( rawParams ); - return ( oAuthHttpHeader.length() ) ? true : false; + return !oAuthHttpHeader.empty(); } /*++ @@ -571,48 +574,50 @@ bool oAuth::getStringFromOAuthKeyValuePairs( const oAuthKeyValuePairs& rawParamM std::string& rawParams, const std::string& paramsSeperator ) { - rawParams.assign( "" ); - if( rawParamMap.size() ) + rawParams = ""; + if( rawParamMap.empty() ) { - oAuthKeyValueList keyValueList; - std::string dummyStr; - - /* Push key-value pairs to a list of strings */ - keyValueList.clear(); - oAuthKeyValuePairs::const_iterator itMap = rawParamMap.begin(); - for( ; itMap != rawParamMap.end(); itMap++ ) - { - dummyStr.assign( itMap->first ); - dummyStr.append( "=" ); - if( paramsSeperator == "," ) - { - dummyStr.append( "\"" ); - } - dummyStr.append( itMap->second ); - if( paramsSeperator == "," ) - { - dummyStr.append( "\"" ); - } - keyValueList.push_back( dummyStr ); - } - - /* Sort key-value pairs based on key name */ - keyValueList.sort(); - - /* Now, form a string */ - dummyStr.assign( "" ); - oAuthKeyValueList::iterator itKeyValue = keyValueList.begin(); - for( ; itKeyValue != keyValueList.end(); itKeyValue++ ) - { - if( dummyStr.length() ) - { - dummyStr.append( paramsSeperator ); - } - dummyStr.append( itKeyValue->c_str() ); - } - rawParams.assign( dummyStr ); + return false; } - return ( rawParams.length() ) ? true : false; + + oAuthKeyValueList keyValueList; + std::string dummyStr; + + /* Push key-value pairs to a list of strings */ + keyValueList.clear(); + oAuthKeyValuePairs::const_iterator itMap = rawParamMap.begin(); + for( ; itMap != rawParamMap.end(); itMap++ ) + { + dummyStr.assign( itMap->first ); + dummyStr.append( "=" ); + if( paramsSeperator == "," ) + { + dummyStr.append( "\"" ); + } + dummyStr.append( itMap->second ); + if( paramsSeperator == "," ) + { + dummyStr.append( "\"" ); + } + keyValueList.push_back( dummyStr ); + } + + /* Sort key-value pairs based on key name */ + keyValueList.sort(); + + /* Now, form a string */ + dummyStr = ""; + oAuthKeyValueList::iterator itKeyValue = keyValueList.begin(); + for( ; itKeyValue != keyValueList.end(); itKeyValue++ ) + { + if( dummyStr.length() ) + { + dummyStr.append( paramsSeperator ); + } + dummyStr.append( itKeyValue->c_str() ); + } + rawParams = dummyStr; + return !rawParams.empty(); } /*++ @@ -628,45 +633,49 @@ bool oAuth::getStringFromOAuthKeyValuePairs( const oAuthKeyValuePairs& rawParamM *--*/ bool oAuth::extractOAuthTokenKeySecret( const std::string& requestTokenResponse ) { - if( requestTokenResponse.length() ) + if( requestTokenResponse.empty() ) { - size_t nPos = std::string::npos; - std::string strDummy; + return false; + } - /* Get oauth_token key */ - nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_TOKEN_KEY ); + size_t nPos = std::string::npos; + std::string strDummy; + + /* Get oauth_token key */ + nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_TOKEN_KEY ); + if( std::string::npos != nPos ) + { + nPos = nPos + oAuthLibDefaults::OAUTHLIB_TOKEN_KEY.length() + strlen( "=" ); + strDummy = requestTokenResponse.substr( nPos ); + nPos = strDummy.find( "&" ); if( std::string::npos != nPos ) { - nPos = nPos + oAuthLibDefaults::OAUTHLIB_TOKEN_KEY.length() + strlen( "=" ); - strDummy = requestTokenResponse.substr( nPos ); - nPos = strDummy.find( "&" ); - if( std::string::npos != nPos ) - { - m_oAuthTokenKey = strDummy.substr( 0, nPos ); - } - } - - /* Get oauth_token_secret */ - nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_TOKENSECRET_KEY ); - if( std::string::npos != nPos ) - { - nPos = nPos + oAuthLibDefaults::OAUTHLIB_TOKENSECRET_KEY.length() + strlen( "=" ); - strDummy = requestTokenResponse.substr( nPos ); - nPos = strDummy.find( "&" ); - if( std::string::npos != nPos ) - { - m_oAuthTokenSecret = strDummy.substr( 0, nPos ); - } - } - - /* Get screen_name */ - nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_SCREENNAME_KEY ); - if( std::string::npos != nPos ) - { - nPos = nPos + oAuthLibDefaults::OAUTHLIB_SCREENNAME_KEY.length() + strlen( "=" ); - strDummy = requestTokenResponse.substr( nPos ); - m_oAuthScreenName = strDummy; + m_oAuthTokenKey = strDummy.substr( 0, nPos ); } } + + /* Get oauth_token_secret */ + nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_TOKENSECRET_KEY ); + if( std::string::npos != nPos ) + { + nPos = nPos + oAuthLibDefaults::OAUTHLIB_TOKENSECRET_KEY.length() + strlen( "=" ); + strDummy = requestTokenResponse.substr( nPos ); + nPos = strDummy.find( "&" ); + if( std::string::npos != nPos ) + { + m_oAuthTokenSecret = strDummy.substr( 0, nPos ); + } + } + + /* Get screen_name */ + nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_SCREENNAME_KEY ); + if( std::string::npos != nPos ) + { + nPos = nPos + oAuthLibDefaults::OAUTHLIB_SCREENNAME_KEY.length() + strlen( "=" ); + strDummy = requestTokenResponse.substr( nPos ); + m_oAuthScreenName = strDummy; + } + return true; } + diff --git a/backends/twitter/libtwitcurl/oauthlib.h b/backends/twitter/libtwitcurl/oauthlib.h index 306ffc6b..b3ec577d 100644 --- a/backends/twitter/libtwitcurl/oauthlib.h +++ b/backends/twitter/libtwitcurl/oauthlib.h @@ -10,42 +10,6 @@ #include #include -namespace oAuthLibDefaults -{ - /* Constants */ - const int OAUTHLIB_BUFFSIZE = 1024; - const int OAUTHLIB_BUFFSIZE_LARGE = 1024; - const std::string OAUTHLIB_CONSUMERKEY_KEY = "oauth_consumer_key"; - const std::string OAUTHLIB_CALLBACK_KEY = "oauth_callback"; - const std::string OAUTHLIB_VERSION_KEY = "oauth_version"; - const std::string OAUTHLIB_SIGNATUREMETHOD_KEY = "oauth_signature_method"; - const std::string OAUTHLIB_SIGNATURE_KEY = "oauth_signature"; - const std::string OAUTHLIB_TIMESTAMP_KEY = "oauth_timestamp"; - const std::string OAUTHLIB_NONCE_KEY = "oauth_nonce"; - const std::string OAUTHLIB_TOKEN_KEY = "oauth_token"; - const std::string OAUTHLIB_TOKENSECRET_KEY = "oauth_token_secret"; - const std::string OAUTHLIB_VERIFIER_KEY = "oauth_verifier"; - const std::string OAUTHLIB_SCREENNAME_KEY = "screen_name"; - const std::string OAUTHLIB_AUTHENTICITY_TOKEN_KEY = "authenticity_token"; - const std::string OAUTHLIB_SESSIONUSERNAME_KEY = "session[username_or_email]"; - const std::string OAUTHLIB_SESSIONPASSWORD_KEY = "session[password]"; - const std::string OAUTHLIB_AUTHENTICITY_TOKEN_TWITTER_RESP_KEY = "authenticity_token\" type=\"hidden\" value=\""; - const std::string OAUTHLIB_TOKEN_TWITTER_RESP_KEY = "oauth_token\" type=\"hidden\" value=\""; - const std::string OAUTHLIB_PIN_TWITTER_RESP_KEY = "code-desc\">"; - const std::string OAUTHLIB_TOKEN_END_TAG_TWITTER_RESP = "\" />"; - const std::string OAUTHLIB_PIN_END_TAG_TWITTER_RESP = ""; - - const std::string OAUTHLIB_AUTHHEADER_STRING = "Authorization: OAuth "; -}; - -namespace oAuthTwitterApiUrls -{ - /* Twitter OAuth API URLs */ - const std::string OAUTHLIB_TWITTER_REQUEST_TOKEN_URL = "api.twitter.com/oauth/request_token"; - const std::string OAUTHLIB_TWITTER_AUTHORIZE_URL = "api.twitter.com/oauth/authorize?oauth_token="; - const std::string OAUTHLIB_TWITTER_ACCESS_TOKEN_URL = "api.twitter.com/oauth/access_token"; -}; - typedef enum _eOAuthHttpRequestType { eOAuthHttpInvalid = 0, diff --git a/backends/twitter/libtwitcurl/twitcurl.cpp b/backends/twitter/libtwitcurl/twitcurl.cpp index d8682ddf..9ad529a7 100644 --- a/backends/twitter/libtwitcurl/twitcurl.cpp +++ b/backends/twitter/libtwitcurl/twitcurl.cpp @@ -1,17 +1,9 @@ +#define NOMINMAX #include +#include "twitcurlurls.h" #include "twitcurl.h" #include "urlencode.h" -static int myDebugCallback(CURL *, - curl_infotype type, - char *data, - size_t size, - void *handle) -{ - std::cerr << std::string(data, size); - return 0; -}; - /*++ * @method: twitCurl::twitCurl * @@ -27,9 +19,12 @@ m_curlHandle( NULL ), m_curlProxyParamsSet( false ), m_curlLoginParamsSet( false ), m_curlCallbackParamsSet( false ), -m_eApiFormatType( twitCurlTypes::eTwitCurlApiFormatXml ), +m_eApiFormatType( twitCurlTypes::eTwitCurlApiFormatJson ), m_eProtocolType( twitCurlTypes::eTwitCurlProtocolHttps ) { + /* Alloc memory for cURL error responses */ + m_errorBuffer = (char*)malloc( twitCurlDefaults::TWITCURL_DEFAULT_BUFFSIZE ); + /* Clear callback buffers */ clearCurlCallbackBuffers(); @@ -40,9 +35,7 @@ m_eProtocolType( twitCurlTypes::eTwitCurlProtocolHttps ) std::string dummyStr; getLastCurlError( dummyStr ); } - curl_easy_setopt(m_curlHandle, CURLOPT_VERBOSE, 1); - curl_easy_setopt(m_curlHandle, CURLOPT_FOLLOWLOCATION, 1); - curl_easy_setopt(m_curlHandle, CURLOPT_DEBUGFUNCTION, myDebugCallback); + curl_easy_setopt(m_curlHandle, CURLOPT_SSL_VERIFYPEER, 0); } /*++ @@ -63,6 +56,11 @@ twitCurl::~twitCurl() curl_easy_cleanup( m_curlHandle ); m_curlHandle = NULL; } + if( m_errorBuffer ) + { + free( m_errorBuffer ); + m_errorBuffer = NULL; + } } /*++ @@ -77,57 +75,22 @@ twitCurl::~twitCurl() *--*/ twitCurl* twitCurl::clone() { - twitCurl *cloneObj = new twitCurl(); + twitCurl *cloneObj = new twitCurl(); - /* cURL proxy data */ - cloneObj->setProxyServerIp(m_proxyServerIp); - cloneObj->setProxyServerPort(m_proxyServerPort); - cloneObj->setProxyUserName(m_proxyUserName); - cloneObj->setProxyPassword(m_proxyPassword); + /* cURL proxy data */ + cloneObj->setProxyServerIp(m_proxyServerIp); + cloneObj->setProxyServerPort(m_proxyServerPort); + cloneObj->setProxyUserName(m_proxyUserName); + cloneObj->setProxyPassword(m_proxyPassword); - /* Twitter data */ - cloneObj->setTwitterUsername(m_twitterUsername); - cloneObj->setTwitterPassword(m_twitterPassword); + /* Twitter data */ + cloneObj->setTwitterUsername(m_twitterUsername); + cloneObj->setTwitterPassword(m_twitterPassword); - /* Twitter API type */ - cloneObj->setTwitterApiType(m_eApiFormatType); + /* OAuth data */ + cloneObj->m_oAuth = m_oAuth.clone(); - /* OAuth data */ - cloneObj->m_oAuth = m_oAuth.clone(); - - return cloneObj; -} - -/*++ -* @method: twitCurl::setTwitterApiType -* -* @description: method to set API type -* -* @input: none -* -* @output: none -* -*--*/ -void twitCurl::setTwitterApiType( twitCurlTypes::eTwitCurlApiFormatType eType ) -{ - m_eApiFormatType = ( eType < twitCurlTypes::eTwitCurlApiFormatMax ) ? - eType : twitCurlTypes::eTwitCurlApiFormatXml; -} - -/*++ -* @method: twitCurl::setTwitterProcotolType -* -* @description: method to set protocol -* -* @input: none -* -* @output: none -* -*--*/ -void twitCurl::setTwitterProcotolType( twitCurlTypes::eTwitCurlProtocolType eType ) -{ - m_eProtocolType = ( eType < twitCurlTypes::eTwitCurlProtocolMax ) ? - eType : twitCurlTypes::eTwitCurlProtocolHttp; + return cloneObj; } /*++ @@ -371,6 +334,7 @@ void twitCurl::setProxyPassword( std::string& proxyPassword ) * @description: method to return tweets that match a specified query. * * @input: searchQuery - search query in string format +* resultCount - optional search result count * * @output: true if GET is success, otherwise false. This does not check http * response by twitter. Use getLastWebResponse() for that. @@ -378,15 +342,22 @@ void twitCurl::setProxyPassword( std::string& proxyPassword ) * @note: Only ATOM and JSON format supported. * *--*/ -bool twitCurl::search( std::string& searchQuery ) +bool twitCurl::search( std::string& searchQuery, std::string resultCount ) { /* Prepare URL */ std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + twitterDefaults::TWITCURL_SEARCH_URL + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[twitCurlTypes::eTwitCurlApiFormatJson] + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType] + twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SEARCHQUERYSTRING + searchQuery; + /* Add number of results count if provided */ + if( resultCount.size() ) + { + buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_AMP + + twitCurlDefaults::TWITCURL_COUNT + urlencode( resultCount ); + } + /* Perform GET */ return performGet( buildUrl ); } @@ -396,27 +367,36 @@ bool twitCurl::search( std::string& searchQuery ) * * @description: method to update new status message in twitter profile * -* @input: newStatus +* @input: newStatus - status message text +* inReplyToStatusId - optional status id to we're replying to * * @output: true if POST is success, otherwise false. This does not check http * response by twitter. Use getLastWebResponse() for that. * *--*/ -bool twitCurl::statusUpdate( std::string& newStatus ) +bool twitCurl::statusUpdate( std::string& newStatus, std::string inReplyToStatusId ) { - bool retVal = false; - if( newStatus.length() ) + if( newStatus.empty() ) { - /* Prepare new status message */ - std::string newStatusMsg = twitCurlDefaults::TWITCURL_STATUSSTRING + urlencode( newStatus ); - - /* Perform POST */ - retVal = performPost( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_STATUSUPDATE_URL + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], - newStatusMsg ); + return false; } - return retVal; + + /* Prepare new status message */ + std::string newStatusMsg = twitCurlDefaults::TWITCURL_STATUSSTRING + urlencode( newStatus ); + + /* Append status id to which we're replying to */ + if( inReplyToStatusId.size() ) + { + newStatusMsg += twitCurlDefaults::TWITCURL_URL_SEP_AMP + + twitCurlDefaults::TWITCURL_INREPLYTOSTATUSID + + urlencode( inReplyToStatusId ); + } + + /* Perform POST */ + return performPost( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_STATUSUPDATE_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], + newStatusMsg ); } /*++ @@ -432,18 +412,18 @@ bool twitCurl::statusUpdate( std::string& newStatus ) *--*/ bool twitCurl::statusShowById( std::string& statusId ) { - bool retVal = false; - if( statusId.length() ) + if( statusId.empty() ) { - /* Prepare URL */ - std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_STATUSSHOW_URL + statusId + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; - - /* Perform GET */ - retVal = performGet( buildUrl ); + return false; } - return retVal; + + /* Prepare URL */ + std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_STATUSSHOW_URL + statusId + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; + + /* Perform GET */ + return performGet( buildUrl ); } /*++ @@ -459,18 +439,18 @@ bool twitCurl::statusShowById( std::string& statusId ) *--*/ bool twitCurl::statusDestroyById( std::string& statusId ) { - bool retVal = false; - if( statusId.length() ) + if( statusId.empty() ) { - /* Prepare URL */ - std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_STATUDESTROY_URL + statusId + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; - - /* Perform DELETE */ - retVal = performDelete( buildUrl ); + return false; } - return retVal; + + /* Prepare URL */ + std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_STATUDESTROY_URL + statusId + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; + + /* Perform DELETE */ + return performDelete( buildUrl ); } /*++ @@ -486,22 +466,22 @@ bool twitCurl::statusDestroyById( std::string& statusId ) *--*/ bool twitCurl::retweetById( std::string& statusId ) { - bool retVal = false; - if( statusId.length() ) - { - /* Prepare URL */ - std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_RETWEET_URL + statusId + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; + if( statusId.empty() ) + { + return false; + } - /* Send some dummy data in POST */ - std::string dummyData = twitCurlDefaults::TWITCURL_TEXTSTRING + - urlencode( std::string( "dummy" ) ); + /* Prepare URL */ + std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_RETWEET_URL + statusId + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; - /* Perform Retweet */ - retVal = performPost( buildUrl, dummyData ); - } - return retVal; + /* Send some dummy data in POST */ + std::string dummyData = twitCurlDefaults::TWITCURL_TEXTSTRING + + urlencode( std::string( "dummy" ) ); + + /* Perform Retweet */ + return performPost( buildUrl, dummyData ); } /*++ @@ -518,12 +498,13 @@ bool twitCurl::retweetById( std::string& statusId ) bool twitCurl::timelineHomeGet( std::string sinceId ) { std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_HOME_TIMELINE_URL + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; + twitterDefaults::TWITCURL_HOME_TIMELINE_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; if( sinceId.length() ) { buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SINCEID + sinceId; } + /* Perform GET */ return performGet( buildUrl ); } @@ -605,6 +586,7 @@ bool twitCurl::mentionsGet( std::string sinceId ) { buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SINCEID + sinceId; } + /* Perform GET */ return performGet( buildUrl ); } @@ -623,7 +605,8 @@ bool twitCurl::mentionsGet( std::string sinceId ) * response by twitter. Use getLastWebResponse() for that. * *--*/ -bool twitCurl::timelineUserGet( bool trimUser, bool includeRetweets, unsigned int tweetCount, std::string userInfo, bool isUserId ) +bool twitCurl::timelineUserGet( bool trimUser, bool includeRetweets, unsigned int tweetCount, + std::string userInfo, bool isUserId ) { /* Prepare URL */ std::string buildUrl; @@ -633,7 +616,7 @@ bool twitCurl::timelineUserGet( bool trimUser, bool includeRetweets, unsigned in twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], userInfo, isUserId ); - if( !userInfo.length() ) + if( userInfo.empty() ) { buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES; } @@ -678,26 +661,27 @@ bool twitCurl::timelineUserGet( bool trimUser, bool includeRetweets, unsigned in *--*/ bool twitCurl::userLookup( std::vector &userInfo, bool isUserId ) { - bool retVal = false; - - if( userInfo.size() ) + if( userInfo.empty() ) { - std::string userIds = ""; - std::string sep = ""; - for(int i=0 ; i &userInfo, bool isUserId ) *--*/ bool twitCurl::userGet( std::string& userInfo, bool isUserId ) { - bool retVal = false; - if( userInfo.length() ) + if( userInfo.empty() ) { - /* Set URL */ - std::string buildUrl; - utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_SHOWUSERS_URL + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], - userInfo, isUserId ); - - /* Perform GET */ - retVal = performGet( buildUrl ); + return false; } - return retVal; + + /* Set URL */ + std::string buildUrl; + utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_SHOWUSERS_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], + userInfo, isUserId ); + + /* Perform GET */ + return performGet( buildUrl ); } /*++ @@ -793,14 +777,14 @@ bool twitCurl::followersGet( std::string userInfo, bool isUserId ) *--*/ bool twitCurl::directMessageGet( std::string sinceId ) { - std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_DIRECTMESSAGES_URL + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; - - if(sinceId.length()) - { - buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SINCEID + sinceId; - } + std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_DIRECTMESSAGES_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; + + if( sinceId.length() ) + { + buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SINCEID + sinceId; + } /* Perform GET */ return performGet( buildUrl ); @@ -821,23 +805,23 @@ bool twitCurl::directMessageGet( std::string sinceId ) *--*/ bool twitCurl::directMessageSend( std::string& userInfo, std::string& dMsg, bool isUserId ) { - bool retVal = false; - if( userInfo.length() && dMsg.length() ) + if( userInfo.empty() || dMsg.empty() ) { - /* Prepare new direct message */ - std::string newDm = twitCurlDefaults::TWITCURL_TEXTSTRING + urlencode( dMsg ); - - /* Prepare URL */ - std::string buildUrl; - utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_DIRECTMESSAGENEW_URL + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], - userInfo, isUserId ); - - /* Perform POST */ - retVal = performPost( buildUrl, newDm ); + return false; } - return retVal; + + /* Prepare new direct message */ + std::string newDm = twitCurlDefaults::TWITCURL_TEXTSTRING + urlencode( dMsg ); + + /* Prepare URL */ + std::string buildUrl; + utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_DIRECTMESSAGENEW_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], + userInfo, isUserId ); + + /* Perform POST */ + return performPost( buildUrl, newDm ); } /*++ @@ -872,18 +856,18 @@ bool twitCurl::directMessageGetSent() *--*/ bool twitCurl::directMessageDestroyById( std::string& dMsgId ) { - bool retVal = false; - if( dMsgId.length() ) + if( dMsgId.empty() ) { - /* Prepare URL */ - std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_DIRECTMESSAGEDESTROY_URL + dMsgId + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; - - /* Perform DELETE */ - retVal = performDelete( buildUrl ); + return false; } - return retVal; + + /* Prepare URL */ + std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_DIRECTMESSAGEDESTROY_URL + dMsgId + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; + + /* Perform DELETE */ + return performDelete( buildUrl ); } /*++ @@ -900,24 +884,24 @@ bool twitCurl::directMessageDestroyById( std::string& dMsgId ) *--*/ bool twitCurl::friendshipCreate( std::string& userInfo, bool isUserId ) { - bool retVal = false; - if( userInfo.length() ) + if( userInfo.empty() ) { - /* Prepare URL */ - std::string buildUrl; - utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_FRIENDSHIPSCREATE_URL + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], - userInfo, isUserId ); - - /* Send some dummy data in POST */ - std::string dummyData = twitCurlDefaults::TWITCURL_TEXTSTRING + - urlencode( std::string( "dummy" ) ); - - /* Perform POST */ - retVal = performPost( buildUrl, dummyData ); + return false; } - return retVal; + + /* Prepare URL */ + std::string buildUrl; + utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_FRIENDSHIPSCREATE_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], + userInfo, isUserId ); + + /* Send some dummy data in POST */ + std::string dummyData = twitCurlDefaults::TWITCURL_TEXTSTRING + + urlencode( std::string( "dummy" ) ); + + /* Perform POST */ + return performPost( buildUrl, dummyData ); } /*++ @@ -934,20 +918,20 @@ bool twitCurl::friendshipCreate( std::string& userInfo, bool isUserId ) *--*/ bool twitCurl::friendshipDestroy( std::string& userInfo, bool isUserId ) { - bool retVal = false; - if( userInfo.length() ) + if( userInfo.empty() ) { - /* Prepare URL */ - std::string buildUrl; - utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - twitterDefaults::TWITCURL_FRIENDSHIPSDESTROY_URL + - twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], - userInfo, isUserId ); - - /* Perform DELETE */ - retVal = performDelete( buildUrl ); + return false; } - return retVal; + + /* Prepare URL */ + std::string buildUrl; + utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_FRIENDSHIPSDESTROY_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], + userInfo, isUserId ); + + /* Perform DELETE */ + return performDelete( buildUrl ); } /*++ @@ -994,12 +978,14 @@ bool twitCurl::friendshipShow( std::string& userInfo, bool isUserId ) * * @input: userInfo - user id or screen name of a user * isUserId - true if userInfo contains a user id instead of screen name +* nextCursor - next cursor string returned from a previous call +* to this API, otherwise an empty string * * @output: true if GET is success, otherwise false. This does not check http * response by twitter. Use getLastWebResponse() for that. * *--*/ -bool twitCurl::friendsIdsGet( std::string& userInfo, bool isUserId ) +bool twitCurl::friendsIdsGet( std::string& nextCursor, std::string& userInfo, bool isUserId ) { /* Prepare URL */ std::string buildUrl; @@ -1008,6 +994,13 @@ bool twitCurl::friendsIdsGet( std::string& userInfo, bool isUserId ) twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], userInfo, isUserId ); + if( buildUrl.length() && nextCursor.length() ) + { + buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_AMP + + twitCurlDefaults::TWITCURL_NEXT_CURSOR + + nextCursor; + } + /* Perform GET */ return performGet( buildUrl ); } @@ -1019,12 +1012,14 @@ bool twitCurl::friendsIdsGet( std::string& userInfo, bool isUserId ) * * @input: userInfo - user id or screen name of a user * isUserId - true if userInfo contains a user id instead of screen name +* nextCursor - next cursor string returned from a previous call +* to this API, otherwise an empty string * * @output: true if GET is success, otherwise false. This does not check http * response by twitter. Use getLastWebResponse() for that. * *--*/ -bool twitCurl::followersIdsGet( std::string& userInfo, bool isUserId ) +bool twitCurl::followersIdsGet( std::string& nextCursor, std::string& userInfo, bool isUserId ) { /* Prepare URL */ std::string buildUrl; @@ -1033,6 +1028,13 @@ bool twitCurl::followersIdsGet( std::string& userInfo, bool isUserId ) twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType], userInfo, isUserId ); + if( buildUrl.length() && nextCursor.length() ) + { + buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_AMP + + twitCurlDefaults::TWITCURL_NEXT_CURSOR + + nextCursor; + } + /* Perform GET */ return performGet( buildUrl ); } @@ -1147,7 +1149,7 @@ bool twitCurl::favoriteDestroy( std::string& statusId ) * * @description: method to block a user * -* @input: userInfo - user id or screen name +* @input: userInfo - user id or screen name who needs to be blocked * * @output: true if POST is success, otherwise false. This does not check http * response by twitter. Use getLastWebResponse() for that. @@ -1173,7 +1175,7 @@ bool twitCurl::blockCreate( std::string& userInfo ) * * @description: method to unblock a user * -* @input: userInfo - user id or screen name +* @input: userInfo - user id or screen name who need to unblocked * * @output: true if DELETE is success, otherwise false. This does not check http * response by twitter. Use getLastWebResponse() for that. @@ -1190,6 +1192,100 @@ bool twitCurl::blockDestroy( std::string& userInfo ) return performDelete( buildUrl ); } +/*++ +* @method: twitCurl::blockListGet +* +* @description: method to get list of users blocked by authenticated user +* +* @input: includeEntities - indicates whether or not to include 'entities' node +* skipStatus - indicates whether or not to include status for returned users +* nextCursor - next cursor string returned from a previous call +* to this API, otherwise an empty string +* +* @output: true if GET is success, otherwise false. This does not check http +* response by twitter. Use getLastWebResponse() for that. +* +*--*/ +bool twitCurl::blockListGet( std::string& nextCursor, bool includeEntities, bool skipStatus ) +{ + /* Prepare URL */ + std::string buildUrl, urlParams; + + buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_BLOCKSLIST_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; + if( includeEntities ) + { + urlParams += twitCurlDefaults::TWITCURL_INCLUDE_ENTITIES + std::string("true"); + } + if( skipStatus ) + { + if( urlParams.length() ) + { + urlParams += twitCurlDefaults::TWITCURL_URL_SEP_AMP; + } + urlParams += twitCurlDefaults::TWITCURL_SKIP_STATUS + std::string("true"); + } + if( nextCursor.length() ) + { + if( urlParams.length() ) + { + urlParams += twitCurlDefaults::TWITCURL_URL_SEP_AMP; + } + urlParams += twitCurlDefaults::TWITCURL_NEXT_CURSOR + nextCursor; + } + if( urlParams.length() ) + { + buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + urlParams; + } + + /* Perform GET */ + return performGet( buildUrl ); +} + +/*++ +* @method: twitCurl::blockIdsGet +* +* @description: method to get list of IDs blocked by authenticated user +* +* @input: stringifyIds - indicates whether or not returned ids should +* be in string format +* nextCursor - next cursor string returned from a previous call +* to this API, otherwise an empty string +* +* @output: true if GET is success, otherwise false. This does not check http +* response by twitter. Use getLastWebResponse() for that. +* +*--*/ +bool twitCurl::blockIdsGet( std::string& nextCursor, bool stringifyIds ) +{ + /* Prepare URL */ + std::string buildUrl, urlParams; + + buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + twitterDefaults::TWITCURL_BLOCKSIDS_URL + + twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType]; + if( stringifyIds ) + { + urlParams += twitCurlDefaults::TWITCURL_STRINGIFY_IDS + std::string("true"); + } + if( nextCursor.length() ) + { + if( urlParams.length() ) + { + urlParams += twitCurlDefaults::TWITCURL_URL_SEP_AMP; + } + urlParams += twitCurlDefaults::TWITCURL_NEXT_CURSOR + nextCursor; + } + if( urlParams.length() ) + { + buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + urlParams; + } + + /* Perform GET */ + return performGet( buildUrl ); +} + /*++ * @method: twitCurl::savedSearchGet * @@ -1433,13 +1529,12 @@ void twitCurl::getLastCurlError( std::string& outErrResp ) *--*/ int twitCurl::curlCallback( char* data, size_t size, size_t nmemb, twitCurl* pTwitCurlObj ) { - int writtenSize = 0; - if( ( NULL != pTwitCurlObj ) && ( NULL != data ) ) + if( pTwitCurlObj && data ) { /* Save http response in twitcurl object's buffer */ - writtenSize = pTwitCurlObj->saveLastWebResponse( data, ( size*nmemb ) ); + return pTwitCurlObj->saveLastWebResponse( data, ( size*nmemb ) ); } - return writtenSize; + return 0; } /*++ @@ -1458,14 +1553,13 @@ int twitCurl::curlCallback( char* data, size_t size, size_t nmemb, twitCurl* pTw *--*/ int twitCurl::saveLastWebResponse( char*& data, size_t size ) { - int bytesWritten = 0; if( data && size ) { /* Append data in our internal buffer */ m_callbackData.append( data, size ); - bytesWritten = (int)size; + return (int)size; } - return bytesWritten; + return 0; } /*++ @@ -1503,32 +1597,34 @@ void twitCurl::clearCurlCallbackBuffers() *--*/ void twitCurl::prepareCurlProxy() { - if( !m_curlProxyParamsSet ) + if( m_curlProxyParamsSet ) { - /* Reset existing proxy details in cURL */ - curl_easy_setopt( m_curlHandle, CURLOPT_PROXY, NULL ); - curl_easy_setopt( m_curlHandle, CURLOPT_PROXYUSERPWD, NULL ); - curl_easy_setopt( m_curlHandle, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY ); - - /* Set proxy details in cURL */ - std::string proxyIpPort(""); - if( getProxyServerIp().size() ) - { - utilMakeCurlParams( proxyIpPort, getProxyServerIp(), getProxyServerPort() ); - } - curl_easy_setopt( m_curlHandle, CURLOPT_PROXY, proxyIpPort.c_str() ); - - /* Prepare username and password for proxy server */ - if( m_proxyUserName.length() && m_proxyPassword.length() ) - { - std::string proxyUserPass; - utilMakeCurlParams( proxyUserPass, getProxyUserName(), getProxyPassword() ); - curl_easy_setopt( m_curlHandle, CURLOPT_PROXYUSERPWD, proxyUserPass.c_str() ); - } - - /* Set the flag to true indicating that proxy info is set in cURL */ - m_curlProxyParamsSet = true; + return; } + + /* Reset existing proxy details in cURL */ + curl_easy_setopt( m_curlHandle, CURLOPT_PROXY, NULL ); + curl_easy_setopt( m_curlHandle, CURLOPT_PROXYUSERPWD, NULL ); + curl_easy_setopt( m_curlHandle, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY ); + + /* Set proxy details in cURL */ + std::string proxyIpPort(""); + if( getProxyServerIp().size() ) + { + utilMakeCurlParams( proxyIpPort, getProxyServerIp(), getProxyServerPort() ); + } + curl_easy_setopt( m_curlHandle, CURLOPT_PROXY, proxyIpPort.c_str() ); + + /* Prepare username and password for proxy server */ + if( m_proxyUserName.length() && m_proxyPassword.length() ) + { + std::string proxyUserPass; + utilMakeCurlParams( proxyUserPass, getProxyUserName(), getProxyPassword() ); + curl_easy_setopt( m_curlHandle, CURLOPT_PROXYUSERPWD, proxyUserPass.c_str() ); + } + + /* Set the flag to true indicating that proxy info is set in cURL */ + m_curlProxyParamsSet = true; } /*++ @@ -1546,18 +1642,20 @@ void twitCurl::prepareCurlProxy() *--*/ void twitCurl::prepareCurlCallback() { - if( !m_curlCallbackParamsSet ) + if( m_curlCallbackParamsSet ) { - /* Set buffer to get error */ - curl_easy_setopt( m_curlHandle, CURLOPT_ERRORBUFFER, m_errorBuffer ); - - /* Set callback function to get response */ - curl_easy_setopt( m_curlHandle, CURLOPT_WRITEFUNCTION, curlCallback ); - curl_easy_setopt( m_curlHandle, CURLOPT_WRITEDATA, this ); - - /* Set the flag to true indicating that callback info is set in cURL */ - m_curlCallbackParamsSet = true; + return; } + + /* Set buffer to get error */ + curl_easy_setopt( m_curlHandle, CURLOPT_ERRORBUFFER, m_errorBuffer ); + + /* Set callback function to get response */ + curl_easy_setopt( m_curlHandle, CURLOPT_WRITEFUNCTION, curlCallback ); + curl_easy_setopt( m_curlHandle, CURLOPT_WRITEDATA, this ); + + /* Set the flag to true indicating that callback info is set in cURL */ + m_curlCallbackParamsSet = true; } /*++ @@ -1576,24 +1674,26 @@ void twitCurl::prepareCurlCallback() *--*/ void twitCurl::prepareCurlUserPass() { - if( !m_curlLoginParamsSet ) + if( m_curlLoginParamsSet ) { - /* Reset existing username and password stored in cURL */ - curl_easy_setopt( m_curlHandle, CURLOPT_USERPWD, "" ); - - if( getTwitterUsername().size() ) - { - /* Prepare username:password */ - std::string userNamePassword; - utilMakeCurlParams( userNamePassword, getTwitterUsername(), getTwitterPassword() ); - - /* Set username and password */ - curl_easy_setopt( m_curlHandle, CURLOPT_USERPWD, userNamePassword.c_str() ); - } - - /* Set the flag to true indicating that twitter credentials are set in cURL */ - m_curlLoginParamsSet = true; + return; } + + /* Reset existing username and password stored in cURL */ + curl_easy_setopt( m_curlHandle, CURLOPT_USERPWD, "" ); + + if( getTwitterUsername().size() ) + { + /* Prepare username:password */ + std::string userNamePassword; + utilMakeCurlParams( userNamePassword, getTwitterUsername(), getTwitterPassword() ); + + /* Set username and password */ + curl_easy_setopt( m_curlHandle, CURLOPT_USERPWD, userNamePassword.c_str() ); + } + + /* Set the flag to true indicating that twitter credentials are set in cURL */ + m_curlLoginParamsSet = true; } /*++ @@ -1614,8 +1714,8 @@ void twitCurl::prepareStandardParams() /* Restore any custom request we may have */ curl_easy_setopt( m_curlHandle, CURLOPT_CUSTOMREQUEST, NULL ); - /* All supported encodings */ - curl_easy_setopt( m_curlHandle, CURLOPT_ENCODING, "" ); + /* All supported encodings */ + curl_easy_setopt( m_curlHandle, CURLOPT_ENCODING, "" ); /* Clear callback and error buffers */ clearCurlCallbackBuffers(); @@ -1690,7 +1790,7 @@ bool twitCurl::performGet( const std::string& getUrl ) } /*++ -* @method: twitCurl::performGet +* @method: twitCurl::performGetInternal * * @description: method to send http GET request. this is an internal method. * twitcurl users should not use this method. @@ -1702,7 +1802,8 @@ bool twitCurl::performGet( const std::string& getUrl ) * @remarks: internal method * *--*/ -bool twitCurl::performGet( const std::string& getUrl, const std::string& oAuthHttpHeader ) +bool twitCurl::performGetInternal( const std::string& getUrl, + const std::string& oAuthHttpHeader ) { /* Return if cURL is not initialized */ if( !isCurlInit() ) @@ -1963,7 +2064,6 @@ bool twitCurl::oAuthRequestToken( std::string& authorizeUrl /* out */ ) } /* Get OAuth header for request token */ - bool retVal = false; std::string oAuthHeader; authorizeUrl = ""; if( m_oAuth.getOAuthHeader( eOAuthHttpGet, @@ -1972,8 +2072,9 @@ bool twitCurl::oAuthRequestToken( std::string& authorizeUrl /* out */ ) std::string( "" ), oAuthHeader ) ) { - if( performGet( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - oAuthTwitterApiUrls::OAUTHLIB_TWITTER_REQUEST_TOKEN_URL, oAuthHeader ) ) + if( performGetInternal( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + oAuthTwitterApiUrls::OAUTHLIB_TWITTER_REQUEST_TOKEN_URL, + oAuthHeader ) ) { /* Tell OAuth object to save access token and secret from web response */ std::string twitterResp; @@ -1989,10 +2090,10 @@ bool twitCurl::oAuthRequestToken( std::string& authorizeUrl /* out */ ) oAuthTwitterApiUrls::OAUTHLIB_TWITTER_AUTHORIZE_URL ); authorizeUrl.append( oAuthTokenKey.c_str() ); - retVal = true; + return true; } } - return retVal; + return false; } /*++ @@ -2013,7 +2114,6 @@ bool twitCurl::oAuthAccessToken() return false; } /* Get OAuth header for access token */ - bool retVal = false; std::string oAuthHeader; if( m_oAuth.getOAuthHeader( eOAuthHttpGet, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + @@ -2021,18 +2121,19 @@ bool twitCurl::oAuthAccessToken() std::string( "" ), oAuthHeader, true ) ) { - if( performGet( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + - oAuthTwitterApiUrls::OAUTHLIB_TWITTER_ACCESS_TOKEN_URL, oAuthHeader ) ) + if( performGetInternal( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + + oAuthTwitterApiUrls::OAUTHLIB_TWITTER_ACCESS_TOKEN_URL, + oAuthHeader ) ) { /* Tell OAuth object to save access token and secret from web response */ std::string twitterResp; getLastWebResponse( twitterResp ); m_oAuth.extractOAuthTokenKeySecret( twitterResp ); - retVal = true; + return true; } } - return retVal; + return false; } /*++ @@ -2187,3 +2288,4 @@ bool twitCurl::oAuthHandlePIN( const std::string& authorizeUrl /* in */ ) } return false; } + diff --git a/backends/twitter/libtwitcurl/twitcurl.h b/backends/twitter/libtwitcurl/twitcurl.h index 9017ac61..5e491088 100644 --- a/backends/twitter/libtwitcurl/twitcurl.h +++ b/backends/twitter/libtwitcurl/twitcurl.h @@ -1,8 +1,6 @@ #ifndef _TWITCURL_H_ #define _TWITCURL_H_ -#ifdef _WIN32 -#define NOMINMAX 1 -#endif + #include #include #include @@ -10,127 +8,24 @@ #include "oauthlib.h" #include "curl/curl.h" +/* Few common types used by twitCurl */ namespace twitCurlTypes { typedef enum _eTwitCurlApiFormatType { - eTwitCurlApiFormatXml = 0, - eTwitCurlApiFormatJson, + eTwitCurlApiFormatJson = 0, + eTwitCurlApiFormatXml, eTwitCurlApiFormatMax } eTwitCurlApiFormatType; typedef enum _eTwitCurlProtocolType { - eTwitCurlProtocolHttp = 0, - eTwitCurlProtocolHttps, + eTwitCurlProtocolHttps = 0, + eTwitCurlProtocolHttp, eTwitCurlProtocolMax } eTwitCurlProtocolType; }; -/* Default values used in twitcurl */ -namespace twitCurlDefaults -{ - /* Constants */ - const int TWITCURL_DEFAULT_BUFFSIZE = 1024; - const std::string TWITCURL_COLON = ":"; - const char TWITCURL_EOS = '\0'; - const unsigned int MAX_TIMELINE_TWEET_COUNT = 200; - - /* Miscellaneous data used to build twitter URLs*/ - const std::string TWITCURL_STATUSSTRING = "status="; - const std::string TWITCURL_TEXTSTRING = "text="; - const std::string TWITCURL_QUERYSTRING = "query="; - const std::string TWITCURL_SEARCHQUERYSTRING = "q="; - const std::string TWITCURL_SCREENNAME = "screen_name="; - const std::string TWITCURL_USERID = "user_id="; - const std::string TWITCURL_EXTENSIONFORMATS[2] = { ".xml", - ".json" - }; - const std::string TWITCURL_PROTOCOLS[2] = { "http://", - "https://" - }; - const std::string TWITCURL_TARGETSCREENNAME = "target_screen_name="; - const std::string TWITCURL_TARGETUSERID = "target_id="; - const std::string TWITCURL_SINCEID = "since_id="; - const std::string TWITCURL_TRIMUSER = "trim_user=true"; - const std::string TWITCURL_INCRETWEETS = "include_rts=true"; - const std::string TWITCURL_COUNT = "count="; - - /* URL separators */ - const std::string TWITCURL_URL_SEP_AMP = "&"; - const std::string TWITCURL_URL_SEP_QUES = "?"; -}; - -/* Default twitter URLs */ -namespace twitterDefaults -{ - - /* Search URLs */ - const std::string TWITCURL_SEARCH_URL = "search.twitter.com/search"; - - /* Status URLs */ - const std::string TWITCURL_STATUSUPDATE_URL = "api.twitter.com/1.1/statuses/update"; - const std::string TWITCURL_STATUSSHOW_URL = "api.twitter.com/1.1/statuses/show/"; - const std::string TWITCURL_STATUDESTROY_URL = "api.twitter.com/1.1/statuses/destroy/"; - const std::string TWITCURL_RETWEET_URL = "api.twitter.com/1.1/statuses/retweet/"; - - /* Timeline URLs */ - const std::string TWITCURL_HOME_TIMELINE_URL = "api.twitter.com/1.1/statuses/home_timeline"; - const std::string TWITCURL_PUBLIC_TIMELINE_URL = "api.twitter.com/1.1/statuses/public_timeline"; - const std::string TWITCURL_FEATURED_USERS_URL = "api.twitter.com/1.1/statuses/featured"; - const std::string TWITCURL_FRIENDS_TIMELINE_URL = "api.twitter.com/1.1/statuses/friends_timeline"; - const std::string TWITCURL_MENTIONS_URL = "api.twitter.com/1.1/statuses/mentions"; - const std::string TWITCURL_USERTIMELINE_URL = "api.twitter.com/1.1/statuses/user_timeline"; - - /* Users URLs */ - const std::string TWITCURL_LOOKUPUSERS_URL = "api.twitter.com/1.1/users/lookup"; - const std::string TWITCURL_SHOWUSERS_URL = "api.twitter.com/1.1/users/show"; - const std::string TWITCURL_SHOWFRIENDS_URL = "api.twitter.com/1.1/statuses/friends"; - const std::string TWITCURL_SHOWFOLLOWERS_URL = "api.twitter.com/1.1/statuses/followers"; - - /* Direct messages URLs */ - const std::string TWITCURL_DIRECTMESSAGES_URL = "api.twitter.com/1.1/direct_messages"; - const std::string TWITCURL_DIRECTMESSAGENEW_URL = "api.twitter.com/1.1/direct_messages/new"; - const std::string TWITCURL_DIRECTMESSAGESSENT_URL = "api.twitter.com/1.1/direct_messages/sent"; - const std::string TWITCURL_DIRECTMESSAGEDESTROY_URL = "api.twitter.com/1.1/direct_messages/destroy/"; - - /* Friendships URLs */ - const std::string TWITCURL_FRIENDSHIPSCREATE_URL = "api.twitter.com/1.1/friendships/create"; - const std::string TWITCURL_FRIENDSHIPSDESTROY_URL = "api.twitter.com/1.1/friendships/destroy"; - const std::string TWITCURL_FRIENDSHIPSSHOW_URL = "api.twitter.com/1.1/friendships/show"; - - /* Social graphs URLs */ - const std::string TWITCURL_FRIENDSIDS_URL = "api.twitter.com/1.1/friends/ids"; - const std::string TWITCURL_FOLLOWERSIDS_URL = "api.twitter.com/1.1/followers/ids"; - - /* Account URLs */ - const std::string TWITCURL_ACCOUNTRATELIMIT_URL = "api.twitter.com/1.1/account/rate_limit_status"; - const std::string TWITCURL_ACCOUNTVERIFYCRED_URL = "api.twitter.com/1.1/account/verify_credentials"; - - /* Favorites URLs */ - const std::string TWITCURL_FAVORITESGET_URL = "api.twitter.com/1.1/favorites"; - const std::string TWITCURL_FAVORITECREATE_URL = "api.twitter.com/1.1/favorites/create/"; - const std::string TWITCURL_FAVORITEDESTROY_URL = "api.twitter.com/1.1/favorites/destroy/"; - - /* Block URLs */ - const std::string TWITCURL_BLOCKSCREATE_URL = "api.twitter.com/1.1/blocks/create/"; - const std::string TWITCURL_BLOCKSDESTROY_URL = "api.twitter.com/1.1/blocks/destroy/"; - - /* Saved Search URLs */ - const std::string TWITCURL_SAVEDSEARCHGET_URL = "api.twitter.com/1.1/saved_searches"; - const std::string TWITCURL_SAVEDSEARCHSHOW_URL = "api.twitter.com/1.1/saved_searches/show/"; - const std::string TWITCURL_SAVEDSEARCHCREATE_URL = "api.twitter.com/1.1/saved_searches/create"; - const std::string TWITCURL_SAVEDSEARCHDESTROY_URL = "api.twitter.com/1.1/saved_searches/destroy/"; - - /* Trends URLs */ - const std::string TWITCURL_TRENDS_URL = "api.twitter.com/1.1/trends"; - const std::string TWITCURL_TRENDSDAILY_URL = "api.twitter.com/1.1/trends/daily"; - const std::string TWITCURL_TRENDSCURRENT_URL = "api.twitter.com/1.1/trends/current"; - const std::string TWITCURL_TRENDSWEEKLY_URL = "api.twitter.com/1.1/trends/weekly"; - const std::string TWITCURL_TRENDSAVAILABLE_URL = "api.twitter.com/1.1/trends/available"; - -}; - /* twitCurl class */ class twitCurl { @@ -150,15 +45,11 @@ public: void setTwitterUsername( std::string& userName /* in */ ); void setTwitterPassword( std::string& passWord /* in */ ); - /* Twitter API type */ - void setTwitterApiType( twitCurlTypes::eTwitCurlApiFormatType eType ); - void setTwitterProcotolType( twitCurlTypes::eTwitCurlProtocolType eType ); - /* Twitter search APIs */ - bool search( std::string& searchQuery /* in */ ); + bool search( std::string& searchQuery /* in */, std::string resultCount = "" /* in */ ); /* Twitter status APIs */ - bool statusUpdate( std::string& newStatus /* in */ ); + 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 */ ); @@ -167,18 +58,21 @@ public: 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 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 &userInfo /* in */, bool isUserId = false /* in */ ); + bool userLookup( std::vector &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 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 */ ); @@ -189,12 +83,15 @@ public: bool friendshipShow( std::string& userInfo /* in */, bool isUserId = false /* in */ ); /* Twitter social graphs APIs */ - bool friendsIdsGet( std::string& userInfo /* in */, bool isUserId = false /* in */ ); - bool followersIdsGet( std::string& userInfo /* in */, bool isUserId = false /* in */ ); + 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 */ ); @@ -203,6 +100,9 @@ public: /* 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(); @@ -234,13 +134,14 @@ public: void setProxyServerPort( std::string& proxyServerPort /* in */ ); void setProxyUserName( std::string& proxyUserName /* in */ ); void setProxyPassword( std::string& proxyPassword /* in */ ); - - twitCurl* clone(); + + /* Clones this object */ + twitCurl* clone(); private: /* cURL data */ CURL* m_curlHandle; - char m_errorBuffer[twitCurlDefaults::TWITCURL_DEFAULT_BUFFSIZE]; + char* m_errorBuffer; std::string m_callbackData; /* cURL flags */ @@ -272,7 +173,8 @@ private: void prepareCurlUserPass(); void prepareStandardParams(); bool performGet( const std::string& getUrl ); - bool performGet( const std::string& getUrl, const std::string& oAuthHttpHeader ); + 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 = "" ); diff --git a/backends/twitter/libtwitcurl/twitcurl.vcproj b/backends/twitter/libtwitcurl/twitcurl.vcproj index ecd787fd..f62da3eb 100644 --- a/backends/twitter/libtwitcurl/twitcurl.vcproj +++ b/backends/twitter/libtwitcurl/twitcurl.vcproj @@ -118,7 +118,7 @@ Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="./curl" + AdditionalIncludeDirectories="./include" PreprocessorDefinitions="WIN32;NDEBUG;_LIB;CURL_STATICLIB" StringPooling="true" RuntimeLibrary="2" @@ -144,7 +144,7 @@ + + diff --git a/backends/twitter/libtwitcurl/twitcurlurls.h b/backends/twitter/libtwitcurl/twitcurlurls.h new file mode 100644 index 00000000..4f91961d --- /dev/null +++ b/backends/twitter/libtwitcurl/twitcurlurls.h @@ -0,0 +1,156 @@ +#ifndef _TWITCURLURLS_H_ +#define _TWITCURLURLS_H_ + +#include +#include + +/* Default values used in twitcurl */ +namespace twitCurlDefaults +{ + /* Constants */ + const int TWITCURL_DEFAULT_BUFFSIZE = 1024; + const std::string TWITCURL_COLON = ":"; + const char TWITCURL_EOS = '\0'; + const unsigned int MAX_TIMELINE_TWEET_COUNT = 200; + + /* Miscellaneous data used to build twitter URLs*/ + const std::string TWITCURL_STATUSSTRING = "status="; + const std::string TWITCURL_TEXTSTRING = "text="; + const std::string TWITCURL_QUERYSTRING = "query="; + const std::string TWITCURL_SEARCHQUERYSTRING = "q="; + const std::string TWITCURL_SCREENNAME = "screen_name="; + const std::string TWITCURL_USERID = "user_id="; + const std::string TWITCURL_EXTENSIONFORMATS[2] = { ".json", + ".xml" + }; + const std::string TWITCURL_PROTOCOLS[2] = { "https://", + "http://" + }; + const std::string TWITCURL_TARGETSCREENNAME = "target_screen_name="; + const std::string TWITCURL_TARGETUSERID = "target_id="; + const std::string TWITCURL_SINCEID = "since_id="; + const std::string TWITCURL_TRIMUSER = "trim_user=true"; + const std::string TWITCURL_INCRETWEETS = "include_rts=true"; + const std::string TWITCURL_COUNT = "count="; + const std::string TWITCURL_NEXT_CURSOR = "cursor="; + const std::string TWITCURL_SKIP_STATUS = "skip_status="; + const std::string TWITCURL_INCLUDE_ENTITIES = "include_entities="; + const std::string TWITCURL_STRINGIFY_IDS = "stringify_ids="; + const std::string TWITCURL_INREPLYTOSTATUSID = "in_reply_to_status_id="; + + /* URL separators */ + const std::string TWITCURL_URL_SEP_AMP = "&"; + const std::string TWITCURL_URL_SEP_QUES = "?"; +}; + +/* Default twitter URLs */ +namespace twitterDefaults +{ + /* Base URL */ + const std::string TWITCURL_BASE_URL = "api.twitter.com/1.1/"; + + /* Search URLs */ + const std::string TWITCURL_SEARCH_URL = TWITCURL_BASE_URL + "search/tweets"; + + /* Status URLs */ + const std::string TWITCURL_STATUSUPDATE_URL = TWITCURL_BASE_URL + "statuses/update"; + const std::string TWITCURL_STATUSSHOW_URL = TWITCURL_BASE_URL + "statuses/show/"; + const std::string TWITCURL_STATUDESTROY_URL = TWITCURL_BASE_URL + "statuses/destroy/"; + const std::string TWITCURL_RETWEET_URL = TWITCURL_BASE_URL + "statuses/retweet/"; + + /* Timeline URLs */ + const std::string TWITCURL_HOME_TIMELINE_URL = TWITCURL_BASE_URL + "statuses/home_timeline"; + const std::string TWITCURL_PUBLIC_TIMELINE_URL = TWITCURL_BASE_URL + "statuses/public_timeline"; + const std::string TWITCURL_FEATURED_USERS_URL = TWITCURL_BASE_URL + "statuses/featured"; + const std::string TWITCURL_FRIENDS_TIMELINE_URL = TWITCURL_BASE_URL + "statuses/friends_timeline"; + const std::string TWITCURL_MENTIONS_URL = TWITCURL_BASE_URL + "statuses/mentions"; + const std::string TWITCURL_USERTIMELINE_URL = TWITCURL_BASE_URL + "statuses/user_timeline"; + + /* Users URLs */ + const std::string TWITCURL_LOOKUPUSERS_URL = TWITCURL_BASE_URL + "users/lookup"; + const std::string TWITCURL_SHOWUSERS_URL = TWITCURL_BASE_URL + "users/show"; + const std::string TWITCURL_SHOWFRIENDS_URL = TWITCURL_BASE_URL + "statuses/friends"; + const std::string TWITCURL_SHOWFOLLOWERS_URL = TWITCURL_BASE_URL + "statuses/followers"; + + /* Direct messages URLs */ + const std::string TWITCURL_DIRECTMESSAGES_URL = TWITCURL_BASE_URL + "direct_messages"; + const std::string TWITCURL_DIRECTMESSAGENEW_URL = TWITCURL_BASE_URL + "direct_messages/new"; + const std::string TWITCURL_DIRECTMESSAGESSENT_URL = TWITCURL_BASE_URL + "direct_messages/sent"; + const std::string TWITCURL_DIRECTMESSAGEDESTROY_URL = TWITCURL_BASE_URL + "direct_messages/destroy/"; + + /* Friendships URLs */ + const std::string TWITCURL_FRIENDSHIPSCREATE_URL = TWITCURL_BASE_URL + "friendships/create"; + const std::string TWITCURL_FRIENDSHIPSDESTROY_URL = TWITCURL_BASE_URL + "friendships/destroy"; + const std::string TWITCURL_FRIENDSHIPSSHOW_URL = TWITCURL_BASE_URL + "friendships/show"; + + /* Social graphs URLs */ + const std::string TWITCURL_FRIENDSIDS_URL = TWITCURL_BASE_URL + "friends/ids"; + const std::string TWITCURL_FOLLOWERSIDS_URL = TWITCURL_BASE_URL + "followers/ids"; + + /* Account URLs */ + const std::string TWITCURL_ACCOUNTRATELIMIT_URL = TWITCURL_BASE_URL + "account/rate_limit_status"; + const std::string TWITCURL_ACCOUNTVERIFYCRED_URL = TWITCURL_BASE_URL + "account/verify_credentials"; + + /* Favorites URLs */ + const std::string TWITCURL_FAVORITESGET_URL = TWITCURL_BASE_URL + "favorites"; + const std::string TWITCURL_FAVORITECREATE_URL = TWITCURL_BASE_URL + "favorites/create/"; + const std::string TWITCURL_FAVORITEDESTROY_URL = TWITCURL_BASE_URL + "favorites/destroy/"; + + /* Block URLs */ + const std::string TWITCURL_BLOCKSCREATE_URL = TWITCURL_BASE_URL + "blocks/create/"; + const std::string TWITCURL_BLOCKSDESTROY_URL = TWITCURL_BASE_URL + "blocks/destroy/"; + const std::string TWITCURL_BLOCKSLIST_URL = TWITCURL_BASE_URL + "blocks/list"; + const std::string TWITCURL_BLOCKSIDS_URL = TWITCURL_BASE_URL + "blocks/ids"; + + /* Saved Search URLs */ + const std::string TWITCURL_SAVEDSEARCHGET_URL = TWITCURL_BASE_URL + "saved_searches"; + const std::string TWITCURL_SAVEDSEARCHSHOW_URL = TWITCURL_BASE_URL + "saved_searches/show/"; + const std::string TWITCURL_SAVEDSEARCHCREATE_URL = TWITCURL_BASE_URL + "saved_searches/create"; + const std::string TWITCURL_SAVEDSEARCHDESTROY_URL = TWITCURL_BASE_URL + "saved_searches/destroy/"; + + /* Trends URLs */ + const std::string TWITCURL_TRENDS_URL = TWITCURL_BASE_URL + "trends"; + const std::string TWITCURL_TRENDSDAILY_URL = TWITCURL_BASE_URL + "trends/daily"; + const std::string TWITCURL_TRENDSCURRENT_URL = TWITCURL_BASE_URL + "trends/current"; + const std::string TWITCURL_TRENDSWEEKLY_URL = TWITCURL_BASE_URL + "trends/weekly"; + const std::string TWITCURL_TRENDSAVAILABLE_URL = TWITCURL_BASE_URL + "trends/available"; + +}; + +namespace oAuthLibDefaults +{ + /* Constants */ + const int OAUTHLIB_BUFFSIZE = 1024; + const int OAUTHLIB_BUFFSIZE_LARGE = 1024; + const std::string OAUTHLIB_CONSUMERKEY_KEY = "oauth_consumer_key"; + const std::string OAUTHLIB_CALLBACK_KEY = "oauth_callback"; + const std::string OAUTHLIB_VERSION_KEY = "oauth_version"; + const std::string OAUTHLIB_SIGNATUREMETHOD_KEY = "oauth_signature_method"; + const std::string OAUTHLIB_SIGNATURE_KEY = "oauth_signature"; + const std::string OAUTHLIB_TIMESTAMP_KEY = "oauth_timestamp"; + const std::string OAUTHLIB_NONCE_KEY = "oauth_nonce"; + const std::string OAUTHLIB_TOKEN_KEY = "oauth_token"; + const std::string OAUTHLIB_TOKENSECRET_KEY = "oauth_token_secret"; + const std::string OAUTHLIB_VERIFIER_KEY = "oauth_verifier"; + const std::string OAUTHLIB_SCREENNAME_KEY = "screen_name"; + const std::string OAUTHLIB_AUTHENTICITY_TOKEN_KEY = "authenticity_token"; + const std::string OAUTHLIB_SESSIONUSERNAME_KEY = "session[username_or_email]"; + const std::string OAUTHLIB_SESSIONPASSWORD_KEY = "session[password]"; + const std::string OAUTHLIB_AUTHENTICITY_TOKEN_TWITTER_RESP_KEY = "authenticity_token\" type=\"hidden\" value=\""; + const std::string OAUTHLIB_TOKEN_TWITTER_RESP_KEY = "oauth_token\" type=\"hidden\" value=\""; + const std::string OAUTHLIB_PIN_TWITTER_RESP_KEY = "code-desc\">"; + const std::string OAUTHLIB_TOKEN_END_TAG_TWITTER_RESP = "\" />"; + const std::string OAUTHLIB_PIN_END_TAG_TWITTER_RESP = ""; + + const std::string OAUTHLIB_AUTHHEADER_STRING = "Authorization: OAuth "; +}; + +namespace oAuthTwitterApiUrls +{ + /* Twitter OAuth API URLs */ + const std::string OAUTHLIB_TWITTER_REQUEST_TOKEN_URL = "api.twitter.com/oauth/request_token"; + const std::string OAUTHLIB_TWITTER_AUTHORIZE_URL = "api.twitter.com/oauth/authorize?oauth_token="; + const std::string OAUTHLIB_TWITTER_ACCESS_TOKEN_URL = "api.twitter.com/oauth/access_token"; +}; + +#endif // _TWITCURLURLS_H_ diff --git a/backends/twitter/libtwitcurl/urlencode.cpp b/backends/twitter/libtwitcurl/urlencode.cpp index dc2cbdfe..8a906b25 100644 --- a/backends/twitter/libtwitcurl/urlencode.cpp +++ b/backends/twitter/libtwitcurl/urlencode.cpp @@ -37,4 +37,4 @@ std::string urlencode( const std::string &c ) } } return escaped; -} +} \ No newline at end of file diff --git a/backends/twitter/libtwitcurl/urlencode.h b/backends/twitter/libtwitcurl/urlencode.h index 5df943d8..21d32503 100644 --- a/backends/twitter/libtwitcurl/urlencode.h +++ b/backends/twitter/libtwitcurl/urlencode.h @@ -7,4 +7,4 @@ std::string char2hex( char dec ); std::string urlencode( const std::string &c ); -#endif // __URLENCODE_H__ +#endif // __URLENCODE_H__ \ No newline at end of file