From f87f8cc356a1cd8344e8442879757be17a519d60 Mon Sep 17 00:00:00 2001 From: Sarang Bharadwaj Date: Sat, 2 Jun 2012 21:36:20 +0530 Subject: [PATCH] Added threaded timeline request and fetch friends request --- backends/twitter/Requests/FetchFriends.cpp | 41 +++++++++++++++++++ backends/twitter/Requests/FetchFriends.h | 32 +++++++++++++++ backends/twitter/Requests/TimelineRequest.cpp | 33 +++++++++++++++ backends/twitter/Requests/TimelineRequest.h | 32 +++++++++++++++ backends/twitter/main.cpp | 12 ++++-- 5 files changed, 146 insertions(+), 4 deletions(-) create mode 100644 backends/twitter/Requests/FetchFriends.cpp create mode 100644 backends/twitter/Requests/FetchFriends.h create mode 100644 backends/twitter/Requests/TimelineRequest.cpp create mode 100644 backends/twitter/Requests/TimelineRequest.h diff --git a/backends/twitter/Requests/FetchFriends.cpp b/backends/twitter/Requests/FetchFriends.cpp new file mode 100644 index 00000000..c9c90ae4 --- /dev/null +++ b/backends/twitter/Requests/FetchFriends.cpp @@ -0,0 +1,41 @@ +#include "FetchFriends.h" +DEFINE_LOGGER(logger, "FetchFriends") + +void FetchFriends::run() +{ + replyMsg = ""; + if( twitObj.friendsIdsGet(twitObj.getTwitterUsername())) { + + while(replyMsg.length() == 0) { + twitObj.getLastWebResponse( replyMsg ); + } + + LOG4CXX_INFO(logger, user << " - " << replyMsg.length() << " " << replyMsg << "\n" ); + + std::vector IDs = getIDs( replyMsg ); + + twitObj.userLookup(IDs, true); + twitObj.getLastWebResponse( replyMsg ); + + LOG4CXX_INFO(logger, user << " - UserLookUp web response - " << replyMsg.length() << " " << replyMsg << "\n" ); + + std::vector users = getUsers( replyMsg ); + + userlist = "\n***************USER LIST****************\n"; + for(int i=0 ; i < users.size() ; i++) { + userlist += "*)" + users[i].getUserName() + " (" + users[i].getScreenName() + ")\n"; + } + userlist += "***************************************\n"; + + } +} + +void FetchFriends::finalize() +{ + if(replyMsg != "" ) { + np->handleMessage(user, "twitter-account", userlist); + } else { + twitObj.getLastCurlError( replyMsg ); + LOG4CXX_INFO(logger, user << " - friendsIdsGet error - " << replyMsg ); + } +} diff --git a/backends/twitter/Requests/FetchFriends.h b/backends/twitter/Requests/FetchFriends.h new file mode 100644 index 00000000..e26714cf --- /dev/null +++ b/backends/twitter/Requests/FetchFriends.h @@ -0,0 +1,32 @@ +#ifndef FRIENDS_H +#define FRIENDS_H + +#include "../ThreadPool.h" +#include "../libtwitcurl/twitcurl.h" +#include "../TwitterResponseParser.h" +#include "transport/networkplugin.h" +#include "transport/logging.h" +#include +#include + +using namespace Transport; + +class FetchFriends : public Thread +{ + twitCurl twitObj; + std::string user; + std::string replyMsg; + std::string userlist; + NetworkPlugin *np; + + public: + FetchFriends(NetworkPlugin *_np, twitCurl *obj, const std::string &_user) { + twitObj = *obj; + np = _np; + user = _user; + } + + void run(); + void finalize(); +}; +#endif diff --git a/backends/twitter/Requests/TimelineRequest.cpp b/backends/twitter/Requests/TimelineRequest.cpp new file mode 100644 index 00000000..842d0ac6 --- /dev/null +++ b/backends/twitter/Requests/TimelineRequest.cpp @@ -0,0 +1,33 @@ +#include "TimelineRequest.h" +DEFINE_LOGGER(logger, "TimelineRequest") +void TimelineRequest::run() +{ + replyMsg = ""; + if( twitObj.timelinePublicGet() ) { + LOG4CXX_INFO(logger, "Sending timeline request for user " << user) + + while(replyMsg.length() == 0) { + twitObj.getLastWebResponse( replyMsg ); + } + + LOG4CXX_INFO(logger, user << " - " << replyMsg.length() << " " << replyMsg << "\n" ); + + std::vector tweets = getTimeline(replyMsg); + timeline = "\n"; + for(int i=0 ; ihandleMessage(user, "twitter-account", timeline); //send timeline + } + else { + twitObj.getLastCurlError( replyMsg ); + LOG4CXX_ERROR(logger, user << " - " << replyMsg ); + } +} diff --git a/backends/twitter/Requests/TimelineRequest.h b/backends/twitter/Requests/TimelineRequest.h new file mode 100644 index 00000000..c84c7b45 --- /dev/null +++ b/backends/twitter/Requests/TimelineRequest.h @@ -0,0 +1,32 @@ +#ifndef TIMELINE_H +#define TIMELINE_H + +#include "../ThreadPool.h" +#include "../libtwitcurl/twitcurl.h" +#include "../TwitterResponseParser.h" +#include "transport/networkplugin.h" +#include "transport/logging.h" +#include +#include + +using namespace Transport; + +class TimelineRequest : public Thread +{ + twitCurl twitObj; + std::string user; + std::string replyMsg; + std::string timeline; + NetworkPlugin *np; + + public: + TimelineRequest(NetworkPlugin *_np, twitCurl *obj, const std::string &_user) { + twitObj = *obj; + np = _np; + user = _user; + } + + void run(); + void finalize(); +}; +#endif diff --git a/backends/twitter/main.cpp b/backends/twitter/main.cpp index 8ee6b805..e1c4b422 100644 --- a/backends/twitter/main.cpp +++ b/backends/twitter/main.cpp @@ -31,6 +31,8 @@ #include "ThreadPool.h" #include "Requests/StatusUpdateRequest.h" #include "Requests/DirectMessageRequest.h" +#include "Requests/TimelineRequest.h" +#include "Requests/FetchFriends.h" using namespace boost::filesystem; using namespace boost::program_options; @@ -405,14 +407,16 @@ class TwitterPlugin : public NetworkPlugin { else if(cmd[0] == '@') { std::string username = cmd.substr(1); tp->runAsThread(new DirectMessageRequest(np, sessions[user], user, username, data)); - //handleDirectMessage(user, username, data); } else if(cmd == "#status") { tp->runAsThread(new StatusUpdateRequest(np, sessions[user], user, data)); - //handleStatusUpdate(user, data); } - //else if(cmd == "#timeline") fetchTimeline(user); - //else if(cmd == "#friends") fetchFriends(user); + else if(cmd == "#timeline") { + tp->runAsThread(new TimelineRequest(np, sessions[user], user)); + } + else if(cmd == "#friends") { + tp->runAsThread(new FetchFriends(np, sessions[user], user)); + } } }