diff --git a/backends/twitter/TwitterResponseParser.cpp b/backends/twitter/TwitterResponseParser.cpp new file mode 100644 index 0000000000000000000000000000000000000000..04b0ba8892526057e1a93df70c003e0b1a9fc7a3 --- /dev/null +++ b/backends/twitter/TwitterResponseParser.cpp @@ -0,0 +1,59 @@ +#include "TwitterResponseParser.h" + +User getUser(const Swift::ParserElement::ref &element, const std::string xmlns) +{ + User user; + if(element->getName() != "user") { + std::cerr << "Not a user element!" << std::endl; + return user; + } + + user.setUserID( std::string( element->getChild(TwitterReponseTypes::id, xmlns)->getText() ) ); + user.setScreenName( std::string( element->getChild(TwitterReponseTypes::screen_name, xmlns)->getText() ) ); + user.setUserName( std::string( element->getChild(TwitterReponseTypes::name, xmlns)->getText() ) ); + user.setNumberOfTweets( atoi(element->getChild(TwitterReponseTypes::statuses_count, xmlns)->getText().c_str()) ); + return user; +} + +Status getStatus(const Swift::ParserElement::ref &element, const std::string xmlns) +{ + Status status; + if(element->getName() != "status") { + std::cerr << "Not a status element!" << std::endl; + return status; + } + + status.setCreationTime( std::string( element->getChild(TwitterReponseTypes::created_at, xmlns)->getText() ) ); + status.setID( std::string( element->getChild(TwitterReponseTypes::id, xmlns)->getText() ) ); + status.setTweet( std::string( element->getChild(TwitterReponseTypes::text, xmlns)->getText() ) ); + status.setTruncated( std::string( element->getChild(TwitterReponseTypes::truncated, xmlns)->getText() )=="true" ); + status.setReplyToStatusID( std::string( element->getChild(TwitterReponseTypes::in_reply_to_status_id, xmlns)->getText() ) ); + status.setReplyToUserID( std::string( element->getChild(TwitterReponseTypes::in_reply_to_user_id, xmlns)->getText() ) ); + status.setReplyToScreenName( std::string( element->getChild(TwitterReponseTypes::in_reply_to_screen_name, xmlns)->getText() ) ); + status.setUserData( getUser(element->getChild(TwitterReponseTypes::user, xmlns), xmlns) ); + status.setRetweetCount( atoi( element->getChild(TwitterReponseTypes::retweet_count, xmlns)->getText().c_str() ) ); + status.setFavorited( std::string( element->getChild(TwitterReponseTypes::favorited, xmlns)->getText() )=="true" ); + status.setRetweeted( std::string( element->getChild(TwitterReponseTypes::retweeted, xmlns)->getText() )=="true" ); + return status; +} + +std::vector getTimeline(std::string &xml) +{ + std::vector statuses; + Swift::ParserElement::ref rootElement = Swift::StringTreeParser::parse(xml); + + if(rootElement->getName() != "statuses") { + std::cerr << "XML doesnt correspond to timline\n"; + return statuses; + } + + const std::string xmlns = rootElement->getNamespace(); + const std::vector children = rootElement->getChildren(TwitterReponseTypes::status, xmlns); +// const std::vector::iterator it; + + for(int i = 0; i < children.size() ; i++) { + const Swift::ParserElement::ref status = children[i]; + statuses.push_back(getStatus(status, xmlns)); + } + return statuses; +}