0

簡単な形式では、 data.csvのローカル コピーが1 時間以上経過している場合に、Web サイトのアカウントからファイルを再ダウンロードします。

# 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

ただし、私のデータの更新は毎日 3 回 (16:45、18:45、および 22:45) のみ公開されるとのことでした。

質問: コピーが最終更新時刻 (昨日を含む) よりも古い場合にのみ、更新を取得するようにコードをよりインテリジェントにするにはどうすればよいですか?

いくつかの配列["16:45", "18:45", "22:45"]が役立つ可能性がありますが、Ruby で次に何をするかはわかりません。

4

1 に答える 1

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

于 2012-07-19T13:54:37.360 に答える