构建自己的DSL之三 抓取文件管理

转载请标明出处:http://fuliang.iteye.com/blog/1127437

我们抓取的网页抽取的结果是带有日期的文件,经常需要操作某个日期范围的文件,来进行统计,抽样,入库,所有需要一个方便的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值