Twitter library use the Stewgate U for PHS Shield. see: https://developer.mbed.org/users/phsfan/notebook/phsshield/
Stewitter_a3gs.cpp@0:4fc466e9fb48, 2015-04-01 (annotated)
- Committer:
- phsfan
- Date:
- Wed Apr 01 06:15:12 2015 +0000
- Revision:
- 0:4fc466e9fb48
- Child:
- 1:6ffd13808295
port for mbed, 1st build
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
phsfan | 0:4fc466e9fb48 | 1 | /* |
phsfan | 0:4fc466e9fb48 | 2 | Stewitter.cpp - Arduino library to Post messages to Twitter with OAuth. |
phsfan | 0:4fc466e9fb48 | 3 | Copyright (c) arms22 2010 - 2012. All right reserved. |
phsfan | 0:4fc466e9fb48 | 4 | */ |
phsfan | 0:4fc466e9fb48 | 5 | /* |
phsfan | 0:4fc466e9fb48 | 6 | Twitter.cpp - Arduino library to Post messages to Twitter. |
phsfan | 0:4fc466e9fb48 | 7 | Copyright (c) NeoCat 2009. All right reserved. |
phsfan | 0:4fc466e9fb48 | 8 | |
phsfan | 0:4fc466e9fb48 | 9 | This library is distributed in the hope that it will be useful, |
phsfan | 0:4fc466e9fb48 | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
phsfan | 0:4fc466e9fb48 | 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
phsfan | 0:4fc466e9fb48 | 12 | */ |
phsfan | 0:4fc466e9fb48 | 13 | /* Modified by 2015 phsfan |
phsfan | 0:4fc466e9fb48 | 14 | * for ABIT PHS Shield on mbed |
phsfan | 0:4fc466e9fb48 | 15 | */ |
phsfan | 0:4fc466e9fb48 | 16 | |
phsfan | 0:4fc466e9fb48 | 17 | #include "Stewitter_a3gs.h" |
phsfan | 0:4fc466e9fb48 | 18 | |
phsfan | 0:4fc466e9fb48 | 19 | #define STEWGATE_POST_API "/api/post/" |
phsfan | 0:4fc466e9fb48 | 20 | #define STEWGATE_LAST_MENTION_API "/api/last_mention/" |
phsfan | 0:4fc466e9fb48 | 21 | #define STEWGATE_HOST "stewgate-u.appspot.com" |
phsfan | 0:4fc466e9fb48 | 22 | |
phsfan | 0:4fc466e9fb48 | 23 | Stewitter_a3gs::Stewitter_a3gs(const char *token, A3GS &a3gs) : _a3gs(a3gs), token(token) |
phsfan | 0:4fc466e9fb48 | 24 | { |
phsfan | 0:4fc466e9fb48 | 25 | httpBody[0] = 0; |
phsfan | 0:4fc466e9fb48 | 26 | } |
phsfan | 0:4fc466e9fb48 | 27 | |
phsfan | 0:4fc466e9fb48 | 28 | bool Stewitter_a3gs::post(const char *msg) |
phsfan | 0:4fc466e9fb48 | 29 | { |
phsfan | 0:4fc466e9fb48 | 30 | int r; |
phsfan | 0:4fc466e9fb48 | 31 | char buf[512]; |
phsfan | 0:4fc466e9fb48 | 32 | statusCode = 0; |
phsfan | 0:4fc466e9fb48 | 33 | parseStatus = 0; |
phsfan | 0:4fc466e9fb48 | 34 | httpBody[0] = 0; |
phsfan | 0:4fc466e9fb48 | 35 | |
phsfan | 0:4fc466e9fb48 | 36 | int length = a3gsMAX_RESULT_LENGTH; |
phsfan | 0:4fc466e9fb48 | 37 | char header[128], body[256]; |
phsfan | 0:4fc466e9fb48 | 38 | if (msg != NULL) { |
phsfan | 0:4fc466e9fb48 | 39 | sprintf(body, "_t=%s&msg=%s", token, msg); |
phsfan | 0:4fc466e9fb48 | 40 | sprintf(header, "Content-Length: %d", strlen(body)); |
phsfan | 0:4fc466e9fb48 | 41 | r = _a3gs.httpPOST(STEWGATE_HOST, 80, STEWGATE_POST_API, header, body, buf, &length, false); |
phsfan | 0:4fc466e9fb48 | 42 | } else { |
phsfan | 0:4fc466e9fb48 | 43 | sprintf(body, "_t=%s", token); |
phsfan | 0:4fc466e9fb48 | 44 | sprintf(header, "Content-Length: %d", strlen(body)); |
phsfan | 0:4fc466e9fb48 | 45 | r = _a3gs.httpPOST(STEWGATE_HOST, 80, STEWGATE_LAST_MENTION_API, header, body, buf, &length, false); |
phsfan | 0:4fc466e9fb48 | 46 | _a3gs.read(&buf[length], sizeof(buf) - length); |
phsfan | 0:4fc466e9fb48 | 47 | } |
phsfan | 0:4fc466e9fb48 | 48 | |
phsfan | 0:4fc466e9fb48 | 49 | if (r == 0) { |
phsfan | 0:4fc466e9fb48 | 50 | parse(buf); |
phsfan | 0:4fc466e9fb48 | 51 | return true; |
phsfan | 0:4fc466e9fb48 | 52 | } else { |
phsfan | 0:4fc466e9fb48 | 53 | return false; |
phsfan | 0:4fc466e9fb48 | 54 | } |
phsfan | 0:4fc466e9fb48 | 55 | } |
phsfan | 0:4fc466e9fb48 | 56 | |
phsfan | 0:4fc466e9fb48 | 57 | bool Stewitter_a3gs::lastMention(void) |
phsfan | 0:4fc466e9fb48 | 58 | { |
phsfan | 0:4fc466e9fb48 | 59 | return post(NULL); |
phsfan | 0:4fc466e9fb48 | 60 | } |
phsfan | 0:4fc466e9fb48 | 61 | |
phsfan | 0:4fc466e9fb48 | 62 | void Stewitter_a3gs::parse (char *buf) { |
phsfan | 0:4fc466e9fb48 | 63 | int i, len = 0; |
phsfan | 0:4fc466e9fb48 | 64 | |
phsfan | 0:4fc466e9fb48 | 65 | for (i = 0; i < strlen(buf); i ++) { |
phsfan | 0:4fc466e9fb48 | 66 | char c = buf[i]; |
phsfan | 0:4fc466e9fb48 | 67 | // if (debug) |
phsfan | 0:4fc466e9fb48 | 68 | // printf("%c", c); |
phsfan | 0:4fc466e9fb48 | 69 | switch(parseStatus) { |
phsfan | 0:4fc466e9fb48 | 70 | case 0: // skip "HTTP/1.1 " |
phsfan | 0:4fc466e9fb48 | 71 | if (c == ' ') { |
phsfan | 0:4fc466e9fb48 | 72 | parseStatus++; |
phsfan | 0:4fc466e9fb48 | 73 | } |
phsfan | 0:4fc466e9fb48 | 74 | break; |
phsfan | 0:4fc466e9fb48 | 75 | case 1: // parse Status Code |
phsfan | 0:4fc466e9fb48 | 76 | if (c >= '0' && c <= '9') { |
phsfan | 0:4fc466e9fb48 | 77 | statusCode *= 10; |
phsfan | 0:4fc466e9fb48 | 78 | statusCode += c - '0'; |
phsfan | 0:4fc466e9fb48 | 79 | } else { |
phsfan | 0:4fc466e9fb48 | 80 | parseStatus++; |
phsfan | 0:4fc466e9fb48 | 81 | } |
phsfan | 0:4fc466e9fb48 | 82 | break; |
phsfan | 0:4fc466e9fb48 | 83 | case 2: // skip HTTP Headers |
phsfan | 0:4fc466e9fb48 | 84 | if (c == '\x0a') { |
phsfan | 0:4fc466e9fb48 | 85 | parseStatus++; |
phsfan | 0:4fc466e9fb48 | 86 | } |
phsfan | 0:4fc466e9fb48 | 87 | break; |
phsfan | 0:4fc466e9fb48 | 88 | case 3: |
phsfan | 0:4fc466e9fb48 | 89 | if (c == '\x0d') { |
phsfan | 0:4fc466e9fb48 | 90 | parseStatus++; |
phsfan | 0:4fc466e9fb48 | 91 | }else{ |
phsfan | 0:4fc466e9fb48 | 92 | parseStatus = 2; |
phsfan | 0:4fc466e9fb48 | 93 | } |
phsfan | 0:4fc466e9fb48 | 94 | break; |
phsfan | 0:4fc466e9fb48 | 95 | case 4: |
phsfan | 0:4fc466e9fb48 | 96 | if (c == '\x0a') { |
phsfan | 0:4fc466e9fb48 | 97 | parseStatus++; |
phsfan | 0:4fc466e9fb48 | 98 | }else{ |
phsfan | 0:4fc466e9fb48 | 99 | parseStatus = 2; |
phsfan | 0:4fc466e9fb48 | 100 | } |
phsfan | 0:4fc466e9fb48 | 101 | break; |
phsfan | 0:4fc466e9fb48 | 102 | case 5: // recv HTTP Body |
phsfan | 0:4fc466e9fb48 | 103 | httpBody[len] = c; |
phsfan | 0:4fc466e9fb48 | 104 | len ++; |
phsfan | 0:4fc466e9fb48 | 105 | break; |
phsfan | 0:4fc466e9fb48 | 106 | } |
phsfan | 0:4fc466e9fb48 | 107 | } |
phsfan | 0:4fc466e9fb48 | 108 | httpBody[len] = 0; |
phsfan | 0:4fc466e9fb48 | 109 | } |
phsfan | 0:4fc466e9fb48 | 110 | |
phsfan | 0:4fc466e9fb48 | 111 | bool Stewitter_a3gs::checkStatus() |
phsfan | 0:4fc466e9fb48 | 112 | { |
phsfan | 0:4fc466e9fb48 | 113 | return false; |
phsfan | 0:4fc466e9fb48 | 114 | } |
phsfan | 0:4fc466e9fb48 | 115 | |
phsfan | 0:4fc466e9fb48 | 116 | int Stewitter_a3gs::wait() |
phsfan | 0:4fc466e9fb48 | 117 | { |
phsfan | 0:4fc466e9fb48 | 118 | while (checkStatus()); |
phsfan | 0:4fc466e9fb48 | 119 | return statusCode; |
phsfan | 0:4fc466e9fb48 | 120 | } |