Mais conteúdo relacionado
Semelhante a iTamabi 13 第6回:ARTSAT API 実践 1 Web APIから情報を取得する (20)
Mais de Atsushi Tadokoro (20)
iTamabi 13 第6回:ARTSAT API 実践 1 Web APIから情報を取得する
- 2. 今日の内容
‣ ARTSAT Web API を利用して、各種センサーの情報を取得
‣ 取得するのは、ARTSAT Projectの第一弾衛星、INVADERのシ
ミュレーションデータ
- 5. ARTSAT WebAPI
‣ INVADERのセンサー情報は、下記のURLから取得できる
‣ http://api.artsat.jp/web/v2/invader/sensor_data.json
‣ JSON形式で、ブラウザにデータが表示される
{
"results": [{
"interpolated": true,
"requested_time_unix": 1382216472,
"requested_time_iso_string": "2013-10-20T06:01:12.000+09:00",
"closest_available_time_unix": 1382216200,
"closest_available_time_iso_string": "2013-10-20T05:56:40.000+09:00",
"sensors": {
"lat": {
"type": "float",
"unit": "degrees",
"value": -59.82505
},
"lon": {
"type": "float",
"unit": "degrees",
"value": 60.40049
},
"alt": {
"type": "float",
"unit": "degrees",
"value": 463.5504
},
"ax": {
"type": "float",
- 6. ARTSAT WebAPI
‣ データの内容
{
"results": [{
"interpolated": true,
"requested_time_unix": 1382216472,
← リクエスト
"requested_time_iso_string": "2013-10-20T06:01:12.000+09:00",
"closest_available_time_unix": 1382216200,
した時間
"closest_available_time_iso_string": "2013-10-20T05:56:40.000+09:00",
"sensors": {
"lat": {
"type": "float",
"unit": "degrees",
"value": -59.82505
},
"lon": {
"type": "float",
"unit": "degrees",
"value": 60.40049
},
"alt": {
"type": "float",
"unit": "degrees",
"value": 463.5504
},
"ax": {
"type": "float",
"unit": "rad/s",
"value": -0.0011949767
},
"ay": {
"type": "float",
- 7. ARTSAT WebAPI
‣ データの内容
{
"results": [{
"interpolated": true,
"requested_time_unix": 1382216472,
"requested_time_iso_string": "2013-10-20T06:01:12.000+09:00",
"closest_available_time_unix": 1382216200,
"closest_available_time_iso_string": "2013-10-20T05:56:40.000+09:00",
"sensors": {
"lat": {
↑
"type": "float",
"unit": "degrees",
リクエストした時間から一番近い
"value": -59.82505
},
取得可能な時間
"lon": {
"type": "float",
"unit": "degrees",
"value": 60.40049
},
"alt": {
"type": "float",
"unit": "degrees",
"value": 463.5504
},
"ax": {
"type": "float",
"unit": "rad/s",
"value": -0.0011949767
},
"ay": {
"type": "float",
- 8. ARTSAT WebAPI
‣ データの内容
{
"results": [{
"interpolated": true,
"requested_time_unix": 1382216472,
"requested_time_iso_string": "2013-10-20T06:01:12.000+09:00",
"closest_available_time_unix": 1382216200,
"closest_available_time_iso_string": "2013-10-20T05:56:40.000+09:00",
"sensors": {
"lat": {
"type": "float",
"unit": "degrees",
← 取得したセンサーの値
"value": -59.82505
},
"lon": {
"type": "float",
"unit": "degrees",
"value": 60.40049
},
"alt": {
"type": "float",
"unit": "degrees",
"value": 463.5504
},
"ax": {
"type": "float",
"unit": "rad/s",
"value": -0.0011949767
},
"ay": {
"type": "float",
- 26. JSONデータを画面に表示
‣ testApp.mm
‣ testApp::draw() に下記のプログラムを追加
#include "testApp.h"
...(中略)...
//-------------------------------------------------------------void testApp::draw(){
ofSetColor(63);
ofDrawBitmapString(response.getRawString(), 10, 12);
}
- 29. JSONデータをパース(解析)する
‣ 取得したJSONデータから、センサーの値をとり出すには?
‣ JSONデータをパース(解析)する必要がある
‣ ofxJSONでは、簡単に分解してデータをとり出せる!
‣ それぞれのデータの値は、以下のようにして取得可能
// “lat”の値をFloat型で取得
response["results"][0]["sensors"]["lat"]["value"].asFloat();
// “lon”の値をFloat型で取得
response["results"][0]["sensors"]["lon"]["value"].asFloat();
// “alt”の値をFloat型で取得
response["results"][0]["sensors"]["alt"]["value"].asFloat();
...
- 30. JSONデータをパース(解析)する
‣ testApp.mm
‣ testApp::draw() に下記のプログラムを追加
void testApp::draw(){
ofSetColor(63);
int lineHeigt = 15;
// JSONデータをパースして、画面に表示
string available_time = response["results"][0]
["closest_available_time_iso_string"].asString();
ofDrawBitmapString(available_time, 10, lineHeigt*1);
float lat = response["results"][0]["sensors"]["lat"]
["value"].asFloat();
ofDrawBitmapString("lat = " + ofToString(lat,12), 10, lineHeigt*2);
float lon = response["results"][0]["sensors"]["lon"]
["value"].asFloat();
ofDrawBitmapString("lon = " + ofToString(lon,12), 10, lineHeigt*3);
float alt = response["results"][0]["sensors"]["alt"]
["value"].asFloat();
ofDrawBitmapString("alt = " + ofToString(alt,12), 10, lineHeigt*4);
float ax = response["results"][0]["sensors"]["ax"]["value"].asFloat();
ofDrawBitmapString("ax = " + ofToString(ax,12), 10, lineHeigt*5);
float ay = response["results"][0]["sensors"]["ay"]["value"].asFloat();
ofDrawBitmapString("ay = " + ofToString(ay,12), 10, lineHeigt*6);
float az = response["results"][0]["sensors"]["az"]["value"].asFloat();
ofDrawBitmapString("az = " + ofToString(az,12), 10, lineHeigt*7);
}
- 34. JSONデータをパース(解析)する
‣ testApp.mm
#include "testApp.h"
...(中略)...
void testApp::draw(){
ofSetColor(63);
int lineHeigt = 15;
// 取得した時間を表示
string available_time = response["results"][0]
["closest_available_time_iso_string"].asString();
ofDrawBitmapString(available_time, 10, lineHeigt*1);
// センサーの全てのメンバー名を取得
ofxJSONElement::Members mem = response["results"][0]["sensors"].getMemberNames();
// メンバーごとにセンサーの値をとりだして、画面に表示
for (int i = 0; i < mem.size(); i++) {
string lavel = mem[i];
float value = response["results"][0]["sensors"][mem[i]]["value"].asFloat();
ofDrawBitmapString(lavel + " = " + ofToString(value), 10, lineHeigt * (i + 3));
}
}