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

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

Last-modified: 2018-11-14 (水) 15:24:05 (1042d)
Top / Web API / クロスドメインの制約回避

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

Web API仕様

お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報
引用:『お天気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

クロスドメインの制約回避のための中継プログラム

クロスドメインの制約回避するための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 エンコード/デコードフォーム

例であげたリクエストの文字列を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

その他のクロスドメイン回避方法