`

构建自己的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
        
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics