如何使用ruby下载多个动态文件?

时间:2017-03-06 09:27:39

标签: ruby-on-rails ruby

我想从网站下载带有ruby的多个动态文件。 有五个不同的文件,它们都有一个基本结构:

BACKUP_的 YYYY - 的 MM - 的 DD - 的 HHMM _JRAddOns_Die_Pflegeserie_fr_的 ID - 内容。的 ENDING

所有粗体书面部分都是动态的,必须更换。

文件可能如下所示:

backup_2017-03-06-1020_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-db.gz
backup_2017-03-06-1020_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-others.zip
backup_2017-03-06-1020_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-plugins.zip
backup_2017-03-06-1020_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-themes.zip
backup_2017-03-06-1020_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-uploads.zip

有人可以帮忙吗?

编辑: 我尝试了一个非动态版本,它不会长时间工作,但是:

puts 'Starting Download...'
require 'net/http'
Net::HTTP.start("jr-addons.de") do |http|
    resp = http.get("/btemp/backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-db.gz")
    open("backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-db.gz", "wb") do |file|
        file.write(resp.body)
    end
    resp = http.get("/btemp/backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-others.zip")
    open("backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-others.zip", "wb") do |file|
        file.write(resp.body)
    end
    resp = http.get("/btemp/backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-plugins.zip")
    open("backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-plugins.zip", "wb") do |file|
        file.write(resp.body) 
    end
    resp = http.get("/btemp/backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-themes.zip")
    open("backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-themes.zip", "wb") do |file|
        file.write(resp.body) 
    end
    resp = http.get("/btemp/backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-uploads.zip")
    open("backup_2016-10-23-1520_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-uploads.zip", "wb") do |file|
        file.write(resp.body)
    end
end
puts 'Done.'

2 个答案:

答案 0 :(得分:3)

DATES = %w|03-06-1020|
SUFFIXES = %w|db others plugins themes uploads|

puts 'Starting Download...'
require 'net/http'
Net::HTTP.start("jr-addons.de") do |http|
  DATES.product(SUFFIXES).each do |(date, suffix)|
    file = "/foo_#{date}_bar-#{suffix}.baz"
    puts file
    # do other stuff with this file
  end
end

答案 1 :(得分:0)

以下是使用时间和字符串进行字符串插值的基本示例。

您只需要定义一个包含所需日期,ID和扩展名的数组,然后迭代:

time = Time.new(2017, 3, 6, 10, 20)
id = '2867ed5aba3d'
content = 'db'
ext = 'gz'

puts time.strftime("backup_%Y-%m-%d-%H%M_JRAddOns_Die_Pflegeserie_fr_#{id}-#{content}.#{ext}")
#=> backup_2017-03-06-1020_JRAddOns_Die_Pflegeserie_fr_2867ed5aba3d-db.gz