ニコニコ新検索βAPIからデータを取得して有機ELに表示する。

Dependencies:   EthernetInterface GraphicOLED mbed-rtos mbed picojson

Committer:
mia_0032
Date:
Sat Nov 29 13:35:27 2014 +0000
Revision:
0:bea495dbc532
??API??????????OLED?????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mia_0032 0:bea495dbc532 1 #include "mbed.h"
mia_0032 0:bea495dbc532 2 #include "rtos.h"
mia_0032 0:bea495dbc532 3 #include "EthernetInterface.h"
mia_0032 0:bea495dbc532 4 #include "GraphicOLED.h"
mia_0032 0:bea495dbc532 5 #include "picojson.h"
mia_0032 0:bea495dbc532 6 #include <string>
mia_0032 0:bea495dbc532 7
mia_0032 0:bea495dbc532 8 // debug
mia_0032 0:bea495dbc532 9 DigitalOut led1(LED1, 0);
mia_0032 0:bea495dbc532 10 DigitalOut led2(LED2, 0);
mia_0032 0:bea495dbc532 11 DigitalOut led3(LED3, 0);
mia_0032 0:bea495dbc532 12 DigitalOut led4(LED4, 0);
mia_0032 0:bea495dbc532 13 Serial pc(USBTX, USBRX);
mia_0032 0:bea495dbc532 14
mia_0032 0:bea495dbc532 15 GraphicOLED oled(p24, p26, p27, p28, p21, p22);
mia_0032 0:bea495dbc532 16
mia_0032 0:bea495dbc532 17 // ethernet
mia_0032 0:bea495dbc532 18 DigitalIn lnk(P1_25);
mia_0032 0:bea495dbc532 19 DigitalIn spd(P1_26);
mia_0032 0:bea495dbc532 20 DigitalOut speed(p29);
mia_0032 0:bea495dbc532 21 DigitalOut link(p30);
mia_0032 0:bea495dbc532 22
mia_0032 0:bea495dbc532 23 void flip(void const *args) {
mia_0032 0:bea495dbc532 24 speed = !spd;
mia_0032 0:bea495dbc532 25 link = !lnk;
mia_0032 0:bea495dbc532 26 }
mia_0032 0:bea495dbc532 27
mia_0032 0:bea495dbc532 28 const string API_HOST = "api.search.nicovideo.jp";
mia_0032 0:bea495dbc532 29 const int API_PORT = 80;
mia_0032 0:bea495dbc532 30 const string API_PATH = "/api/";
mia_0032 0:bea495dbc532 31
mia_0032 0:bea495dbc532 32 const string SEARCH_TAG = "mbed";
mia_0032 0:bea495dbc532 33
mia_0032 0:bea495dbc532 34 int main() {
mia_0032 0:bea495dbc532 35 // ethernet led
mia_0032 0:bea495dbc532 36 RtosTimer flipper(flip, osTimerPeriodic, NULL);
mia_0032 0:bea495dbc532 37 flipper.start(50);
mia_0032 0:bea495dbc532 38
mia_0032 0:bea495dbc532 39 Thread::wait(2000);
mia_0032 0:bea495dbc532 40 oled.cls();
mia_0032 0:bea495dbc532 41 oled.printf("Hello world!\r\n");
mia_0032 0:bea495dbc532 42
mia_0032 0:bea495dbc532 43 EthernetInterface eth;
mia_0032 0:bea495dbc532 44 eth.init();
mia_0032 0:bea495dbc532 45 eth.connect();
mia_0032 0:bea495dbc532 46
mia_0032 0:bea495dbc532 47 oled.cls();
mia_0032 0:bea495dbc532 48 oled.printf("IP Address is %s\r\n", eth.getIPAddress());
mia_0032 0:bea495dbc532 49
mia_0032 0:bea495dbc532 50 TCPSocketConnection sock;
mia_0032 0:bea495dbc532 51 sock.connect(API_HOST.c_str(), API_PORT);
mia_0032 0:bea495dbc532 52
mia_0032 0:bea495dbc532 53 char post_data[256];
mia_0032 0:bea495dbc532 54 sprintf(post_data, "{\"query\":\"%s\",\"service\":[\"video\"],\"search\":[\"tags\"],\"join\":[\"cmsid\",\"title\",\"start_time\"],\"from\":0,\"size\":1,\"sort_by\":\"start_time\",\"issuer\":\"apiguide\",\"reason\":\"ma10\"}", SEARCH_TAG.c_str());
mia_0032 0:bea495dbc532 55 pc.printf("POST Data:\r\n%s\r\nLength:%d\r\n", post_data, strlen(post_data));
mia_0032 0:bea495dbc532 56
mia_0032 0:bea495dbc532 57 char http_cmd[1024];
mia_0032 0:bea495dbc532 58 sprintf(http_cmd, "POST %s HTTP/1.1\r\nHost: %s:%d\r\nAccept: */*\r\nContent-Length: %d\r\nContent-Type: application/json\r\n\r\n%s\r\n\r\n", API_PATH.c_str(), API_HOST.c_str(), API_PORT, strlen(post_data), post_data);
mia_0032 0:bea495dbc532 59 pc.printf("Request:\r\n%s\r\n", http_cmd);
mia_0032 0:bea495dbc532 60 sock.send_all(http_cmd, sizeof(http_cmd)-1);
mia_0032 0:bea495dbc532 61
mia_0032 0:bea495dbc532 62 char buffer[4048];
mia_0032 0:bea495dbc532 63 int ret;
mia_0032 0:bea495dbc532 64 ret = sock.receive(buffer, sizeof(buffer)-1);
mia_0032 0:bea495dbc532 65 buffer[ret] = '\0';
mia_0032 0:bea495dbc532 66 pc.printf("Received %d chars from server:\n%s\n", ret, buffer);
mia_0032 0:bea495dbc532 67
mia_0032 0:bea495dbc532 68 sock.close();
mia_0032 0:bea495dbc532 69 eth.disconnect();
mia_0032 0:bea495dbc532 70
mia_0032 0:bea495dbc532 71 oled.cls();
mia_0032 0:bea495dbc532 72 oled.printf("connection closed.\r\n\r\n");
mia_0032 0:bea495dbc532 73
mia_0032 0:bea495dbc532 74 string response(buffer);
mia_0032 0:bea495dbc532 75 string response_body;
mia_0032 0:bea495dbc532 76 response_body = response.substr((int)response.find("\r\n\r\n") + 1);
mia_0032 0:bea495dbc532 77 pc.printf("---------------------------\r\n");
mia_0032 0:bea495dbc532 78 pc.printf(response_body.c_str());
mia_0032 0:bea495dbc532 79 pc.printf("---------------------------\r\n");
mia_0032 0:bea495dbc532 80
mia_0032 0:bea495dbc532 81 for(int i=0; i<3;i++){
mia_0032 0:bea495dbc532 82 response_body = response_body.substr((int)response_body.find("\n{") + 1);
mia_0032 0:bea495dbc532 83 }
mia_0032 0:bea495dbc532 84
mia_0032 0:bea495dbc532 85 int start_pos = (int)response_body.find("[") + 1;
mia_0032 0:bea495dbc532 86 int end_pos = (int)response_body.find("]");
mia_0032 0:bea495dbc532 87 response_body = response_body.substr(start_pos, end_pos - start_pos);
mia_0032 0:bea495dbc532 88 pc.printf("---------------------------\r\n");
mia_0032 0:bea495dbc532 89 pc.printf(response_body.c_str());
mia_0032 0:bea495dbc532 90 pc.printf("---------------------------\r\n");
mia_0032 0:bea495dbc532 91
mia_0032 0:bea495dbc532 92 picojson::value v;
mia_0032 0:bea495dbc532 93
mia_0032 0:bea495dbc532 94 const char *json = response_body.c_str();
mia_0032 0:bea495dbc532 95 string err = picojson::parse(v, json, json + strlen(json));
mia_0032 0:bea495dbc532 96 pc.printf("--> error %s\r\n", err.c_str());
mia_0032 0:bea495dbc532 97
mia_0032 0:bea495dbc532 98 pc.printf("--> values %s\r\n", v.get("title").get<string>().c_str());
mia_0032 0:bea495dbc532 99 oled.cls();
mia_0032 0:bea495dbc532 100 oled.printf(v.get("title").get<string>().c_str());
mia_0032 0:bea495dbc532 101
mia_0032 0:bea495dbc532 102 while(1) {
mia_0032 0:bea495dbc532 103 led1 = !led1;
mia_0032 0:bea495dbc532 104 Thread::wait(1000);
mia_0032 0:bea495dbc532 105 }
mia_0032 0:bea495dbc532 106 }