• 検索結果がありません。

情報システム設計論II ユーザインタフェース(1)

N/A
N/A
Protected

Academic year: 2021

シェア "情報システム設計論II ユーザインタフェース(1)"

Copied!
51
0
0

読み込み中.... (全文を見る)

全文

(1)

中村研究室ゼミ

Web API / 取り込んで利用する

(2)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 2

PHP + MySQL どうでした?

• データを集めるのが大変

• データベースを構築するのが大変

• データを入力してくのが大変

(3)

Web API とは?

• API

– Application Program Interface(何らかの機能をプロ

グラミングするための仕組み)

– メソッド名+引数で何らかの動作を実現する!

• Web API

– Web上でアクセス可能なAPI

– 様々な情報にアクセスすることが可能

• 何かの緯度経度,キーワード検索結果,画像検索結果,

商品検索,書籍検索,ブックマーク数,地図,形態素解析

アニメ検索,R18コンテンツ検索,Facebook,Twitter,メー

(4)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 4

Web API

• 例えばこんな感じ

– http://ma9.mashupaward.jp/apis

– http://www.find-job.net/startup/api-2013

(5)

何ができるか?

• 一般的なAPIはメソッドとして用意されており,そ

こに引数を渡すことで何かの動作を実現する

– ellipse( 200, 200, 50, 50 );

– dist( mouseX, mouseY, 200, 200 );

• Web APIはGETリクエストであるURLに必要な情

報を渡すことで何らかの結果を得る

(6)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 6

メソッドの内部処理

• 入力(引数)に応じて何かの結果を返す

return で指定

されたものが

出力される

なんか

処理機

return

posX

posXを 利用して 処理する

x

int NankaShori( int posX ){ posXを利用して処理 return なにか返す; } if( NankaSyori( x ) == ??? ){ … }

50

if( NankaSyori( 50 ) == ??? ){ … }

(7)

メソッドの内部処理

• 複数の引数を受け取ることが可能

return で指定

されたものが

出力される

なんか

処理機

return

posX

posY

posX, posYを 利用して 処理する

x

y

int NankaShori( int posX, int posY ){ if( NankaSyori( x, y ) == ??? ){ … }

5

3

(8)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 8

Web APIの内部処理

• 入力(引数)に応じて何かの結果を返す

XML/JSON形

式で結果が取

得できる

なんか

処理機

XML/JSON

x

xを利用して 何かの処理 を行う

$x

http://example.jp/api?x=$x

50

http://example.jp/api?x=50

(9)

メソッドの内部処理

• 複数の引数を受け取ることが可能

なんか

処理機

x

y

x, yを 利用して 処理する

$x

$y

5

3

http://example.jp/api?x=$x&y=$y http://example.jp/api?x=5&y=$y

XML/JSON

XML/JSON形

式で結果が取

得できる

(10)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

10

例えば

• SUNTORY BAR-NAVI Web API

– http://webapi.suntory.co.jp/barnavi/v2/shops?

– を使ってみる! バーのナビに関するAPI

(11)
(12)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

(13)
(14)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

14

(15)

APIの仕様

• http://webapi.suntory.co.jp/barnavi/v2/shops?k

ey={APIキー}&pattern=0&pref=26&url={呼び出

し元サービスURL}

• http://webapi.suntory.co.jp/barnavi/v2/shops?k

ey=

95315b1507e3a1ee615bebdf97fb73f7121b4

1d9b504011e7570e282dc4389c3

&pattern=0&p

ref=

07

&url=

http://nkmr.io/

(16)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

16

(17)

例えば中野区で検索

• http://webapi.suntory.co.jp/barnavi/v2/shops?k

ey=95315b1507e3a1ee615bebdf97fb73f7121b4

1d9b504011e7570e282dc4389c3&pattern=0&p

ref=

13

&address=

中野区

&url=http://nkmr.io/

• http://webapi.suntory.co.jp/barnavi/v2/shops?k

ey=95315b1507e3a1ee615bebdf97fb73f7121b4

1d9b504011e7570e282dc4389c3&pattern=0&p

ref=

13

&address

=%E4%B8%AD%E9%87%8E%E5

(18)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

(19)
(20)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 20

XMLの読み方

• タグで囲まれている部分が,そのタグに関する

情報となる

– <shops> ~ </shops> が「shops(店リスト)」

• 一番親の階層となっている(HTMLと同じでコンテンツはツ

リー上になっている)

– <shop> ~ </shop> が「shop(ある1つの店)」

– <address> ~ </address> が「住所」

– <name> ~ </name> が「店の名前」

などなど

(21)
(22)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

22

(23)

つまり

• Web APIを使って色々なパラメータ(クエリ)を送

りつけると,それに応じてレスポンス(結果)を得

ることができる!

(24)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 24

PHPで取得してみよう

• file_get_contents( ファイルパス );

– あるURLにあるファイルを取得する

• simpexml_load_file( ファイルパス );

– あるURLにあるXMLを取得する

(25)

試しに下記を実行しよう!

<html>

<body>

近くのバーの情報を取得してみよう!

<?php

$url =

"http://webapi.suntory.co.jp/barnavi/v2/shops?key=95315b1507

e3a1ee615bebdf97fb73f7121b41d9b504011e7570e282dc4389c3

&pattern=0&pref=01&url=http://nkmr.io/";

$html = file_get_contents( $url );

echo $html;

?>

</body>

(26)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 26

XMLで取得してみよう

<html>

<body>

近くのバーの情報を取得してみよう!

<?php

$url =

"http://webapi.suntory.co.jp/barnavi/v2/shops?key=95315b1507

e3a1ee615bebdf97fb73f7121b41d9b504011e7570e282dc4389c3

&pattern=0&pref=01&url=http://nkmr.io/";

$xml = simplexml_load_file( $url );

echo $xml;

?>

</body>

</html>

表示できない!

(27)

XMLはそのまま出力できない

• $xml = simplexml_load_file( $url ); で取得され

た値は,ツリー型のオブジェクトになっているの

で,そのままでは表示することができない

• var_dump( $xml ); という値をダンプする(デバッ

グ用に構造も含めて内容を表示すること)ことで

構造を取得することが可能!

(28)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 28

XMLで取得してみよう

<html>

<body>

近くのバーの情報を取得してみよう!

<?php

$url =

"http://webapi.suntory.co.jp/barnavi/v2/shops?key=95315b1507

e3a1ee615bebdf97fb73f7121b41d9b504011e7570e282dc4389c3

&pattern=0&pref=01&url=http://nkmr.io/";

$xml = simplexml_load_file( $url );

var_dump( $xml );

?>

</body>

</html>

なんか表示される!

(29)
(30)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 30

XMLの結果をちょっと見てみる

• api_version が2?

• results_available が 191件?

• results_returned が 10件?

などのような結果になっていることがわかる

• じゃあ,この結果を表示するにはどうする?

(31)

-> でつないで表示!

• root (一番の親)からどのようにたどるかを「->」

で表現する

:

$xml = simplexml_load_file( $url );

echo

$xml->api_version

. ", ";

echo

$xml->results_returned

. "/";

echo

$xml->results_available

;

:

(32)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

32

お店情報は?

(33)

shop情報を表示

• echo $xml->shop; ではお店の情報を表示できな

い(shopもツリー構造のオブジェクトのため)

• 表示するのであれば var_dump( $xml->shop );

• お店の名前を表示するには?

– echo $xml->shop->name;

10件あるはずなのに1件しか表示されない

(34)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 34

配列の値を取得するには?

• 1~10番目の値は...

• echo $xml->shop[0]->name;

• echo $xml->shop[1]->name;

:

• echo $xml->shop[7]->name;

• echo $xml->shop[8]->name;

• echo $xml->shop[9]->name;

• という配列の値として取得することが可能

• つまり,繰り返しですべての結果を取得可能!

(35)

<html>

<body>

北海道のバーの情報を取得してみよう!

<?php

$url =

"http://webapi.suntory.co.jp/barnavi/v2/shops?key=95315b1507

e3a1ee615bebdf97fb73f7121b41d9b504011e7570e282dc4389c3

&pattern=0&pref=01&url=http://nkmr.io/";

$xml = simplexml_load_file( $url );

for( $i=0; $i<count($xml->shop); $i++ ){

echo $xml->shop[$i]->name . "<br>";

}

?>

(36)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 36

演習

• 現在北海道の10件を表示しているが,100件表

示してみよう

• 東京のバーを取得し,さらに値段の絞り込みを

行おう(3000~5000円)

• 取得した結果をテーブルの形で表示しよう!

(37)

取得した緯度経度を表示!

(38)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

38

まずYahoo! Japan IDでログイン

必要に応じて

(39)
(40)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

40

(41)
(42)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

42

(43)
(44)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

44

(45)

じゃあ,これをプログラムから

• 緯度経度は

– $xml->shop[ ?? ]->lat_tokyo;

– $xml->shop[ ?? ]->lng_tokyo;

– で取得できるっぽい!(東京測地系と,ワールド測

地系があり,どちらかはAPIに依存する)

• じゃあ,その取得した緯度経度を適用して画像

を表示してみよう!

(46)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 46

<html><body>

東京中野区のバーの情報を取得してみよう!

<?php

$url =

"http://webapi.suntory.co.jp/barnavi/v2/shops?key=95315b1507

e3a1ee615bebdf97fb73f7121b41d9b504011e7570e282dc4389c3

&pattern=0&address=中野区&pref=01&url=http://nkmr.io/";

$xml = simplexml_load_file( $url );

for( $i=0; $i<count($xml->shop); $i++ ){

echo $xml->shop[$i]->name . "<br>";

$img_url =

"http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?ap

pid=XXXXXXXXXX&lat=".$xml->shop[$i]->lat_tokyo."&"...;

echo "<img width=300 height=200 src=¥"$img_url¥">";

echo "<br>";

}

?>

(47)

違いがわからん!

• 拡大しよう!

(48)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室

48

(49)

XML と JSON

• レスポンスを返す仕組みの違い

– XMLの方が可読性が高い

– JSONの方がJavaScriptで処理するとき高速

(50)

Human-Information Interaction Lab / Nakamura Lab 明治大学総合数理学部先端メディアサイエンス学科 中村聡史研究室 50

宿題

• ぐるなびAPIを利用し,住所の一部を入力すると

周辺のお店を表示するプログラムを作成せよ

– トップページなどからリンクを貼ること

• 何か面白そうなAPIを探してみよう!

(51)

宿題

• 3つ以上のAPIを組み合わせたサービスを開発

せよ.ただし,キーワードで検索できる仕組み

は最低限入れること

• 作成したサービスを自身のWebページからリン

クせよ

• 自身のウェブサイトの見栄えをあげよ

– テンプレートを使って良い

参照

関連したドキュメント

 当図書室は、専門図書館として数学、応用数学、計算機科学、理論物理学の分野の文

講師:首都大学東京 システムデザイン学部 知能機械システムコース 准教授 三好 洋美先生 芝浦工業大学 システム理工学部 生命科学科 助教 中村

Photo Library キャンパスの夏 ひと 人 ひと 私たちの先生 文学部  米山直樹ゼミ SKY SEMINAR 文学部総合心理科学科教授・博士(心理学). 中島定彦

入学願書✔票に記載のある金融機関の本・支店から振り込む場合は手数料は不要です。その他の金融機

○経済学部志願者は、TOEIC Ⓡ Listening &amp; Reading Test、英検、TOEFL のいずれかの スコアを提出してください。(TOEIC Ⓡ Listening &amp; Reading Test

関谷 直也 東京大学大学院情報学環総合防災情報研究センター准教授 小宮山 庄一 危機管理室⻑. 岩田 直子

向井 康夫 : 東北大学大学院 生命科学研究科 助教 牧野 渡 : 東北大学大学院 生命科学研究科 助教 占部 城太郎 :

社会学研究科は、社会学および社会心理学の先端的研究を推進するとともに、博士課