SuperTweet interface driver classes.

Dependents:   SuperTweet_TestProgram StarBoardOrangeExpansion1 GSL_04-Network_Twitter

Committer:
shintamainjp
Date:
Thu Oct 28 12:02:05 2010 +0000
Revision:
1:2d211e591fc8
Parent:
0:d48d92e6c145
Child:
2:d463d3fc4f81
Added comments.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:d48d92e6c145 1 /**
shintamainjp 0:d48d92e6c145 2 * SuperTweet API interface driver. (Version 0.0.1)
shintamainjp 0:d48d92e6c145 3 *
shintamainjp 0:d48d92e6c145 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 0:d48d92e6c145 5 * http://shinta.main.jp/
shintamainjp 0:d48d92e6c145 6 */
shintamainjp 0:d48d92e6c145 7
shintamainjp 0:d48d92e6c145 8 #include "SuperTweetV1XML.h"
shintamainjp 0:d48d92e6c145 9
shintamainjp 1:2d211e591fc8 10 /**
shintamainjp 1:2d211e591fc8 11 * Create.
shintamainjp 1:2d211e591fc8 12 *
shintamainjp 1:2d211e591fc8 13 * @param account Account name.
shintamainjp 1:2d211e591fc8 14 * @param password Password.
shintamainjp 1:2d211e591fc8 15 */
shintamainjp 0:d48d92e6c145 16 SuperTweetV1XML::SuperTweetV1XML(const std::string account, const std::string password)
shintamainjp 0:d48d92e6c145 17 : SuperTweet(account, password) {
shintamainjp 0:d48d92e6c145 18 }
shintamainjp 0:d48d92e6c145 19
shintamainjp 1:2d211e591fc8 20 /**
shintamainjp 1:2d211e591fc8 21 * Dispose.
shintamainjp 1:2d211e591fc8 22 */
shintamainjp 0:d48d92e6c145 23 SuperTweetV1XML::~SuperTweetV1XML() {
shintamainjp 0:d48d92e6c145 24 }
shintamainjp 0:d48d92e6c145 25
shintamainjp 1:2d211e591fc8 26 /**
shintamainjp 1:2d211e591fc8 27 * Returns the 20 most recent statuses posted by the authenticating user.
shintamainjp 1:2d211e591fc8 28 *
shintamainjp 1:2d211e591fc8 29 * @param func A pointer to a callback function.
shintamainjp 1:2d211e591fc8 30 * @return Result code.
shintamainjp 1:2d211e591fc8 31 */
shintamainjp 0:d48d92e6c145 32 HTTPResult SuperTweetV1XML::getStatusesUserTimeline(void (*func)(char *buf, size_t siz)) {
shintamainjp 0:d48d92e6c145 33 HTTPMap map;
shintamainjp 0:d48d92e6c145 34 HTTPStream stream;
shintamainjp 0:d48d92e6c145 35 const std::string url = URLBASE_V1 + "statuses/user_timeline.xml";
shintamainjp 0:d48d92e6c145 36 char buf[BUFSIZ + 1] = {0};
shintamainjp 0:d48d92e6c145 37
shintamainjp 0:d48d92e6c145 38 result = HTTP_OK;
shintamainjp 0:d48d92e6c145 39 completed = false;
shintamainjp 0:d48d92e6c145 40 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 41 HTTPResult r = client.get(url.c_str(), &stream, this, &SuperTweetV1XML::callback);
shintamainjp 0:d48d92e6c145 42 while (!completed) {
shintamainjp 0:d48d92e6c145 43 Net::poll();
shintamainjp 0:d48d92e6c145 44 if (stream.readable()) {
shintamainjp 0:d48d92e6c145 45 buf[stream.readLen()] = 0;
shintamainjp 0:d48d92e6c145 46 func(buf, stream.readLen());
shintamainjp 0:d48d92e6c145 47 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 48 }
shintamainjp 0:d48d92e6c145 49 }
shintamainjp 0:d48d92e6c145 50 return result;
shintamainjp 0:d48d92e6c145 51 }
shintamainjp 0:d48d92e6c145 52
shintamainjp 1:2d211e591fc8 53 /**
shintamainjp 1:2d211e591fc8 54 * Returns the 20 most recent statuses, including retweets if they exist, posted by the authenticating user and the user's they follow.
shintamainjp 1:2d211e591fc8 55 *
shintamainjp 1:2d211e591fc8 56 * @param func A pointer to a callback function.
shintamainjp 1:2d211e591fc8 57 * @return Result code.
shintamainjp 1:2d211e591fc8 58 */
shintamainjp 0:d48d92e6c145 59 HTTPResult SuperTweetV1XML::getStatusesHomeTimeline(void (*func)(char *buf, size_t siz)) {
shintamainjp 0:d48d92e6c145 60 HTTPMap map;
shintamainjp 0:d48d92e6c145 61 HTTPStream stream;
shintamainjp 0:d48d92e6c145 62 const std::string url = URLBASE_V1 + "statuses/home_timeline.xml";
shintamainjp 0:d48d92e6c145 63 char buf[BUFSIZ + 1] = {0};
shintamainjp 0:d48d92e6c145 64
shintamainjp 0:d48d92e6c145 65 result = HTTP_OK;
shintamainjp 0:d48d92e6c145 66 completed = false;
shintamainjp 0:d48d92e6c145 67 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 68 HTTPResult r = client.get(url.c_str(), &stream, this, &SuperTweetV1XML::callback);
shintamainjp 0:d48d92e6c145 69 if (r != HTTP_OK) {
shintamainjp 1:2d211e591fc8 70 while (!completed) {
shintamainjp 1:2d211e591fc8 71 Net::poll();
shintamainjp 1:2d211e591fc8 72 if (stream.readable()) {
shintamainjp 1:2d211e591fc8 73 buf[stream.readLen()] = 0;
shintamainjp 1:2d211e591fc8 74 func(buf, stream.readLen());
shintamainjp 1:2d211e591fc8 75 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 1:2d211e591fc8 76 }
shintamainjp 0:d48d92e6c145 77 }
shintamainjp 0:d48d92e6c145 78 }
shintamainjp 0:d48d92e6c145 79 return result;
shintamainjp 0:d48d92e6c145 80 }
shintamainjp 0:d48d92e6c145 81
shintamainjp 1:2d211e591fc8 82 /**
shintamainjp 1:2d211e591fc8 83 * Updates the authenticating user's status.
shintamainjp 1:2d211e591fc8 84 * A status update with text identical to the authenticating user's text identical
shintamainjp 1:2d211e591fc8 85 * to the authenticating user's current status will be ignored to prevent duplicates.
shintamainjp 1:2d211e591fc8 86 *
shintamainjp 1:2d211e591fc8 87 * @param func A pointer to a callback function.
shintamainjp 1:2d211e591fc8 88 * @return Result code.
shintamainjp 1:2d211e591fc8 89 */
shintamainjp 0:d48d92e6c145 90 HTTPResult SuperTweetV1XML::postStatusesUpdate(const std::string datatext, void (*func)(char *buf, size_t siz)) {
shintamainjp 0:d48d92e6c145 91 HTTPMap map;
shintamainjp 0:d48d92e6c145 92 HTTPStream stream;
shintamainjp 0:d48d92e6c145 93 map["status"] = datatext;
shintamainjp 0:d48d92e6c145 94 const std::string url = URLBASE_V1 + "statuses/update.xml";
shintamainjp 0:d48d92e6c145 95 char buf[BUFSIZ + 1] = {0};
shintamainjp 0:d48d92e6c145 96
shintamainjp 0:d48d92e6c145 97 result = HTTP_OK;
shintamainjp 0:d48d92e6c145 98 completed = false;
shintamainjp 0:d48d92e6c145 99 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 100 HTTPResult r = client.post(url.c_str(), map, &stream, this, &SuperTweetV1XML::callback);
shintamainjp 0:d48d92e6c145 101 while (!completed) {
shintamainjp 0:d48d92e6c145 102 Net::poll();
shintamainjp 0:d48d92e6c145 103 if (stream.readable()) {
shintamainjp 0:d48d92e6c145 104 buf[stream.readLen()] = 0;
shintamainjp 0:d48d92e6c145 105 func(buf, stream.readLen());
shintamainjp 0:d48d92e6c145 106 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 107 }
shintamainjp 0:d48d92e6c145 108 }
shintamainjp 0:d48d92e6c145 109 return result;
shintamainjp 0:d48d92e6c145 110 }
shintamainjp 0:d48d92e6c145 111
shintamainjp 0:d48d92e6c145 112 void SuperTweetV1XML::callback(HTTPResult r) {
shintamainjp 0:d48d92e6c145 113 result = r;
shintamainjp 0:d48d92e6c145 114 completed = true;
shintamainjp 0:d48d92e6c145 115 }