Google Weather API 403错误
我决定从Google的Weather API中提取信息 - 我在下面使用的代码正常工作。Google Weather API 403错误
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 was unhandled by user code - The remote server returned an error: 403 Forbidden Exception.
我想知道这是否可以做某种访问限制放在访问该特定的XML文件?
进一步的研究和建议的
如后所述适应,这绝不是最好的做法,但我已经包括了抓我现在使用的除外。我在Page_Load上运行这个代码,所以我只做一个回传到页面。自那以后我没有注意到任何问题。性能方面,我并不过分担心 - 我没有注意到加载时间有任何增加,并且这种解决方案是暂时的,因为这些都是为了测试目的。我仍在使用雅虎的Weather API。
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错误处理
感谢:
https://stackoverflow.com/a/12011819/1302173(捕捉403和召回)
https://stackoverflow.com/a/11883388/1302173(错误处理和一般谷歌API的信息)
https://stackoverflow.com/a/12000806/1302173(响应处理/ JSON缓存 - 未来的计划)
替代
我发现这个伟大的开源替代品最近
这是关系到服务的变化/停运。请参阅:http://status-dashboard.com/32226/47728
我一直在使用谷歌的天气API一年多了,这样的宝利通电话接收天气页面养活电话服务器。它已经运行一年多了。截至2012年8月7日,经常出现间歇性403次错误。
我每小时打一次服务(因为一直如此),所以我不认为请求的频率是问题。更有可能的是,403的间歇性与Google的配置更改或CDN更改的部分展开有关。
Google Weather API实际上并不是已发布的API。这是一种显然是为在iGoogle上使用而设计的内部服务,因此支持级别不确定。我昨天推特googleapis并没有收到任何回应。
这可能是更好的切换到促进的天气API如: WUnderground Weather或 Yahoo Weather。
我已经添加了以下“另有定义的”错误处理Perl代码我昨天来应对这一点,但如果问题仍然存在,我会切换到更全面的支持服务:
my $url = "http://www.google.com/ig/api?weather=" . $ZipCode ;
my $tpp = XML::TreePP->new();
my $tree = $tpp->parsehttp(GET => $url);
my $city = $tree->{xml_api_reply}->{weather}->{forecast_information}->{city}->{"-data"};
unless (defined($city)) {
print "The weather service is currently unavailable. \n";
open (MYFILE, '>/home/swarmp/public_html/status/polyweather.xhtml');
print MYFILE qq(<?xml version="1.0" encoding="utf-8"?>\n);
print MYFILE qq(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">\n);
print MYFILE qq(<html xmlns="http://www.w3.org/1999/xhtml">\n);
print MYFILE qq(<head><title>Weather is Unavailable!</title></head>\n);
print MYFILE qq(<body>\n);
print MYFILE qq(<p>\n);
print MYFILE qq(The weather service is currently unavailable from the data vendor.\n);
print MYFILE qq(</p>\n);
print MYFILE qq(</body>\n);
print MYFILE qq(</html>\n);
close MYFILE;
exit(0);
}...
我发现,如果你在干净的浏览器中尝试请求(例如Chrome上的新窗口隐身模式)谷歌天气服务工作。 Cookie可能存在问题?
不幸的是,新的浏览器似乎无法正常工作。问题是,服务本身从未打算在iGoogle使用的Weather Widget之外使用。由于许多因素,包括iGoogle正在逐渐停止使用,对于我们遇到性能问题,我并不感到惊讶。我将在第二天或第二天发布我的雅虎API代码。但我认为,无论浏览器状态如何,我们都不会看到任何问题的结束。 – mitchimus 2012-08-17 14:00:58
这是我们发现的同样的事情。
比较差请求和工作请求中的请求头。工作要求包括cookies。但他们从哪里来?
从google中删除所有浏览器cookie。天气API调用将不再适用于您的浏览器。浏览到google.com,然后浏览到天气api,它会再次运行。
谷歌检查cookie以阻止多个API调用。在处理所有天气api请求之前获取cookie一次将解决问题。 Cookie将在一年内过期。我假设你会更频繁地重新启动你的应用程序,然后每年一次。所以你会得到一个新的。为每个请求获取Cookie将以相同的问题结束:太多不同的请求。
一个提示:天气不会经常变化,所以缓存json信息(可能一个小时)。这将按照要求减少耗时的操作!
这绝不是最佳做法,但我在一些WP7和Metro应用程序中大量使用此API。我通过捕获异常(大部分时间为403)并简单地重新调用服务内部的服务来处理此问题,如果Google结束时出现错误,它通常会短暂地执行,并且只会导致1或2个额外的调用。
优秀的答案!我将被推测推测iGoogle的拆除正在影响这项服务。 我隐约地意识到API是“仅供Widget使用”,所以我认为服务可靠性存在问题并不令人意外。 我会研究使用这些替代方法,并可能调整异常处理背后的想法。再次感谢! – mitchimus 2012-08-10 01:05:43
Sheesh!打破你的尝试/抓住每个人... +1 – 2012-08-10 02:08:48
截至2012年8月27日,该服务正在响应一致的403错误,并显示一条消息,指出您正在发送自动查询。: – ClearCrescendo 2012-08-31 19:23:50