1 / 28

オペレーティングシステム Ⅱ 第5回

講師 松本 章代. オペレーティングシステム Ⅱ 第5回. 本日の内容( WebAPI ). Web からのデータ・サービスの取得 データ形式 取得方法. データ形式. XML. JSON. <students> <student> <id>5J01</id> <name>Amano</name> </student> <student> <id>5J02</id> <name> Aruga </name> </student> </students>. [ { "id":"5J01"

ike
Download Presentation

オペレーティングシステム Ⅱ 第5回

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 講師 松本 章代 オペレーティングシステムⅡ第5回

  2. 本日の内容(WebAPI) • Web からのデータ・サービスの取得 • データ形式 • 取得方法

  3. データ形式 XML JSON <students> <student> <id>5J01</id> <name>Amano</name> </student> <student> <id>5J02</id> <name>Aruga</name> </student> </students> [ { "id":"5J01" "name":"Amano" } { "id":"5J02" "name":"Aruga" } ] JavaScriptオブジェクトに 変換するのが容易!

  4. データの取得方法 • iframe • XMLHttpRequest • JSONP • SOAP • 専用 API

  5. データの取得方法 • iframe • XMLHttpRequest • JSONP • SOAP • 専用 API

  6. iframe • 特徴 • 利点: • Web ページの取得と表示が同時に可能 • データ抽出だけの(表示しない)場合、style='visibility: hidden' で対応可能 • 他サイトのページもそのまま見せられる(著作権に注意) • 欠点: • 他サイトの場合、データの抽出が不可能 • 同期がとりにくい

  7. 一番簡単な例は・・・ • なんといっても GoogleMaps !!

  8. JavaScript を利用すれば・・・ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript"> <!-- function doubleSearch() { var keyword = document.getElementById('if_key').value; varuri_go = "http://www.google.co.jp/search?q=" + keyword; varuri_ya = "http://search.yahoo.co.jp/search?p=" + keyword; document.getElementById('if_go').src = uri_go; document.getElementById('if_ya').src = uri_ya; } //--> </script> </head>

  9. <body> <h1><code>iframe</code> でのデータ取得の例</h1> <p>Enter a search term: <input type="text" id="if_key" /> <buttononclick="doubleSearch()">Search now!</button></p> <p>検索の結果: google.com (左) と yahoo.co.jp (右)</p> <p><iframe id="if_go" style="float: left; width: 45%; height: 350px;"> Wait for something to appear here!</iframe> </p> <p><iframe id="if_ya" style="width: 45%; height: 350px;"> Wait for something to appear here, too!</iframe> </p> </body> </html>

  10. データの取得方法 • iframe • XMLHttpRequest • JSONP • SOAP • 専用 API

  11. XMLHttpRequest • JavaScript などのウェブブラウザ搭載のスクリプト言語で、サーバとの HTTP通信を行うための組み込みオブジェクト(API) • すでに読み込んだページからさらにHTTPリクエストを発することができ、ページ遷移することなしにデータを送受信できる Ajaxの基幹技術

  12. Ajax • JavaScript とダイナミック HTML を使った非同期通信アプリケーション • 画面遷移を伴わない動的な Webアプリケーションの製作が実現可能に • 従来の技術の組み合わせ • JavaScript • DHTML • XML • CSS • ・・・etc.

  13. <script type="text/javascript"><!-- • function loadTextFile() • { • httpObj = new XMLHttpRequest();// 1. リクエストオブジェクトの取得 • httpObj.onload = displayData; // 2. callback 関数の用意 • httpObj.open("GET", "data.txt", true); // 3. リクエストの準備 • httpObj.send(null); // 4. リクエストの実行 • } • function displayData() • { • document.ajaxForm.result.value = httpObj.responseText; • } • // --></script> ブラウザによってやり方が異なるので注意! <body> <form name="ajaxForm"> <input type="button" value="読み込み" onClick="loadTextFile()"><br> <textarea name="result" cols="40" rows="5"></textarea> </form> </body>

  14. クロスドメイン制約 • セキュリティ上、HTMLファイル(スクリプト)はそれが置かれているドメインのサーバとしか通信できないという制約がある • これを回避しなければ、スクリプトが置いてあるサーバ以外からファイルを読込めない • 制約あり • iframe • XMLHttpRequest • 制約なし • 画像やスタイルシート • スクリプト 解決策の1つ    JSONPを使う

  15. データの取得方法 • iframe • XMLHttpRequest • JSONP • SOAP • 専用 API

  16. JSONP • 前提 • スクリプトにクロスドメイン制約がない • <script> 要素を追加すると実行される • 問題点 • データの提供者を信頼しなければならない

  17. データ形式 JSON JSONP {"students":[ { "id":"5J01" "name":"Amano" } { "id":"5J02" "name":"Aruga" } ]} callback({"students":[ { "id":"5J01" "name":"Amano" } { "id":"5J02" "name":"Aruga" } ]} ); JSON に関数呼び出しの 仕組みを加えたもの!

  18. HTML ファイル <html> <head> <script src="hoge.js"></script> </head> <body> <input type="button" value="OK" onclick="loadJsonp();" /> <div id="result"></div> </body> </html>

  19. kosen.jsonp result( {"kosen":[{ "prefecture":"北海道", "school_name":"函館工業高等専門学校", },{ "prefecture":"東京都", "school_name":"東京工業高等専門学校", },{ "prefecture":"沖縄県", "school_name":"沖縄工業高等専門学校", }] });

  20. // hoge.js function loadJsonp() { varobjScript = document.createElement("script"); objScript.src = "http://www.sw.it.aoyama.ac.jp/akiyo/lesson/kosen.jsonp"; document.getElementsByTagName("head")[0].appendChild(objScript); } function result(retdata) { var target = document.getElementById('result'); var html = ''; vari = 0; html += "<table><tr><td>都道府県</td><td>高専名</td></tr>"; for (i = 0; i < retdata.kosen.length; i++) { html += "<tr><td>"; html += retdata.kosen[i].prefecture; html += "</td><td>"; html += retdata.kosen[i].school_name; html += "</td></tr>"; } html += "</table>"; target.innerHTML = html; }

  21. 練習課題 • ホットペッパーのAPIを利用して検索サービスを作ってみよう • ユーザ登録を行いAPIキーを取得する • まずはサンプルを改造してみては? http://webservice.recruit.co.jp/hotpepper/reference.html https://webservice.recruit.co.jp/register/index.html http://mtl.recruit.co.jp/blog/2007/08/jsonp_code_sample.html

  22. データの取得方法 • iframe • XMLHttpRequest • JSONP • SOAP • 専用 API

  23. SOAP • IBM や Microsoft など大企業が支持 • W3C で標準化 • 仕様が大掛かりで複雑 • 「Web Service = SOAP」だった時期も • マッシュアップには向かない

  24. データの取得方法 • iframe • XMLHttpRequest • JSONP • SOAP • 専用 API

  25. 専用API • Web サービスが URI のみで提供されるのではなく専用の JavaScript のライブラリを使ってデータ交換を自動的にやってくれる • 典型例: Google Maps • 利点: データ交換を意識する必要が無く便利 • 欠点: 専用 APIまで用意してあるところは   まだまだ少数

More Related