根据时间戳有条件地重新下载网站数据

时间:2012-07-19 10:38:14

标签: 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 = 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

但是他们提到我的数据更新每天只发布三次:16:45,18:45和22:45。

问题: 如果我的副本早于上次更新时间(包括昨天的更新),如何让我的代码更加智能地获取更新?

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

1 个答案:

答案 0 :(得分:1)

这样的事情可以做到:

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

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