about summary refs log tree commit diff stats
path: root/src/client.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2016-06-01 20:34:33 -0400
committerKelly Rauchenberger <fefferburbia@gmail.com>2016-06-01 20:34:33 -0400
commit442f1ee071152be04c4184473ddfee5040795b76 (patch)
tree297cffbf4a3728039519541429f68a670d70b98c /src/client.cpp
parentaceb3cc33ee78cce1077252aff8a8808a3195ff1 (diff)
downloadlibtwittercpp-442f1ee071152be04c4184473ddfee5040795b76.tar.gz
libtwittercpp-442f1ee071152be04c4184473ddfee5040795b76.tar.bz2
libtwittercpp-442f1ee071152be04c4184473ddfee5040795b76.zip
Wrapped JSON parsing in exception handling
Diffstat (limited to 'src/client.cpp')
-rw-r--r--src/client.cpp88
1 files changed, 77 insertions, 11 deletions
diff --git a/src/client.cpp b/src/client.cpp index cf2b5c4..1b32b8b 100644 --- a/src/client.cpp +++ b/src/client.cpp
@@ -105,7 +105,12 @@ namespace twitter {
105 std::string response_data; 105 std::string response_data;
106 if (performGet(url, response_code, response_data) && (response_code == 200)) 106 if (performGet(url, response_code, response_data) && (response_code == 200))
107 { 107 {
108 _current_user = user(response_data); 108 try {
109 _current_user = user(response_data);
110 } catch (std::invalid_argument e)
111 {
112 // Ignore
113 }
109 } 114 }
110 } 115 }
111 116
@@ -145,8 +150,13 @@ namespace twitter {
145 150
146 if (response_code == 200) 151 if (response_code == 200)
147 { 152 {
148 result = tweet(response_data); 153 try {
149 return response::ok; 154 result = tweet(response_data);
155 return response::ok;
156 } catch (std::invalid_argument e)
157 {
158 return response::invalid_response;
159 }
150 } else { 160 } else {
151 return codeForError(response_code, response_data); 161 return codeForError(response_code, response_data);
152 } 162 }
@@ -186,7 +196,14 @@ namespace twitter {
186 return codeForError(response_code, response_data); 196 return codeForError(response_code, response_data);
187 } 197 }
188 198
189 auto response_json = json::parse(response_data); 199 json response_json;
200 try {
201 response_json = json::parse(response_data);
202 } catch (std::invalid_argument e)
203 {
204 return response::invalid_response;
205 }
206
190 media_id = response_json["media_id"].get<long>(); 207 media_id = response_json["media_id"].get<long>();
191 208
192 curl_httppost* append_form_post = nullptr; 209 curl_httppost* append_form_post = nullptr;
@@ -226,7 +243,13 @@ namespace twitter {
226 return codeForError(response_code, response_data); 243 return codeForError(response_code, response_data);
227 } 244 }
228 245
229 response_json = json::parse(response_data); 246 try {
247 response_json = json::parse(response_data);
248 } catch (std::invalid_argument e)
249 {
250 return response::invalid_response;
251 }
252
230 if (response_json.find("processing_info") != response_json.end()) 253 if (response_json.find("processing_info") != response_json.end())
231 { 254 {
232 std::stringstream datastr; 255 std::stringstream datastr;
@@ -244,7 +267,13 @@ namespace twitter {
244 return codeForError(response_code, response_data); 267 return codeForError(response_code, response_data);
245 } 268 }
246 269
247 response_json = json::parse(response_data); 270 try {
271 response_json = json::parse(response_data);
272 } catch (std::invalid_argument e)
273 {
274 return response::invalid_response;
275 }
276
248 if (response_json["processing_info"]["state"] == "succeeded") 277 if (response_json["processing_info"]["state"] == "succeeded")
249 { 278 {
250 break; 279 break;
@@ -316,9 +345,26 @@ namespace twitter {
316 return unfollow(toUnfollow.getID()); 345 return unfollow(toUnfollow.getID());
317 } 346 }
318 347
319 const user& client::getUser() const 348 response client::getUser(user& result)
320 { 349 {
321 return _current_user; 350 if (!_current_user)
351 {
352 std::string url = "https://api.twitter.com/1.1/account/verify_credentials.json";
353 long response_code;
354 std::string response_data;
355 if (performGet(url, response_code, response_data) && (response_code == 200))
356 {
357 try {
358 _current_user = user(response_data);
359 } catch (std::invalid_argument e)
360 {
361 return response::invalid_response;
362 }
363 }
364 }
365
366 result = _current_user;
367 return response::ok;
322 } 368 }
323 369
324 configuration client::getConfiguration() 370 configuration client::getConfiguration()
@@ -366,7 +412,14 @@ namespace twitter {
366 412
367 if (response_code == 200) 413 if (response_code == 200)
368 { 414 {
369 json rjs = json::parse(response_data); 415 json rjs;
416 try {
417 rjs = json::parse(response_data);
418 } catch (std::invalid_argument e)
419 {
420 return response::invalid_response;
421 }
422
370 cursor = rjs.at("next_cursor"); 423 cursor = rjs.at("next_cursor");
371 result.insert(std::begin(rjs.at("ids")), std::end(rjs.at("ids"))); 424 result.insert(std::begin(rjs.at("ids")), std::end(rjs.at("ids")));
372 } else { 425 } else {
@@ -408,7 +461,14 @@ namespace twitter {
408 461
409 if (response_code == 200) 462 if (response_code == 200)
410 { 463 {
411 json rjs = json::parse(response_data); 464 json rjs;
465 try {
466 rjs = json::parse(response_data);
467 } catch (std::invalid_argument e)
468 {
469 return response::invalid_response;
470 }
471
412 cursor = rjs.at("next_cursor"); 472 cursor = rjs.at("next_cursor");
413 result.insert(std::begin(rjs.at("ids")), std::end(rjs.at("ids"))); 473 result.insert(std::begin(rjs.at("ids")), std::end(rjs.at("ids")));
414 } else { 474 } else {
@@ -560,7 +620,13 @@ namespace twitter {
560 620
561 response client::codeForError(int response_code, std::string response_data) const 621 response client::codeForError(int response_code, std::string response_data) const
562 { 622 {
563 auto response_json = json::parse(response_data); 623 json response_json;
624 try {
625 response_json = json::parse(response_data);
626 } catch (std::invalid_argument e)
627 {
628 return response::invalid_response;
629 }
564 630
565 std::set<int> error_codes; 631 std::set<int> error_codes;
566 if (response_json.find("errors") != response_json.end()) 632 if (response_json.find("errors") != response_json.end())