現在、Mootools を使用して JavaScript で Google 天気 API を使用するのに問題があります。
私は次のようなコードを使用しています:
var location = $('weather-location').value;
var req = new Request({
url: 'http://www.google.com/ig/api?weather=' + location,
method: 'get',
onSuccess: function(responseText, responseXML)
{
responseXML.getElements('forecast_information').each(function(item)
{
item.getElements('city').each(function(city_data)
{
$('placename').set('html','Weather for ' + city_data.get('data'));
});
});
}
}).send();
このコードによりブラウザ エラーが発生し、Firebug で次のように報告されます。
"NetworkError: 405 Method Not Allowed - http://www.google.com/ig/api?weather=72601&location=72601"
私が収集できることから (私はこれについてはかなり新しいです)、この問題はクロスドメイン アクセス違反によって引き起こされます。
私が試してみました:
1)メソッドに「get」の代わりに「post」を使用...同様の結果
2) リクエストの代わりに Request.HTML と Request.JSON を使用する... 同様の結果
3) Request.JSONP の使用 ...別のエラー (ドキュメントの書式設定と思います)。これは、Google Weather API がそのままの XML を返し、JSONP を提供するように設定されていないためだと思われます。
4) Google への直接の URL の代わりに YQL を使用する (サンプル URL: http://query.yahooapis.com/v1/public/yql?q=select%20 *%20from%20xml%20where%20url%3D"http% 3A%2F%2Fwww.google.com%2Fig%2Fapi%3Fweather%3DDenver%2520CO") ... これにはエラーはありませんでしたが、結果も返されませんでした (URL はブラウザのアドレスに入力すると機能します)。
これを機能させることができた唯一の方法は、天気 XML サーバー側をプルし、プロキシ経由でブラウザーに提供することです。ただし、サーバーに負担をかけずにこれを達成したいと考えています。
これはどのように行うことができますか?