我有一个关于将Nokogiri应用到我的Rails应用程序中的问题。我试图从网站上收集棒球统计数据并将数据显示在视图中。我在解析数据方面取得了成功,但是,我不确定以RESTful方式存储代码的位置。
目前,我正在收集统计数据,将它们放入数组中,然后将它们与另一个数组(按排名,团队,联盟等)匹配。然后将这两个数组放入哈希中。有没有更有效的方法来执行此操作(如解析数据然后将数据分配为哈希值,而排名,团队,联盟等被指定为哈希键)?
最后,我把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
如果我需要澄清任何事情,请告诉我,非常感谢。
答案 0 :(得分:2)
在db中创建一个名为statistics的表,并包含哈希中的所有键(加上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]