转载请标明出处:http://fuliang.iteye.com/blog/1127437
我们抓取的网页抽取的结果是带有日期的文件,经常需要操作某个日期范围的文件,来进行统计,抽样,入库,所有需要一个方便的DSL来处理这件事情。
我们希望制定几个条件就可以得到符合条件的文件,比如:
然后我们可以得到符合条件的文件名:
我们还可以利用构建自己的DSL之二中的CrawlerFile:
我们可以利用Date Range来轻松完成这些功能:
我们抓取的网页抽取的结果是带有日期的文件,经常需要操作某个日期范围的文件,来进行统计,抽样,入库,所有需要一个方便的DSL来处理这件事情。
我们希望制定几个条件就可以得到符合条件的文件,比如:
data_set = CrawlerDataSet.with_cond do |cond|
cond.dir("/mydir").
from_date("2011-05-01").
to_date("2011-07-08")
end
然后我们可以得到符合条件的文件名:
data_set.file_names
我们还可以利用构建自己的DSL之二中的CrawlerFile:
data_set.each do |file|
puts file.version
end
我们可以利用Date Range来轻松完成这些功能:
#!/usr/bin/env ruby
require 'date'
require 'crawler_file'
class CrawlerDataSet
class << self
def with_cond
return yield CrawlerDataSet.new
end
end
def initialize
@files = []
end
def dir(dir)
@dir = dir
self
end
def from_date(from_date)
@from_date = Date.parse(from_date)
self
end
def to_date(to_date=nil)
@to_date = if to_date.nil? then Date.today else Date.parse(to_date) end
self
end
#use the date range
def file_names
(@from_date .. @to_date).each do |date|
date_str = date.strftime("%Y%m%d")
Dir.glob("#@dir/#{date_str}-*dedup").each do |file|
@files << file
end
end
@files
end
def each
file_names.each do |file_name|
begin
crawler_file = CrawlerFile.new(file_name)
yield crawler_file
ensure
crawler_file.close
end
end
end
def each_with_name
file_names.each do |file_name|
begin
crawler_file = CrawlerFile.new(file_name)
yield crawler_file, file_name
ensure
crawler_file.close
end
end
end
end