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
mylib/Pachube/PachubeV2CSV.cpp@0:521ba375aa0f, 2012-08-06 (annotated)
- Committer:
- shintamainjp
- Date:
- Mon Aug 06 12:37:59 2012 +0000
- Revision:
- 0:521ba375aa0f
Pachube renamed to Cosm.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |