diff --git a/backends/twitter/TwitterResponseParser.cpp b/backends/twitter/TwitterResponseParser.cpp index c2d2eec340086768741abb7de3c7860f276f5ec7..bb6ba2767e7ce22f374b6d22109a2c3dc456a7da 100644 --- a/backends/twitter/TwitterResponseParser.cpp +++ b/backends/twitter/TwitterResponseParser.cpp @@ -6,7 +6,9 @@ DEFINE_LOGGER(logger, "TwitterResponseParser") User getUser(const Swift::ParserElement::ref &element, const std::string xmlns) { User user; - if(element->getName() != "user") { + if(element->getName() != TwitterReponseTypes::user + && element->getName() != TwitterReponseTypes::sender + && element->getName() != TwitterReponseTypes::recipient) { LOG4CXX_ERROR(logger, "Not a user element!") return user; } @@ -40,6 +42,26 @@ Status getStatus(const Swift::ParserElement::ref &element, const std::string xml return status; } +DirectMessage getDirectMessage(const Swift::ParserElement::ref &element, const std::string xmlns) +{ + DirectMessage DM; + if(element->getName() != TwitterReponseTypes::direct_message) { + LOG4CXX_ERROR(logger, "Not a direct_message element!") + return DM; + } + + DM.setCreationTime( std::string( element->getChild(TwitterReponseTypes::created_at, xmlns)->getText() ) ); + DM.setID( std::string( element->getChild(TwitterReponseTypes::id, xmlns)->getText() ) ); + DM.setMessage( std::string( element->getChild(TwitterReponseTypes::text, xmlns)->getText() ) ); + DM.setSenderID( std::string( element->getChild(TwitterReponseTypes::sender_id, xmlns)->getText() ) ); + DM.setRecipientID( std::string( element->getChild(TwitterReponseTypes::recipient_id, xmlns)->getText() ) ); + DM.setSenderScreenName( std::string( element->getChild(TwitterReponseTypes::sender_screen_name, xmlns)->getText() ) ); + DM.setRecipientScreenName( std::string( element->getChild(TwitterReponseTypes::recipient_screen_name, xmlns)->getText() ) ); + DM.setSenderData( getUser(element->getChild(TwitterReponseTypes::sender, xmlns), xmlns) ); + DM.setRecipientData( getUser(element->getChild(TwitterReponseTypes::recipient, xmlns), xmlns) ); + return DM; +} + std::vector getTimeline(std::string &xml) { std::vector statuses; @@ -60,6 +82,26 @@ std::vector getTimeline(std::string &xml) return statuses; } +std::vector getDirectMessages(std::string &xml) +{ + std::vector DMs; + Swift::ParserElement::ref rootElement = Swift::StringTreeParser::parse(xml); + + if(rootElement->getName() != TwitterReponseTypes::directmessages) { + LOG4CXX_ERROR(logger, "XML doesn't correspond to direct-messages") + return DMs; + } + + const std::string xmlns = rootElement->getNamespace(); + const std::vector children = rootElement->getChildren(TwitterReponseTypes::direct_message, xmlns); + + for(int i = 0; i < children.size() ; i++) { + const Swift::ParserElement::ref dm = children[i]; + DMs.push_back(getDirectMessage(dm, xmlns)); + } + return DMs; +} + std::vector getUsers(std::string &xml) { std::vector users;