Pachube

Dependents:   Pachube_TestProgram _DearMrJeffMourich StarBoardOrangeExpansion2 Toragi_2011_04_Pachube ... more

Committer:
shintamainjp
Date:
Thu Sep 30 22:18:37 2010 +0000
Revision:
0:19accbe9a05e

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:19accbe9a05e 1 /**
shintamainjp 0:19accbe9a05e 2 * Pachube API interface driver. (Version 0.0.1)
shintamainjp 0:19accbe9a05e 3 *
shintamainjp 0:19accbe9a05e 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 0:19accbe9a05e 5 * http://shinta.main.jp/
shintamainjp 0:19accbe9a05e 6 */
shintamainjp 0:19accbe9a05e 7
shintamainjp 0:19accbe9a05e 8 #include "PachubeV2CSV.h"
shintamainjp 0:19accbe9a05e 9 #include "EthernetNetIf.h"
shintamainjp 0:19accbe9a05e 10 #include "HTTPClient.h"
shintamainjp 0:19accbe9a05e 11
shintamainjp 0:19accbe9a05e 12 PachubeV2CSV::PachubeV2CSV(std::string APIKEY) : Pachube(APIKEY) {
shintamainjp 0:19accbe9a05e 13 }
shintamainjp 0:19accbe9a05e 14
shintamainjp 0:19accbe9a05e 15 PachubeV2CSV::~PachubeV2CSV() {
shintamainjp 0:19accbe9a05e 16 }
shintamainjp 0:19accbe9a05e 17
shintamainjp 0:19accbe9a05e 18 /*
shintamainjp 0:19accbe9a05e 19 * =================================================================
shintamainjp 0:19accbe9a05e 20 * Environments (feeds)
shintamainjp 0:19accbe9a05e 21 * =================================================================
shintamainjp 0:19accbe9a05e 22 */
shintamainjp 0:19accbe9a05e 23
shintamainjp 0:19accbe9a05e 24 /**
shintamainjp 0:19accbe9a05e 25 * List all available feeds: GET /v2/feeds
shintamainjp 0:19accbe9a05e 26 */
shintamainjp 0:19accbe9a05e 27 int PachubeV2CSV::listAllAvailableFeeds(
shintamainjp 0:19accbe9a05e 28 int page,
shintamainjp 0:19accbe9a05e 29 int per_page,
shintamainjp 0:19accbe9a05e 30 std::string content,
shintamainjp 0:19accbe9a05e 31 std::string q,
shintamainjp 0:19accbe9a05e 32 std::string tag,
shintamainjp 0:19accbe9a05e 33 std::string user,
shintamainjp 0:19accbe9a05e 34 std::string units,
shintamainjp 0:19accbe9a05e 35 std::string status,
shintamainjp 0:19accbe9a05e 36 std::string order,
shintamainjp 0:19accbe9a05e 37 std::string &datatext) {
shintamainjp 0:19accbe9a05e 38 HTTPClient client;
shintamainjp 0:19accbe9a05e 39 client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY);
shintamainjp 0:19accbe9a05e 40
shintamainjp 0:19accbe9a05e 41 HTTPText text("text/csv");
shintamainjp 0:19accbe9a05e 42 text.set("");
shintamainjp 0:19accbe9a05e 43 HTTPText data;
shintamainjp 0:19accbe9a05e 44
shintamainjp 0:19accbe9a05e 45 /*
shintamainjp 0:19accbe9a05e 46 * Example: http://api.pachube.com/v2/feeds
shintamainjp 0:19accbe9a05e 47 */
shintamainjp 0:19accbe9a05e 48 char tmp[32];
shintamainjp 0:19accbe9a05e 49 sprintf(tmp, "?page=%d&per_page=%d", page, per_page);
shintamainjp 0:19accbe9a05e 50 string URL = Pachube::URLBASE_V2 + "/feeds.csv" + std::string(tmp);
shintamainjp 0:19accbe9a05e 51
shintamainjp 0:19accbe9a05e 52 if (content.length() > 0) {
shintamainjp 0:19accbe9a05e 53 URL = URL + "&content=" + content;
shintamainjp 0:19accbe9a05e 54 }
shintamainjp 0:19accbe9a05e 55 if (q.length() > 0) {
shintamainjp 0:19accbe9a05e 56 URL = URL + "&q=" + q;
shintamainjp 0:19accbe9a05e 57 }
shintamainjp 0:19accbe9a05e 58 if (tag.length() > 0) {
shintamainjp 0:19accbe9a05e 59 URL = URL + "&tag=" + tag;
shintamainjp 0:19accbe9a05e 60 }
shintamainjp 0:19accbe9a05e 61 if (user.length() > 0) {
shintamainjp 0:19accbe9a05e 62 URL = URL + "&user=" + user;
shintamainjp 0:19accbe9a05e 63 }
shintamainjp 0:19accbe9a05e 64 if (units.length() > 0) {
shintamainjp 0:19accbe9a05e 65 URL = URL + "&units=" + units;
shintamainjp 0:19accbe9a05e 66 }
shintamainjp 0:19accbe9a05e 67 if (status.length() > 0) {
shintamainjp 0:19accbe9a05e 68 URL = URL + "&status=" + status;
shintamainjp 0:19accbe9a05e 69 }
shintamainjp 0:19accbe9a05e 70 if (order.length() > 0) {
shintamainjp 0:19accbe9a05e 71 URL = URL + "&order=" + order;
shintamainjp 0:19accbe9a05e 72 }
shintamainjp 0:19accbe9a05e 73
shintamainjp 0:19accbe9a05e 74 HTTPResult result = client.get(URL.c_str(), &data);
shintamainjp 0:19accbe9a05e 75 datatext = data.get();
shintamainjp 0:19accbe9a05e 76
shintamainjp 0:19accbe9a05e 77 return client.getHTTPResponseCode();
shintamainjp 0:19accbe9a05e 78 }
shintamainjp 0:19accbe9a05e 79
shintamainjp 0:19accbe9a05e 80 /**
shintamainjp 0:19accbe9a05e 81 * Create new feed: POST /v2/feeds
shintamainjp 0:19accbe9a05e 82 */
shintamainjp 0:19accbe9a05e 83 int PachubeV2CSV::createNewFeed(void) {
shintamainjp 0:19accbe9a05e 84 error("CSV is not supported for creating Environments because it cannot represent the required parameters due to its very simple format.");
shintamainjp 0:19accbe9a05e 85 return 404;
shintamainjp 0:19accbe9a05e 86 }
shintamainjp 0:19accbe9a05e 87
shintamainjp 0:19accbe9a05e 88 /**
shintamainjp 0:19accbe9a05e 89 * Read feed: GET /v2/feeds/<feed_id>
shintamainjp 0:19accbe9a05e 90 */
shintamainjp 0:19accbe9a05e 91 int PachubeV2CSV::readFeed(int feed_id, std::string &datatext) {
shintamainjp 0:19accbe9a05e 92 HTTPClient client;
shintamainjp 0:19accbe9a05e 93 client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY);
shintamainjp 0:19accbe9a05e 94
shintamainjp 0:19accbe9a05e 95 HTTPText text("text/csv");
shintamainjp 0:19accbe9a05e 96 text.set("");
shintamainjp 0:19accbe9a05e 97 HTTPText data;
shintamainjp 0:19accbe9a05e 98
shintamainjp 0:19accbe9a05e 99 /*
shintamainjp 0:19accbe9a05e 100 * Example: http://api.pachube.com/v2/feeds/1977
shintamainjp 0:19accbe9a05e 101 */
shintamainjp 0:19accbe9a05e 102 char feed_id_char[32];
shintamainjp 0:19accbe9a05e 103 sprintf(feed_id_char, "%d", feed_id);
shintamainjp 0:19accbe9a05e 104 const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + ".csv";
shintamainjp 0:19accbe9a05e 105
shintamainjp 0:19accbe9a05e 106 HTTPResult result = client.get(URL.c_str(), &data);
shintamainjp 0:19accbe9a05e 107 datatext = data.get();
shintamainjp 0:19accbe9a05e 108 return client.getHTTPResponseCode();
shintamainjp 0:19accbe9a05e 109 }
shintamainjp 0:19accbe9a05e 110
shintamainjp 0:19accbe9a05e 111 /**
shintamainjp 0:19accbe9a05e 112 * Update feed: PUT /v2/feeds/<feed_id>
shintamainjp 0:19accbe9a05e 113 */
shintamainjp 0:19accbe9a05e 114 int PachubeV2CSV::updateFeed(int feed_id) {
shintamainjp 0:19accbe9a05e 115 HTTPClient client;
shintamainjp 0:19accbe9a05e 116 client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY);
shintamainjp 0:19accbe9a05e 117
shintamainjp 0:19accbe9a05e 118 HTTPText text("text/csv");
shintamainjp 0:19accbe9a05e 119 text.set("");
shintamainjp 0:19accbe9a05e 120
shintamainjp 0:19accbe9a05e 121 /*
shintamainjp 0:19accbe9a05e 122 * Example: http://api.pachube.com/v2/feeds/1977?_method=put
shintamainjp 0:19accbe9a05e 123 */
shintamainjp 0:19accbe9a05e 124 char feed_id_char[32];
shintamainjp 0:19accbe9a05e 125 sprintf(feed_id_char, "%d", feed_id);
shintamainjp 0:19accbe9a05e 126 const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "?_method=put";
shintamainjp 0:19accbe9a05e 127
shintamainjp 0:19accbe9a05e 128 HTTPResult result = client.post(URL.c_str(), text, NULL);
shintamainjp 0:19accbe9a05e 129 return client.getHTTPResponseCode();
shintamainjp 0:19accbe9a05e 130 }
shintamainjp 0:19accbe9a05e 131
shintamainjp 0:19accbe9a05e 132 /**
shintamainjp 0:19accbe9a05e 133 * Delete feed: DELETE /v2/feeds/<feed_id>
shintamainjp 0:19accbe9a05e 134 */
shintamainjp 0:19accbe9a05e 135 int PachubeV2CSV::deleteFeed(int feed_id) {
shintamainjp 0:19accbe9a05e 136 HTTPClient client;
shintamainjp 0:19accbe9a05e 137 client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY);
shintamainjp 0:19accbe9a05e 138
shintamainjp 0:19accbe9a05e 139 HTTPText text("text/csv");
shintamainjp 0:19accbe9a05e 140 text.set("");
shintamainjp 0:19accbe9a05e 141
shintamainjp 0:19accbe9a05e 142 /*
shintamainjp 0:19accbe9a05e 143 * Example: http://api.pachube.com/v2/feeds/1977?_method=delete
shintamainjp 0:19accbe9a05e 144 */
shintamainjp 0:19accbe9a05e 145 char feed_id_char[32];
shintamainjp 0:19accbe9a05e 146 sprintf(feed_id_char, "%d", feed_id);
shintamainjp 0:19accbe9a05e 147 const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "?_method=delete";
shintamainjp 0:19accbe9a05e 148
shintamainjp 0:19accbe9a05e 149 HTTPResult result = client.post(URL.c_str(), text, NULL);
shintamainjp 0:19accbe9a05e 150 return client.getHTTPResponseCode();
shintamainjp 0:19accbe9a05e 151 }
shintamainjp 0:19accbe9a05e 152
shintamainjp 0:19accbe9a05e 153 /*
shintamainjp 0:19accbe9a05e 154 * =================================================================
shintamainjp 0:19accbe9a05e 155 * Datastreams
shintamainjp 0:19accbe9a05e 156 * =================================================================
shintamainjp 0:19accbe9a05e 157 */
shintamainjp 0:19accbe9a05e 158
shintamainjp 0:19accbe9a05e 159 /**
shintamainjp 0:19accbe9a05e 160 * Create new datastream: POST /v2/feeds/<feed_id>/datastreams
shintamainjp 0:19accbe9a05e 161 *
shintamainjp 0:19accbe9a05e 162 * @param feed_id Feed ID.
shintamainjp 0:19accbe9a05e 163 * @param stream_id Stream ID text.
shintamainjp 0:19accbe9a05e 164 * @param value value.
shintamainjp 0:19accbe9a05e 165 *
shintamainjp 0:19accbe9a05e 166 * @return Return code from a web server.
shintamainjp 0:19accbe9a05e 167 */
shintamainjp 0:19accbe9a05e 168 int PachubeV2CSV::createNewDataStream(int feed_id, std::string stream_id, std::string value) {
shintamainjp 0:19accbe9a05e 169 HTTPClient client;
shintamainjp 0:19accbe9a05e 170 client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY);
shintamainjp 0:19accbe9a05e 171
shintamainjp 0:19accbe9a05e 172 std::string data = stream_id + "," + value;
shintamainjp 0:19accbe9a05e 173 HTTPText text("text/csv");
shintamainjp 0:19accbe9a05e 174 text.set(data);
shintamainjp 0:19accbe9a05e 175
shintamainjp 0:19accbe9a05e 176 /*
shintamainjp 0:19accbe9a05e 177 * Example: http://api.pachube.com/v2/feeds/1977/datastreams
shintamainjp 0:19accbe9a05e 178 */
shintamainjp 0:19accbe9a05e 179 char feed_id_char[32];
shintamainjp 0:19accbe9a05e 180 sprintf(feed_id_char, "%d", feed_id);
shintamainjp 0:19accbe9a05e 181 const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "/datastreams";
shintamainjp 0:19accbe9a05e 182
shintamainjp 0:19accbe9a05e 183 HTTPResult result = client.post(URL.c_str(), text, NULL);
shintamainjp 0:19accbe9a05e 184 return client.getHTTPResponseCode();
shintamainjp 0:19accbe9a05e 185 }
shintamainjp 0:19accbe9a05e 186
shintamainjp 0:19accbe9a05e 187 /**
shintamainjp 0:19accbe9a05e 188 * Read datastream - GET /v2/feeds/<feed_id>/datastreams/<datastream_id>
shintamainjp 0:19accbe9a05e 189 *
shintamainjp 0:19accbe9a05e 190 * @param feed_id Feed ID.
shintamainjp 0:19accbe9a05e 191 * @param stream_id Stream ID text.
shintamainjp 0:19accbe9a05e 192 *
shintamainjp 0:19accbe9a05e 193 * @return Return code from a web server.
shintamainjp 0:19accbe9a05e 194 */
shintamainjp 0:19accbe9a05e 195 int PachubeV2CSV::readDataStream(int feed_id, std::string stream_id, std::string &datatext) {
shintamainjp 0:19accbe9a05e 196 HTTPClient client;
shintamainjp 0:19accbe9a05e 197 client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY);
shintamainjp 0:19accbe9a05e 198
shintamainjp 0:19accbe9a05e 199 HTTPText text("text/csv");
shintamainjp 0:19accbe9a05e 200 text.set("");
shintamainjp 0:19accbe9a05e 201 HTTPText data;
shintamainjp 0:19accbe9a05e 202
shintamainjp 0:19accbe9a05e 203 /*
shintamainjp 0:19accbe9a05e 204 * Example: http://api.pachube.com/v2/feeds/1977/datastreams/energy
shintamainjp 0:19accbe9a05e 205 */
shintamainjp 0:19accbe9a05e 206 char feed_id_char[32];
shintamainjp 0:19accbe9a05e 207 sprintf(feed_id_char, "%d", feed_id);
shintamainjp 0:19accbe9a05e 208 const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "/datastreams/" + stream_id + ".csv";
shintamainjp 0:19accbe9a05e 209
shintamainjp 0:19accbe9a05e 210 HTTPResult result = client.get(URL.c_str(), &data);
shintamainjp 0:19accbe9a05e 211 datatext = data.get();
shintamainjp 0:19accbe9a05e 212 return client.getHTTPResponseCode();
shintamainjp 0:19accbe9a05e 213 }
shintamainjp 0:19accbe9a05e 214
shintamainjp 0:19accbe9a05e 215 /**
shintamainjp 0:19accbe9a05e 216 * Update datastream: PUT /v2/feeds/<feed_id>/datastreams/<datastream_id>
shintamainjp 0:19accbe9a05e 217 *
shintamainjp 0:19accbe9a05e 218 * @param feed_id Feed ID.
shintamainjp 0:19accbe9a05e 219 * @param stream_id Stream ID text.
shintamainjp 0:19accbe9a05e 220 * @param value value.
shintamainjp 0:19accbe9a05e 221 *
shintamainjp 0:19accbe9a05e 222 * @return Return code from a web server.
shintamainjp 0:19accbe9a05e 223 */
shintamainjp 0:19accbe9a05e 224 int PachubeV2CSV::updateDataStream(int feed_id, std::string stream_id, std::string value) {
shintamainjp 0:19accbe9a05e 225 HTTPClient client;
shintamainjp 0:19accbe9a05e 226 client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY);
shintamainjp 0:19accbe9a05e 227
shintamainjp 0:19accbe9a05e 228 HTTPText text("text/csv");
shintamainjp 0:19accbe9a05e 229 text.set(value);
shintamainjp 0:19accbe9a05e 230
shintamainjp 0:19accbe9a05e 231 /*
shintamainjp 0:19accbe9a05e 232 * Example: http://api.pachube.com/v2/feeds/1977/datastreams/energy?_method=put
shintamainjp 0:19accbe9a05e 233 */
shintamainjp 0:19accbe9a05e 234 char feed_id_char[32];
shintamainjp 0:19accbe9a05e 235 sprintf(feed_id_char, "%d", feed_id);
shintamainjp 0:19accbe9a05e 236 const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "/datastreams/" + stream_id + "?_method=put";
shintamainjp 0:19accbe9a05e 237
shintamainjp 0:19accbe9a05e 238 HTTPResult result = client.post(URL.c_str(), text, NULL);
shintamainjp 0:19accbe9a05e 239 return client.getHTTPResponseCode();
shintamainjp 0:19accbe9a05e 240 }
shintamainjp 0:19accbe9a05e 241
shintamainjp 0:19accbe9a05e 242 /**
shintamainjp 0:19accbe9a05e 243 * Delete datastream: DELETE /v2/feeds/<feed_id>/datastreams/<datastream_id>
shintamainjp 0:19accbe9a05e 244 *
shintamainjp 0:19accbe9a05e 245 * @param feed_id Feed ID.
shintamainjp 0:19accbe9a05e 246 * @param stream_id Stream ID text.
shintamainjp 0:19accbe9a05e 247 *
shintamainjp 0:19accbe9a05e 248 * @return Return code from a web server.
shintamainjp 0:19accbe9a05e 249 */
shintamainjp 0:19accbe9a05e 250 int PachubeV2CSV::deleteDataStream(int feed_id, std::string stream_id) {
shintamainjp 0:19accbe9a05e 251 HTTPClient client;
shintamainjp 0:19accbe9a05e 252 client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY);
shintamainjp 0:19accbe9a05e 253
shintamainjp 0:19accbe9a05e 254 HTTPText text("text/csv");
shintamainjp 0:19accbe9a05e 255 text.set("");
shintamainjp 0:19accbe9a05e 256
shintamainjp 0:19accbe9a05e 257 /*
shintamainjp 0:19accbe9a05e 258 * Example: http://api.pachube.com/v2/feeds/1977/datastreams/energy?_method=delete
shintamainjp 0:19accbe9a05e 259 */
shintamainjp 0:19accbe9a05e 260 char feed_id_char[32];
shintamainjp 0:19accbe9a05e 261 sprintf(feed_id_char, "%d", feed_id);
shintamainjp 0:19accbe9a05e 262 const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "/datastreams/" + stream_id + "?_method=delete";
shintamainjp 0:19accbe9a05e 263
shintamainjp 0:19accbe9a05e 264 HTTPResult result = client.post(URL.c_str(), text, NULL);
shintamainjp 0:19accbe9a05e 265 return client.getHTTPResponseCode();
shintamainjp 0:19accbe9a05e 266 }