GoogleのWeatherAPIから情報を取得することにしました-以下で使用しているコードは正常に機能します。
XmlDocument widge = new XmlDocument();
widge.Load("https://www.google.com/ig/api?weather=Brisbane/dET7zIp38kGFSFJeOpWUZS3-");
var weathlist = widge.GetElementsByTagName("current_conditions");
foreach (XmlNode node in weathlist)
{
City.Text = ("Brisbane");
CurCond.Text = (node.SelectSingleNode("condition").Attributes["data"].Value);
Wimage.ImageUrl = ("http://www.google.com/" + node.SelectSingleNode("icon").Attributes["data"].Value);
Temp.Text = (node.SelectSingleNode("temp_c").Attributes["data"].Value + "°C");
}
}
前述したように、XMLファイルから必要なデータを取得して表示することはできますが、ページが更新されているか、現在のセッションがまだアクティブである場合、次のエラーが発生します。
WebExceptionがユーザーコードによって処理されませんでした-リモートサーバーがエラーを返しました:403ForbiddenException。
これは、その特定のXMLファイルへのアクセスに課せられたある種のアクセス制限と関係があるのではないかと思います。
提案のさらなる調査と適応
以下に説明するように、これは決してベストプラクティスではありませんが、現在例外として使用しているキャッチを含めました。このコードはPage_Loadで実行するので、ページにポストバックするだけです。それ以来、問題は発生していません。パフォーマンスに関しては、あまり心配していません。ロード時間の増加には気づいていません。このソリューションはすべてテスト目的であるため、一時的なものです。私はまだYahooのWeatherAPIを使用しているところです。
try
{
XmlDocument widge = new XmlDocument();
widge.Load("https://www.google.com/ig/api?weather=Brisbane/dET7zIp38kGFSFJeOpWUZS3-");
var list2 = widge.GetElementsByTagName("current_conditions");
foreach (XmlNode node in list2)
{
City.Text = ("Brisbane");
CurCond.Text = (node.SelectSingleNode("condition").Attributes["data"].Value);
Wimage.ImageUrl = ("http://www.google.com/" + node.SelectSingleNode("icon").Attributes["data"].Value);
Temp.Text = (node.SelectSingleNode("temp_c").Attributes["data"].Value + "°C");
}
}
catch (WebException exp)
{
if (exp.Status == WebExceptionStatus.ProtocolError &&
exp.Response != null)
{
var webres = (HttpWebResponse)exp.Response;
if (webres.StatusCode == HttpStatusCode.Forbidden)
{
Response.Redirect(ithwidgedev.aspx);
}
}
}
APIエラー処理を説明するGoogleの記事
おかげで:
https://stackoverflow.com/a/12011819/1302173(403をキャッチしてリコール)
https://stackoverflow.com/a/11883388/1302173(エラー処理と一般的なGoogle API情報)
https://stackoverflow.com/a/12000806/1302173(応答処理/ jsonキャッシング-将来の計画)
別
私は最近、この素晴らしいオープンソースの代替案を見つけました