Rails/nokogiri_parse несколько ошибок обработки сайтов
Я работаю над Rails 3 и использую Nokogiri. Мой контроллер анализирует несколько сайтов и показывает результат в моем представлении. Проблема в том, что когда один из этих сайтов недоступен (например, ошибка 403 или 503), происходит сбой всех веб-приложений из-за этого сайта.
Мой вопрос: есть ли способ проверить доступность проанализированных страниц до того, как Nokogiri откроет их, или лучше, пройдя / игнорируя недоступность?
Спасибо
Часть моего контроллера:
Docvariable1 = Nokogiri::HTML(open("http://www.site1.com/"))
@variable1 = {}
docvariable1.xpath('//div[6]/h3/a').each do |link|
@variable1[link.text.strip] = link['href']
End
Docvariable2 = Nokogiri::HTML(open("http://www.site2.com/"))
@variable2 = {}
docvariable2.xpath('//div[6]/h3/a').each do |link|
@variable2[link.text.strip] = link['href']
End
Docvariable3 = Nokogiri::HTML(open("http://www.site3.com/"))
@variable3 = {}
docvariable3.xpath('//div[6]/h3/a').each do |link|
@variable3[link.text.strip] = link['href']
end
Часть моего взгляда
<% if @variable1 %>
<% @variable1.each do |key, value| %>
<li ><a href=" <%= "#{value}" %>" target='_blank' ><%= "#{key}" %></a>
<% end %>
<% end %>
<% if @variable2 %>
<% @variable1.each do |key, value| %>
<li ><a href=" <%= "#{value}" %>" target='_blank' ><%= "#{key}" %></a>
<% end %>
<% end %>
<% if @variable3 %>
<% @variable1.each do |key, value| %>
<li ><a href=" <%= "#{value}" %>" target='_blank' ><%= "#{key}" %></a>
<% end %>
<% end %>
PS: я знаю, что код не совсем "идеальный", потому что он противоположен принципу "СУХОЙ", все еще учусь;)
1 ответ
Вы можете попытаться поместить каждый из них в блок "начало - спасение", чтобы он не потерпел неудачу, если один из них недоступен. Затем вы можете обработать эти исключения, если это необходимо.
begin
docvariable1 = Nokogiri::HTML(open("http://www.site1.com/"))
@variable1 = {}
docvariable1.xpath('//div[6]/h3/a').each do |link|
@variable1[link.text.strip] = link['href']
end
rescue
# Handle exception
end