0

Rails 3 で開発し、Nokogiri を使用しています。私のコントローラーは複数のサイトを解析し、ビューに結果を表示します。問題は、これらのサイトのいずれかが利用できない場合 (403 または 503 エラーなど)、そのサイトが原因ですべての webapp がクラッシュすることです。

私の質問: 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: 「DRY」原則の反対であり、まだ学習中であるため、コードが完全に「完璧」ではないことはわかっています ;)

4

1 に答える 1

1

それらのそれぞれをbegin --rescueブロック内に配置しようとすることができるので、それらの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
于 2013-07-31T21:19:00.760 に答える