SlideShare a Scribd company logo
iTamabi 13 
第6回:ARTSAT API 実践 1
Web APIから情報を取得する
2013年10月21日
多摩美術大学 PBL科目
担当:田所 淳
今日の内容
‣ ARTSAT Web API を利用して、各種センサーの情報を取得
‣ 取得するのは、ARTSAT Projectの第一弾衛星、INVADERのシ
ミュレーションデータ
ARTSAT WebAPI
ARTSAT WebAPI
‣ ARTSAT WebAPI - Web経由でARTSATの情報を取得可能
‣ http://api.artsat.jp/web/
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",
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",
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",
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",
WebAPI の値をopenFrameworksに読み込む
ofxJSONをインストール
ofxJSONをインストール
‣ Webブラウザで、INVADERのセンサーの値を表示できた
‣ この結果を、openFrameworksから利用したい
‣ JSONデータにアクセスして、その結果をパース(解析)するため
の機能が必要
‣ ofxJSON というアドオン(拡張機能)を利用する
ofxJSONをインストール
‣ iOSでも利用可能に修正したofxJSONを下記に用意
‣ Zip形式でダウンロードする
‣ https://github.com/tado/ofxJSON
ofxJSONをインストール
‣ ofxJSON-masterのZipファイルを解凍し、addons/ 以下に
新規プロジェクトの作成
WebAPI の値をopenFrameworksに読み込む
‣ 新規プロジェクトを作成
‣ apps/myApps/emptyExample をフォルダごとコピー
WebAPI の値をopenFrameworksに読み込む
‣ 作成したプロジェクトをXcodeで開く
‣ 「addons」を右クリック → 「Add files...」を選択
WebAPI の値をopenFrameworksに読み込む
‣ addons/ofxJSON を選択
WebAPI の値をopenFrameworksに読み込む
‣ 「src 」と「lib」フォルダ以外は削除
‣ 下記のような、ファイル構成に
JSONファイルを読み込んでみる
JSONファイルを読み込んでみる
‣ 作成したプロジェクトに、INVADERのJSONデータを読み込ん
でみる
‣ とても簡単!!
JSONファイルを読み込んでみる
‣ testApp.h
#pragma once
#include
#include
#include
#include

"ofMain.h"
"ofxiOS.h"
"ofxiOSExtras.h"
"ofxJSONElement.h"

← 追加

class testApp : public ofxiOSApp{
public:
void
void
void
void

setup();
update();
draw();
exit();

...(中略)...

};

ofxJSONElement response;

← 追加
JSONファイルを読み込んでみる
‣ testApp.mm
#include "testApp.h"
//-------------------------------------------------------------void testApp::setup(){
ofBackground(224);
ofSetFrameRate(30);
// ARTSAT WebAPIにアクセスしてJSONデータを取得
bool result = response.open("http://api.artsat.jp/web/v2/invader/
sensor_data.json");
// 取得結果をコンソールに出力
if (!result) {
// もし取得できなかったら、エラーを出力
cout << "faild to get JSON data!" << endl;
} else {
// 取得に成功したら、JSONデータを出力

}
...

}

cout << response.getRawString() << endl;
JSONファイルを読み込んでみる
‣ ビルドして実行
‣ Xcodeのコンソール(画面下)に、JSONデータが表示される
JSONデータを画面に表示
JSONデータを画面に表示
‣ JSONデータをopenFrameworksのプログラムに読み込むこと
ができた
‣ 次に画面にデータを表示したい
‣ まず手始めに、取得したJSONの文字列をそのまま画面に表示
してみる
‣ ofDrawBitmapString() を使用する
JSONデータを画面に表示
‣ testApp.mm
‣ testApp::draw() に下記のプログラムを追加
#include "testApp.h"
...(中略)...
//-------------------------------------------------------------void testApp::draw(){
ofSetColor(63);
ofDrawBitmapString(response.getRawString(), 10, 12);
}
JSONデータを画面に表示
‣ iPhoneの画面にJSONデータが表示
される(はず)!
JSONデータをパース(解析)する
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();
...
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);
}
JSONデータをパース(解析)する
‣ それぞれのセンサーの値を、独立し
て取り出すことが出来た!
‣ あとは、この値をどのように視覚化
するか
‣ 続きは次週に!!
参考: センサーの値を全て出力
参考: センサーの値を全て出力
‣ センサーの値を全て出力するプログラム
‣ JSONのパースに、少し工夫が必要
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));
}
}
JSONデータを画面に表示
‣ 完成!!
今日はここまで
続きは、来週に!

More Related Content

PDF
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
PDF
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
PDF
iTamabi 13 第5回:ARTSAT API 導入
PDF
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
PDF
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
PDF
Interactive Music II ProcessingとSuperColliderの連携1
PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
PDF
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第5回:ARTSAT API 導入
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
Interactive Music II ProcessingとSuperColliderの連携1
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B

What's hot (16)

PDF
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
PDF
衛星芸術Pbl 2011 10_18
PDF
衛星芸術Pbl 2011 10_11
PDF
Media Art II 2013 第5回:openFrameworks Addonを使用する
PDF
Interactive Music II Processingによるアニメーション
PDF
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
PDF
AVRマイコン入門
PDF
20210514 sports IoTLT vol7 kitazaki v1
PPTX
Makerの「道具」としてのカスタムLSI
PDF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
PPTX
async/await のしくみ
PDF
Common LispでGPGPU
PDF
Synthesijer and Synthesijer.Scala in HLS-friends 201512
PDF
iTamabi iPhoneアプリ実践開発講座2 - 時計アプリをつくる
PDF
Log解析の超入門
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
衛星芸術Pbl 2011 10_18
衛星芸術Pbl 2011 10_11
Media Art II 2013 第5回:openFrameworks Addonを使用する
Interactive Music II Processingによるアニメーション
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
AVRマイコン入門
20210514 sports IoTLT vol7 kitazaki v1
Makerの「道具」としてのカスタムLSI
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
async/await のしくみ
Common LispでGPGPU
Synthesijer and Synthesijer.Scala in HLS-friends 201512
iTamabi iPhoneアプリ実践開発講座2 - 時計アプリをつくる
Log解析の超入門
Ad

Similar to iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する (20)

PPTX
Develop Web Application with Node.js + Express
PDF
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
PDF
Head toward Java 15 and Java 16
PDF
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
PDF
Using Ext Direct with SenchaTouch2
PDF
Stream processing and Norikra
PDF
WordPressと外部APIとの連携
PPTX
Facebook Parseの世界
PDF
SparqlEPCUが提供するlod開発プラットフォーム
PDF
【Interop Tokyo 2018】 Telemetryの匠が解説~オープン技術を用いたマイクロバースト検知の最前線~
PDF
AppiumのWebViewアプリテストの仕組みとハマりどころ
PDF
Data apiで実現 進化するwebの世界
PPTX
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
PDF
ソーシャルアプリ勉強会(第一回資料)配布用
PDF
MacPort japanese_ver.1.0
PDF
初めての Data API CMS どうでしょう - 仙台編 -
PDF
初めての Data api cms どうでしょう - 大阪夏の陣
PDF
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
PDF
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
PDF
Parse触ってみた
Develop Web Application with Node.js + Express
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Head toward Java 15 and Java 16
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
Using Ext Direct with SenchaTouch2
Stream processing and Norikra
WordPressと外部APIとの連携
Facebook Parseの世界
SparqlEPCUが提供するlod開発プラットフォーム
【Interop Tokyo 2018】 Telemetryの匠が解説~オープン技術を用いたマイクロバースト検知の最前線~
AppiumのWebViewアプリテストの仕組みとハマりどころ
Data apiで実現 進化するwebの世界
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
ソーシャルアプリ勉強会(第一回資料)配布用
MacPort japanese_ver.1.0
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data api cms どうでしょう - 大阪夏の陣
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
Parse触ってみた
Ad

More from Atsushi Tadokoro (20)

PDF
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
PDF
プログラム初級講座 - メディア芸術をはじめよう
PDF
Interactive Music II ProcessingとSuperColliderの連携 -2
PDF
coma Creators session vol.2
PDF
Interactive Music II Processing基本
PDF
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
PDF
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
PDF
Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)
PDF
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
PDF
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
PDF
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
PDF
Tamabi media131118
PDF
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
PDF
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
PDF
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
PDF
Media Art II openFrameworks 複数のシーンの管理・切替え
PDF
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
PDF
Geidai music131107
PDF
Interactive Music II SuperCollider入門 5 時間構造をつくる
PDF
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
プログラム初級講座 - メディア芸術をはじめよう
Interactive Music II ProcessingとSuperColliderの連携 -2
coma Creators session vol.2
Interactive Music II Processing基本
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Tamabi media131118
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
Media Art II openFrameworks 複数のシーンの管理・切替え
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
Geidai music131107
Interactive Music II SuperCollider入門 5 時間構造をつくる
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL

iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する