2012-05-23 14:33:08 +05:30
# ifndef _TWITCURL_H_
# define _TWITCURL_H_
# include <string>
2012-05-31 23:04:31 +05:30
# include <vector>
# include <iostream>
2012-05-23 14:33:08 +05:30
# include <sstream>
# include <cstring>
# include "oauthlib.h"
# include "curl/curl.h"
namespace twitCurlTypes
{
typedef enum _eTwitCurlApiFormatType
{
eTwitCurlApiFormatXml = 0 ,
eTwitCurlApiFormatJson ,
eTwitCurlApiFormatMax
} eTwitCurlApiFormatType ;
} ;
/* 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_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=1 " ;
const std : : string TWITCURL_INCRETWEETS = " include_rts=1 " ;
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 = " http://search.twitter.com/search " ;
/* Status URLs */
const std : : string TWITCURL_STATUSUPDATE_URL = " http://api.twitter.com/1/statuses/update " ;
const std : : string TWITCURL_STATUSSHOW_URL = " http://api.twitter.com/1/statuses/show/ " ;
const std : : string TWITCURL_STATUDESTROY_URL = " http://api.twitter.com/1/statuses/destroy/ " ;
/* Timeline URLs */
const std : : string TWITCURL_HOME_TIMELINE_URL = " http://api.twitter.com/1/statuses/home_timeline " ;
const std : : string TWITCURL_PUBLIC_TIMELINE_URL = " http://api.twitter.com/1/statuses/public_timeline " ;
const std : : string TWITCURL_FEATURED_USERS_URL = " http://api.twitter.com/1/statuses/featured " ;
const std : : string TWITCURL_FRIENDS_TIMELINE_URL = " http://api.twitter.com/1/statuses/friends_timeline " ;
const std : : string TWITCURL_MENTIONS_URL = " http://api.twitter.com/1/statuses/mentions " ;
const std : : string TWITCURL_USERTIMELINE_URL = " http://api.twitter.com/1/statuses/user_timeline " ;
/* Users URLs */
2012-05-31 23:04:31 +05:30
const std : : string TWITCURL_LOOKUPUSERS_URL = " http://api.twitter.com/1/users/lookup " ;
2012-05-23 14:33:08 +05:30
const std : : string TWITCURL_SHOWUSERS_URL = " http://api.twitter.com/1/users/show " ;
const std : : string TWITCURL_SHOWFRIENDS_URL = " http://api.twitter.com/1/statuses/friends " ;
const std : : string TWITCURL_SHOWFOLLOWERS_URL = " http://api.twitter.com/1/statuses/followers " ;
/* Direct messages URLs */
const std : : string TWITCURL_DIRECTMESSAGES_URL = " http://api.twitter.com/1/direct_messages " ;
const std : : string TWITCURL_DIRECTMESSAGENEW_URL = " http://api.twitter.com/1/direct_messages/new " ;
const std : : string TWITCURL_DIRECTMESSAGESSENT_URL = " http://api.twitter.com/1/direct_messages/sent " ;
const std : : string TWITCURL_DIRECTMESSAGEDESTROY_URL = " http://api.twitter.com/1/direct_messages/destroy/ " ;
/* Friendships URLs */
const std : : string TWITCURL_FRIENDSHIPSCREATE_URL = " http://api.twitter.com/1/friendships/create " ;
const std : : string TWITCURL_FRIENDSHIPSDESTROY_URL = " http://api.twitter.com/1/friendships/destroy " ;
const std : : string TWITCURL_FRIENDSHIPSSHOW_URL = " http://api.twitter.com/1/friendships/show " ;
/* Social graphs URLs */
const std : : string TWITCURL_FRIENDSIDS_URL = " http://api.twitter.com/1/friends/ids " ;
const std : : string TWITCURL_FOLLOWERSIDS_URL = " http://api.twitter.com/1/followers/ids " ;
/* Account URLs */
const std : : string TWITCURL_ACCOUNTRATELIMIT_URL = " http://api.twitter.com/1/account/rate_limit_status " ;
/* Favorites URLs */
const std : : string TWITCURL_FAVORITESGET_URL = " http://api.twitter.com/1/favorites " ;
const std : : string TWITCURL_FAVORITECREATE_URL = " http://api.twitter.com/1/favorites/create/ " ;
const std : : string TWITCURL_FAVORITEDESTROY_URL = " http://api.twitter.com/1/favorites/destroy/ " ;
/* Block URLs */
const std : : string TWITCURL_BLOCKSCREATE_URL = " http://api.twitter.com/1/blocks/create/ " ;
const std : : string TWITCURL_BLOCKSDESTROY_URL = " http://api.twitter.com/1/blocks/destroy/ " ;
/* Saved Search URLs */
const std : : string TWITCURL_SAVEDSEARCHGET_URL = " http://api.twitter.com/1/saved_searches " ;
const std : : string TWITCURL_SAVEDSEARCHSHOW_URL = " http://api.twitter.com/1/saved_searches/show/ " ;
const std : : string TWITCURL_SAVEDSEARCHCREATE_URL = " http://api.twitter.com/1/saved_searches/create " ;
const std : : string TWITCURL_SAVEDSEARCHDESTROY_URL = " http://api.twitter.com/1/saved_searches/destroy/ " ;
/* Trends URLs */
const std : : string TWITCURL_TRENDS_URL = " http://api.twitter.com/1/trends " ;
const std : : string TWITCURL_TRENDSDAILY_URL = " http://api.twitter.com/1/trends/daily " ;
const std : : string TWITCURL_TRENDSCURRENT_URL = " http://api.twitter.com/1/trends/current " ;
const std : : string TWITCURL_TRENDSWEEKLY_URL = " http://api.twitter.com/1/trends/weekly " ;
const std : : string TWITCURL_TRENDSAVAILABLE_URL = " http://api.twitter.com/1/trends/available " ;
} ;
/* 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 API type */
void setTwitterApiType ( twitCurlTypes : : eTwitCurlApiFormatType eType ) ;
/* Twitter search APIs */
bool search ( std : : string & searchQuery /* in */ ) ;
/* Twitter status APIs */
bool statusUpdate ( std : : string & newStatus /* in */ ) ;
bool statusShowById ( std : : string & statusId /* in */ ) ;
bool statusDestroyById ( std : : string & statusId /* in */ ) ;
/* Twitter timeline APIs */
2012-05-29 19:38:29 +05:30
bool timelineHomeGet ( ) ;
2012-05-23 14:33:08 +05:30
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 */
2012-05-31 23:04:31 +05:30
bool userLookup ( std : : vector < std : : string > & userInfo /* in */ , bool isUserId = false /* in */ ) ;
2012-05-23 14:33:08 +05:30
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 ( ) ;
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 & userInfo /* in */ , bool isUserId = false /* in */ ) ;
bool followersIdsGet ( std : : string & userInfo /* in */ , bool isUserId = false /* in */ ) ;
/* Twitter account APIs */
bool accountRateLimitGet ( ) ;
/* 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 */ ) ;
/* 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 */ ) ;
2012-06-03 15:01:50 +05:30
twitCurl * clone ( )
{
twitCurl * cloneObj = new twitCurl ( ) ;
/* cURL flags */
cloneObj - > m_curlProxyParamsSet = m_curlProxyParamsSet ;
cloneObj - > m_curlLoginParamsSet = m_curlLoginParamsSet ;
cloneObj - > m_curlCallbackParamsSet = m_curlCallbackParamsSet ;
/* cURL proxy data */
cloneObj - > m_proxyServerIp = m_proxyServerIp ;
cloneObj - > m_proxyServerPort = m_proxyServerPort ;
cloneObj - > m_proxyUserName = m_proxyUserName ;
cloneObj - > m_proxyPassword = m_proxyPassword ;
/* Twitter data */
cloneObj - > m_twitterUsername = m_twitterUsername ;
cloneObj - > m_twitterPassword = m_twitterPassword ;
/* Twitter API type */
cloneObj - > m_eApiFormatType = m_eApiFormatType ;
/* OAuth data */
cloneObj - > m_oAuth = m_oAuth . clone ( ) ;
return cloneObj ;
}
2012-05-23 14:33:08 +05:30
private :
/* cURL data */
CURL * m_curlHandle ;
char m_errorBuffer [ twitCurlDefaults : : TWITCURL_DEFAULT_BUFFSIZE ] ;
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 ;
/* OAuth data */
oAuth m_oAuth ;
/* Private methods */
void clearCurlCallbackBuffers ( ) ;
void prepareCurlProxy ( ) ;
void prepareCurlCallback ( ) ;
void prepareCurlUserPass ( ) ;
void prepareStandardParams ( ) ;
bool performGet ( const std : : string & getUrl ) ;
bool performGet ( 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_