
ニコニコ新検索βAPIからデータを取得して有機ELに表示する。
Dependencies: EthernetInterface GraphicOLED mbed-rtos mbed picojson
main.cpp
00001 #include "mbed.h" 00002 #include "rtos.h" 00003 #include "EthernetInterface.h" 00004 #include "GraphicOLED.h" 00005 #include "picojson.h" 00006 #include <string> 00007 00008 // debug 00009 DigitalOut led1(LED1, 0); 00010 DigitalOut led2(LED2, 0); 00011 DigitalOut led3(LED3, 0); 00012 DigitalOut led4(LED4, 0); 00013 Serial pc(USBTX, USBRX); 00014 00015 GraphicOLED oled(p24, p26, p27, p28, p21, p22); 00016 00017 // ethernet 00018 DigitalIn lnk(P1_25); 00019 DigitalIn spd(P1_26); 00020 DigitalOut speed(p29); 00021 DigitalOut link(p30); 00022 00023 void flip(void const *args) { 00024 speed = !spd; 00025 link = !lnk; 00026 } 00027 00028 const string API_HOST = "api.search.nicovideo.jp"; 00029 const int API_PORT = 80; 00030 const string API_PATH = "/api/"; 00031 00032 const string SEARCH_TAG = "mbed"; 00033 00034 int main() { 00035 // ethernet led 00036 RtosTimer flipper(flip, osTimerPeriodic, NULL); 00037 flipper.start(50); 00038 00039 Thread::wait(2000); 00040 oled.cls(); 00041 oled.printf("Hello world!\r\n"); 00042 00043 EthernetInterface eth; 00044 eth.init(); 00045 eth.connect(); 00046 00047 oled.cls(); 00048 oled.printf("IP Address is %s\r\n", eth.getIPAddress()); 00049 00050 TCPSocketConnection sock; 00051 sock.connect(API_HOST.c_str(), API_PORT); 00052 00053 char post_data[256]; 00054 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()); 00055 pc.printf("POST Data:\r\n%s\r\nLength:%d\r\n", post_data, strlen(post_data)); 00056 00057 char http_cmd[1024]; 00058 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); 00059 pc.printf("Request:\r\n%s\r\n", http_cmd); 00060 sock.send_all(http_cmd, sizeof(http_cmd)-1); 00061 00062 char buffer[4048]; 00063 int ret; 00064 ret = sock.receive(buffer, sizeof(buffer)-1); 00065 buffer[ret] = '\0'; 00066 pc.printf("Received %d chars from server:\n%s\n", ret, buffer); 00067 00068 sock.close(); 00069 eth.disconnect(); 00070 00071 oled.cls(); 00072 oled.printf("connection closed.\r\n\r\n"); 00073 00074 string response(buffer); 00075 string response_body; 00076 response_body = response.substr((int)response.find("\r\n\r\n") + 1); 00077 pc.printf("---------------------------\r\n"); 00078 pc.printf(response_body.c_str()); 00079 pc.printf("---------------------------\r\n"); 00080 00081 for(int i=0; i<3;i++){ 00082 response_body = response_body.substr((int)response_body.find("\n{") + 1); 00083 } 00084 00085 int start_pos = (int)response_body.find("[") + 1; 00086 int end_pos = (int)response_body.find("]"); 00087 response_body = response_body.substr(start_pos, end_pos - start_pos); 00088 pc.printf("---------------------------\r\n"); 00089 pc.printf(response_body.c_str()); 00090 pc.printf("---------------------------\r\n"); 00091 00092 picojson::value v; 00093 00094 const char *json = response_body.c_str(); 00095 string err = picojson::parse(v, json, json + strlen(json)); 00096 pc.printf("--> error %s\r\n", err.c_str()); 00097 00098 pc.printf("--> values %s\r\n", v.get("title").get<string>().c_str()); 00099 oled.cls(); 00100 oled.printf(v.get("title").get<string>().c_str()); 00101 00102 while(1) { 00103 led1 = !led1; 00104 Thread::wait(1000); 00105 } 00106 }
Generated on Tue Jul 12 2022 15:48:43 by
