Google Weather API 403 Błąd [duplikat]
To pytanie ma już tutaj odpowiedź:
Zniknął Google Weather API? 4 odpowiedziZdecydowałem się pobrać informacje z Google Weather Weather API - Kod, którego używam poniżej, działa poprawnie.
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");
}
}
Jak już powiedziałem, jestem w stanie pobrać wymagane dane z pliku XML i wyświetlić je, jednak jeśli strona jest odświeżona lub bieżąca sesja jest nadal aktywna, pojawia się następujący błąd:
WebException nie był obsługiwany przez kod użytkownika - zdalny serwer zwrócił błąd: 403 Forbidden Exception.
Zastanawiam się, czy może to być związane z jakimś ograniczeniem dostępu do dostępu do tego konkretnego pliku XML?
Dalsze badania i adaptacja sugestiiJak stwierdzono poniżej, w żadnym wypadku nie jest to najlepsza praktyka, ale do wyjątku dodałem haczyk, którego teraz używam. Używam tego kodu na stronie PageLLoad, więc po prostu robię post-back do strony. Od tamtej pory nie zauważyłem żadnych problemów. Wydajność nie jestem zbytnio zaniepokojona - nie zauważyłem żadnego wzrostu czasu ładowania i to rozwiązanie jest tymczasowe, ponieważ to wszystko służy do celów testowych. Nadal jestem w trakcie korzystania z API pogody 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);
}
}
}
Artykuł Google ilustrujący obsługę błędów interfejsu APIBłędy uchwytu interfejsu API Google
Dzięki:https://stackoverflow.com/a/12011819/1302173 (Złap 403 i przypomnij sobie)
https://stackoverflow.com/a/11883388/1302173 (Obsługa błędów i ogólne informacje o interfejsie API Google)
https://stackoverflow.com/a/12000806/1302173 (Obsługa reakcji / buforowanie json - Plany na przyszłość)
AlternatywnyNiedawno znalazłem tę świetną alternatywę open source