Ruby 基于时间戳的网站数据有条件重新下载

Ruby 基于时间戳的网站数据有条件重新下载,ruby,mechanize,Ruby,Mechanize,如果我的data.csv的本地副本超过1小时,我将以简单的形式从网站上的帐户重新下载一个文件: # Mission: make sure data*.csv is most current whenever called def updateData return if File.exists?("data.csv") && (Time.now - File::Stat.new("data.csv").mtime) < 3600 $agent = Mechan

如果我的data.csv的本地副本超过1小时,我将以简单的形式从网站上的帐户重新下载一个文件:

# Mission: make sure data*.csv is most current whenever called
def updateData  
  return if File.exists?("data.csv") && (Time.now - File::Stat.new("data.csv").mtime) < 3600

  $agent = Mechanize.new
  $agent.pluggable_parser.default = Mechanize::Download  

  $page = $agent.get("http://website.com/login.jsp")
# login etc.
  $agent.get("/getdata!downLoad.action").save("data.csv")
end
#任务:确保数据*.csv在调用时最新
def更新数据
如果File.exists?(“data.csv”)&&(Time.now-File::Stat.new(“data.csv”).mtime)小于3600,则返回
$agent=Mechanize.new
$agent.pluggable_parser.default=Mechanize::Download
$page=$agent.get(“http://website.com/login.jsp")
#登录等。
$agent.get(“/getdata!downLoad.action”).save(“data.csv”)
结束
然而,他们提到我的数据更新每天只发布三次:16:45、18:45和22:45

问题: 只有当我的副本比上次更新时间(包括昨天的更新时间)旧时,我如何使我的代码更智能地获取更新


一些数组
[“16:45”、“18:45”、“22:45”]
可能会有所帮助,但我不确定Ruby的下一步是什么。

类似的东西可以做到:

require 'time'

current = Time.now.strftime("%H%M")
past = File::Stat.new("data.csv").mtime.strftime("%H%M")
if (current > '2245' and past < '2245') or (current > '1845' and past < '1845') or (current > '1645' and past < '1645') or (File::Stat.new("data.csv").mtime.day != Time.now.day and current > '1645')
    #update
end
需要“时间”
当前=时间.now.strftime(“%H%M”)
过去=文件::Stat.new(“data.csv”).mtime.strftime(“%H%M”)
如果(当前>'2245'和过去<'2245')或(当前>'1845'和过去<'1845')或(当前>'1645'和过去<'1645')或(文件::Stat.new(“data.csv”).mtime.day!=Time.now.day和当前>'1645')
#更新
结束

您还需要更改存储
mtime
的方式。它的格式必须是
hhmm
。当您创建csv时,您可以像这样设置
mtime=Time.now.hour.to_s+Time.now.min.to_s

File::Stat.new(“文件名”).mtime.class=>Time
mtime是文件核心gem中内置的Time类型值;我不存储也不定义它。我知道你在用if…and…or…etc做什么了,但我希望有一个通用的解决方案(每个变量的日数)现在应该可以用了。我之所以不比较全职(yy/mm/dd hh:mm:ss),是因为我认为只使用
hh:mm
更容易,
hhmm
是决定是否需要更新的唯一两件事。它不应该是
pass=t.strftime(%H:%M”)?
否则02:24和22:04都会变成“224”@WayneConrad I确认了该问题,即17:04获得“174”。无论如何,也许OR系列可以在一些
eval
ed for循环中转换,以处理任意数量的日时间,不仅3脚本需要考虑当天:如果它今天在2250运行,而文件昨天在2240修改,它将不会更新(但应该更新)。