Hi. This is the feed program for Cosm. (The previous name of the services is Pachube.)

Dependencies:   mbed ThermistorPack Pachube ConfigFile EthernetNetIf TextLCD HTTPClient_ToBeRemoved FatFileSystem SDFileSystem

Committer:
shintamainjp
Date:
Mon Aug 06 12:37:59 2012 +0000
Revision:
0:521ba375aa0f
Pachube renamed to Cosm.

Who changed what in which revision?

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