SuperTweet interface driver classes.

Dependents:   SuperTweet_TestProgram StarBoardOrangeExpansion1 GSL_04-Network_Twitter

Committer:
shintamainjp
Date:
Fri Oct 29 23:04:12 2010 +0000
Revision:
2:d463d3fc4f81
Parent:
1:2d211e591fc8
Modified default value of a callback function to NULL.

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 2:d463d3fc4f81 46 if (func != NULL) {
shintamainjp 2:d463d3fc4f81 47 func(buf, stream.readLen());
shintamainjp 2:d463d3fc4f81 48 }
shintamainjp 0:d48d92e6c145 49 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 50 }
shintamainjp 0:d48d92e6c145 51 }
shintamainjp 0:d48d92e6c145 52 return result;
shintamainjp 0:d48d92e6c145 53 }
shintamainjp 0:d48d92e6c145 54
shintamainjp 1:2d211e591fc8 55 /**
shintamainjp 1:2d211e591fc8 56 * 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 57 *
shintamainjp 1:2d211e591fc8 58 * @param func A pointer to a callback function.
shintamainjp 1:2d211e591fc8 59 * @return Result code.
shintamainjp 1:2d211e591fc8 60 */
shintamainjp 0:d48d92e6c145 61 HTTPResult SuperTweetV1XML::getStatusesHomeTimeline(void (*func)(char *buf, size_t siz)) {
shintamainjp 0:d48d92e6c145 62 HTTPMap map;
shintamainjp 0:d48d92e6c145 63 HTTPStream stream;
shintamainjp 0:d48d92e6c145 64 const std::string url = URLBASE_V1 + "statuses/home_timeline.xml";
shintamainjp 0:d48d92e6c145 65 char buf[BUFSIZ + 1] = {0};
shintamainjp 0:d48d92e6c145 66
shintamainjp 0:d48d92e6c145 67 result = HTTP_OK;
shintamainjp 0:d48d92e6c145 68 completed = false;
shintamainjp 0:d48d92e6c145 69 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 70 HTTPResult r = client.get(url.c_str(), &stream, this, &SuperTweetV1XML::callback);
shintamainjp 0:d48d92e6c145 71 if (r != HTTP_OK) {
shintamainjp 1:2d211e591fc8 72 while (!completed) {
shintamainjp 1:2d211e591fc8 73 Net::poll();
shintamainjp 1:2d211e591fc8 74 if (stream.readable()) {
shintamainjp 1:2d211e591fc8 75 buf[stream.readLen()] = 0;
shintamainjp 2:d463d3fc4f81 76 if (func != NULL) {
shintamainjp 2:d463d3fc4f81 77 func(buf, stream.readLen());
shintamainjp 2:d463d3fc4f81 78 }
shintamainjp 1:2d211e591fc8 79 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 1:2d211e591fc8 80 }
shintamainjp 0:d48d92e6c145 81 }
shintamainjp 0:d48d92e6c145 82 }
shintamainjp 0:d48d92e6c145 83 return result;
shintamainjp 0:d48d92e6c145 84 }
shintamainjp 0:d48d92e6c145 85
shintamainjp 1:2d211e591fc8 86 /**
shintamainjp 1:2d211e591fc8 87 * Updates the authenticating user's status.
shintamainjp 1:2d211e591fc8 88 * A status update with text identical to the authenticating user's text identical
shintamainjp 1:2d211e591fc8 89 * to the authenticating user's current status will be ignored to prevent duplicates.
shintamainjp 1:2d211e591fc8 90 *
shintamainjp 1:2d211e591fc8 91 * @param func A pointer to a callback function.
shintamainjp 1:2d211e591fc8 92 * @return Result code.
shintamainjp 1:2d211e591fc8 93 */
shintamainjp 0:d48d92e6c145 94 HTTPResult SuperTweetV1XML::postStatusesUpdate(const std::string datatext, void (*func)(char *buf, size_t siz)) {
shintamainjp 0:d48d92e6c145 95 HTTPMap map;
shintamainjp 0:d48d92e6c145 96 HTTPStream stream;
shintamainjp 0:d48d92e6c145 97 map["status"] = datatext;
shintamainjp 0:d48d92e6c145 98 const std::string url = URLBASE_V1 + "statuses/update.xml";
shintamainjp 0:d48d92e6c145 99 char buf[BUFSIZ + 1] = {0};
shintamainjp 0:d48d92e6c145 100
shintamainjp 0:d48d92e6c145 101 result = HTTP_OK;
shintamainjp 0:d48d92e6c145 102 completed = false;
shintamainjp 0:d48d92e6c145 103 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 104 HTTPResult r = client.post(url.c_str(), map, &stream, this, &SuperTweetV1XML::callback);
shintamainjp 0:d48d92e6c145 105 while (!completed) {
shintamainjp 0:d48d92e6c145 106 Net::poll();
shintamainjp 0:d48d92e6c145 107 if (stream.readable()) {
shintamainjp 0:d48d92e6c145 108 buf[stream.readLen()] = 0;
shintamainjp 2:d463d3fc4f81 109 if (func != NULL) {
shintamainjp 2:d463d3fc4f81 110 func(buf, stream.readLen());
shintamainjp 2:d463d3fc4f81 111 }
shintamainjp 0:d48d92e6c145 112 stream.readNext((byte*)buf, sizeof(buf) - 1);
shintamainjp 0:d48d92e6c145 113 }
shintamainjp 0:d48d92e6c145 114 }
shintamainjp 0:d48d92e6c145 115 return result;
shintamainjp 0:d48d92e6c145 116 }
shintamainjp 0:d48d92e6c145 117
shintamainjp 0:d48d92e6c145 118 void SuperTweetV1XML::callback(HTTPResult r) {
shintamainjp 0:d48d92e6c145 119 result = r;
shintamainjp 0:d48d92e6c145 120 completed = true;
shintamainjp 0:d48d92e6c145 121 }