Decidí obtener información de la API meteorológica de Google. El código que estoy usando a continuación funciona bien.Google Weather API 403 Error
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");
}
}
Como ya he dicho, soy capaz de extraer los datos requeridos desde el archivo XML y mostrarlo, sin embargo, si se actualiza la página o una sesión todavía está en ejecución, recibo el siguiente error:
WebException was unhandled by user code - The remote server returned an error: 403 Forbidden Exception.
Me pregunto si esto podría estar relacionado con algún tipo de limitación de acceso para acceder a ese archivo XML en particular?
más investigación y adaptación de sugerencias
Como se indica más adelante, esto es de ninguna manera la mejor práctica, pero he incluido la captura ahora uso de la excepción. Ejecuto este código en Page_Load, así que solo hago una devolución posterior a la página. No he notado ningún problema desde entonces. En cuanto al rendimiento, no estoy demasiado preocupado: no he notado ningún aumento en el tiempo de carga y esta solución es temporal debido a que todo esto es para fines de prueba. Todavía estoy en el proceso de usar Weather API de 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);
}
}
}
artículo Google API error que ilustra el manejo de
Gracias a:
https://stackoverflow.com/a/12011819/1302173 (Catch 403 y el recuerdo)
https://stackoverflow.com/a/11883388/1302173 (Control de errores y el general Google información API)
https://stackoverflow.com/a/12000806/1302173 (respuesta de manejo/JSON almacenamiento en caché - Los planes futuros)
Alternativa
me encontré con este gran alternativa de código abierto recientemente
OpenWeatherMap - Free weather data and forecast API
¡Excelente respuesta! Me presionaría para especular que el desmantelamiento de iGoogle está afectando a este servicio. Estaba vagamente consciente de que la API era "solo para uso de widgets", así que supongo que no es demasiado sorprendente que haya problemas con la fiabilidad del servicio. Analizaré el uso de esas alternativas y, posiblemente, la adaptación de las ideas detrás de su manejo de excepciones. ¡Gracias de nuevo! – mitchimus
Sheesh! Explota tu intento/atrapa a todos ... +1 –
A partir del 27 de agosto de 2012, el servicio responde con un error consistente 403 y un mensaje que indica que estás enviando consultas automáticas .: – ClearCrescendo