2012-04-26 105 views
1

我有一個關於將Nokogiri應用到我的Rails應用程序的問題。我試圖從網站收集棒球統計數據並將數據顯示到視圖中。我成功解析了數據,但是,我不確定以REST方式存儲代碼的位置。目前,我正在收集統計數據,將它們放在一個數組中,然後將它們與另一個數組(通過軍銜,團隊,聯盟等)進行匹配。然後將這兩個數組放入哈希中。有沒有更有效的方法來做到這一點(如解析數據,然後將數據分配爲散列值,而排名,團隊,聯盟等被指定爲散列鍵)?Rails:Nokogiri問題,在哪裏放置代碼。

最後,我把Nokogiri調用放到我的控制器中,但我相信有更好的方法。 Ryan Bate的Railscasts建議將Nokogiri調用放入rake任務(/ lib/tasks /)。因爲,我希望網站每天都能獲得新的棒球統計數據,我是否需要定期運行耙子任務?其次,我如何最好地將數據實施到視圖中。

在線搜索帶來了把它放到配置/初始化程序中的想法,但我不確定這是否是更好的解決方案。

以下是引入nokogiri電話:

task :fetch_mets => :environment do 
    require 'nokogiri' 
    require 'open-uri' 

    url = "http..." 
    doc = Nokogiri::html(open(url)) 

    x = Array.new 
    doc.css('tr:nth-child(14) td').each do |stat| 
     x << stat.content 
    end 

    a = %w[rank team league games_total games_won games_lost ratio streak] 
    o = Hash[a.zip x] 

    statistics = Hash[o.amp{|(y,z)| [y.to_sym, z]}] 

    @order_stat = statistics.each{|key, value| puts #{key} is #{value}."} 
end 

請讓我知道如果我要澄清什麼,非常感謝。

回答

2

在你的數據庫中創建一個叫做統計的表,並在你的散列中加上所有的鍵(加上created_on和id)。要保存您的統計信息,請執行以下操作:

Statistic.new(statistics).save 

然後在您的視圖中拉出最高的created_on。 要在cron計劃上運行rake任務,請查看whenever

也可能是清潔劑來做它更像是:

keys = %w[rank team league games_total games_won games_lost ratio streak].map(&:to_sym) 
values = doc.css('tr:nth-child(14) td').map(&:text) 
statistics = Hash[keys.zip values] 
+0

非常感謝!這非常有用,尤其是乾淨的代碼示例。 – duggiefresh 2012-04-26 14:40:36

+0

不客氣。 – pguardiario 2012-04-26 23:36:32