トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Web API/クロスドメインの制約回避 の変更点

Top / Web API / クロスドメインの制約回避

**例:LivedoorのWeb APIを用いて天気予報XMLデータを取得する方法



***Web API仕様
[[お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報>http://weather.livedoor.com/weather_hacks/webservice.html]]~
引用:『お天気Webサービス(Livedoor Weather Web Service / LWWS)は、現在全国142カ所の今日・明日・あさっての天気予報・予想気温と都道府県の天気概況情報を提供しています。』『本サービスの情報を利用した、商用活動はご遠慮下さい。』



***Livedoorの天気予報データ取得例
例えばブラウザurlに次のように入れると、神奈川県の今日の天気予報XMLデータが取得できます。
 http://weather.livedoor.com/forecast/webservice/rest/v1?city=70&day=today



***クロスドメインの制約と回避方法概念
あるドメインに配置したHTMLファイルやFlashファイルから別ドメインのデータを直接取ってくることはセキュリティ上の理由でできません。これを「クロスドメインの制約」と呼びます。ただし、同じドメインに中継用のPHPプログラムを配置し、そこから別ドメインのデータを取ってくることは可能です。
~
呼び出しの流れ~
HTMLファイル(Flashファイル) →(urlを渡す)→ translate.php →(htmlリクエスト)→ 別ドメインのWeb APIなど~

クロスドメインについての参考url: [[WEBデザイナーの為のXSS(クロスサイトスクリプティング)入門 | to-R>http://blog.webcreativepark.net/2007/02/03-013141.html]]



***クロスドメインの制約回避のための中継プログラム
クロスドメインの制約回避するためのtranslate.phpは次のように記述し、サーバに配置します。~
translate.php
 <?php
 	if (isset($_GET["url"])) {
 		header("Content-type: application/xml;");
 		readfile($_GET["url"]);
 	}
 ?>



***中継プログラムの呼び出し方法
今回のプログラムではGETでurlを渡しています。GETに記述するとき値をurl encodeで記述する必要があるので、url encodeした文字列を例えば次のようなWebサービスで調べます。~
[[URL エンコード/デコードフォーム>http://home.kendomo.net/board/decode/]]~
~
例であげたリクエストの文字列をurl encodeすると次のようになります。
 http://weather.livedoor.com/forecast/webservice/rest/v1?city=70&day=today
     ↓url encode
 http%3A%2F%2Fweather.livedoor.com%2Fforecast%2Fwebservice%2Frest%2Fv1%3Fcity%3D70%26day%3Dtoday

これをGETを用いて'url'というキーでtranslate.phpに渡せば、translate.phpは結果を返します。HTMLファイルやFlashファイルからは次のように呼び出します。
 translate.php?url=http%3A%2F%2Fweather.livedoor.com%2Fforecast%2Fwebservice%2Frest%2Fv1%3Fcity%3D70%26day%3Dtoday



***その他のクロスドメイン回避方法
-[[Dojoで簡単にクロスドメインAjaxを実現 | ウノウラボ>http://labs.unoh.net/2006/10/dojoioscriptsrcioajax.html]]
-[[XMLHttpRequest のクロスドメインの制約についてまとめたφ(..)メモメモ>http://d.hatena.ne.jp/nyagao/20070529/1180452264]]
-[[クロスサイトスクリプティング再入門 スライドショー>http://www.slideshare.net/ockeghem/xssreintroduction]]

-[[jquery で クロスドメイン 外部ドメインのファイルにアクセス>http://matomater.com/632/]]