
ニコニコ新検索βAPIからデータを取得して有機ELに表示する。
Dependencies: EthernetInterface GraphicOLED mbed-rtos mbed picojson
main.cpp@0:bea495dbc532, 2014-11-29 (annotated)
- Committer:
- mia_0032
- Date:
- Sat Nov 29 13:35:27 2014 +0000
- Revision:
- 0:bea495dbc532
??API??????????OLED?????????????
Who changed what in which revision?
User | Revision | Line number | New 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 | } |