Pachube
Dependents: Pachube_TestProgram _DearMrJeffMourich StarBoardOrangeExpansion2 Toragi_2011_04_Pachube ... more
PachubeV2CSV.cpp@0:19accbe9a05e, 2010-09-30 (annotated)
- Committer:
- shintamainjp
- Date:
- Thu Sep 30 22:18:37 2010 +0000
- Revision:
- 0:19accbe9a05e
Who changed what in which revision?
User | Revision | Line number | New 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 | } |