Twitter library use the Stewgate U for PHS Shield. see: https://developer.mbed.org/users/phsfan/notebook/phsshield/

Dependents:   PHSShield_Twitter

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?

UserRevisionLine numberNew 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 }