1

我有一个关于将 Nokogiri 应用到我的 Rails 应用程序的问题。我正在尝试从网站收集棒球统计数据并将数据显示到视图中。我成功地解析了数据,但是,我不确定在哪里以 RESTful 方式存储代码。

目前,我正在收集统计数据,将它们放入一个数组中,然后将它们与另一个数组匹配(按排名、团队、联赛等)。然后将这两个数组放入哈希中。有没有更有效的方法来做到这一点(如解析数据,然后将数据分配为哈希值,而排名、球队、联赛等被分配为哈希键)?

最后,我已将 Nokogiri 调用放入我的控制器中,但我确实相信有更好的方法。Ryan Bate 的 Railscasts 建议将 Nokogiri 调用放入 rake 任务 (/lib/tasks/)。因为,我希望网站每天接收新的棒球统计数据,我是否必须定期运行 rake 任务?其次,我如何最好地将数据实施到视图中。

在线搜索带来了将其放入配置/初始化程序的想法,但我不确定这是否是一个更好的解决方案。

以下是 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 

如果我需要澄清任何事情,请告诉我,非常感谢。

4

1 回答 1

2

在您的数据库中创建一个名为 statistics 的表,并在您的哈希中包含所有键(加上 created_on 和 id)。要保存您的统计数据,请执行以下操作:

Statistic.new(statistics).save

然后在您的视图中拉出created_on 最高的那个。要在 cron 计划上运行 rake 任务,请查看无论何时

也可能更清洁:

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]
于 2012-04-26T02:37:01.580 回答