Tôi quyết định lấy thông tin từ API thời tiết của Google - Mã tôi đang sử dụng bên dưới hoạt động tốt.Lỗi thời tiết Google 403 Lỗi
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");
}
}
Như tôi đã nói, tôi có thể để kéo dữ liệu cần thiết từ các tập tin XML và hiển thị nó, tuy nhiên nếu trang được làm mới hoặc một phiên hiện tại vẫn còn hoạt động, tôi nhận được lỗi sau:
WebException was unhandled by user code - The remote server returned an error: 403 Forbidden Exception.
Tôi đang tự hỏi liệu điều này có thể liên quan đến một số loại giới hạn truy cập được đưa vào quyền truy cập vào tệp XML cụ thể đó không?
Nghiên cứu sâu hơn và thích ứng gợi ý
Như đã trình bày dưới đây, điều này là do không có phương tiện thực hành tốt nhất, nhưng tôi đã bao gồm đánh bắt bây giờ tôi sử dụng cho ngoại lệ. Tôi chạy mã này trên Page_Load vì vậy tôi chỉ làm một post-back cho trang. Tôi đã không nhận thấy bất kỳ vấn đề kể từ đó. Hiệu suất khôn ngoan Tôi không quá lo lắng - Tôi đã không nhận thấy bất kỳ sự gia tăng thời gian tải và giải pháp này là tạm thời do thực tế này là tất cả cho mục đích thử nghiệm. Tôi vẫn đang trong quá trình sử dụng API thời tiết của Yahoo.
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);
}
}
}
bài viết của Google minh họa API xử lý lỗi
Nhờ:
https://stackoverflow.com/a/12011819/1302173 (Catch 403 và thu hồi)
https://stackoverflow.com/a/11883388/1302173 (Xử lý lỗi và Tổng Google thông tin API)
https://stackoverflow.com/a/12000806/1302173 (Phản ứng Xử lý/json bộ nhớ đệm - Dự định sắp tới)
Alternative
Tôi thấy điều này rất tốt thay thế mã nguồn mở gần đây
OpenWeatherMap - Free weather data and forecast API
Câu trả lời hay! Tôi sẽ bị đẩy để suy đoán rằng việc tháo gỡ iGoogle đang ảnh hưởng đến dịch vụ này. Tôi đã mơ hồ nhận thấy rằng API là "chỉ dành cho tiện ích con" nên tôi cho rằng không quá ngạc nhiên khi có vấn đề về độ tin cậy của dịch vụ. Tôi sẽ xem xét sử dụng các lựa chọn thay thế đó và có thể điều chỉnh các ý tưởng đằng sau xử lý ngoại lệ của bạn. Cảm ơn một lần nữa! – mitchimus
Sheesh! Break out try của bạn/bắt tất cả mọi người ... +1 –
Tính đến ngày 27 tháng 8 năm 2012, dịch vụ phản hồi với lỗi 403 nhất quán và thông báo cho biết bạn đang gửi truy vấn tự động .: – ClearCrescendo