4

我正在使用 Nokogiri 从在线 xml 文档中获取一些天气数据,并且我想设置一个超时以进行正常恢复,以防无法访问源...

我的谷歌搜索显示了几种可能的 open-uri 和 Net::HTTP 方法,但没有特定于 Nokogiri。我使用这些方法的尝试失败了(不足为奇):

begin
currentloc = ("http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=" + @destination.weatherloc)
currentloc.read_timeout = 10 # 
doc = Nokogiri::XML(open(currentloc))
rescue Timeout::Error
  return "Current weather for this location not available: request timed out."
end

返回“NoMethodError”,并且:

begin
currentloc = ("http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=" + @destination.weatherloc)
doc = Nokogiri::XML(open(currentloc), :read_timeout => 10)
rescue Timeout::Error
  return "Current weather for this location not available: request timed out."
end

返回“TypeError 无法将 Hash 转换为 String”

Nokogiri 是否支持这种方法(如果支持……如何?),还是我应该寻找其他解决方案?

谢谢。

4

1 回答 1

4

您可以使用超时模块:

require 'open-uri'
require 'nokogiri'
require 'timeout'

begin
  timeout(10) do
    result = Nokogiri::XML(open(currentloc))
  end
rescue Timeout::Error
  return "Current weahter..."
end
于 2009-09-25T20:54:18.730 回答