读书人

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

发布时间: 2012-10-29 10:03:53 作者: rapoo

构建自己的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.versionend

我们可以利用Date Range来轻松完成这些功能:
#!/usr/bin/env rubyrequire 'date'require 'crawler_file'class CrawlerDataSetclass << self def with_condreturn yield CrawlerDataSet.newendenddef initialize@files = []enddef dir(dir)@dir = dirselfenddef from_date(from_date)@from_date = Date.parse(from_date)selfenddef to_date(to_date=nil)@to_date = if to_date.nil? then Date.today else Date.parse(to_date) endselfend#use the date rangedef 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 << fileendend@filesenddef eachfile_names.each do |file_name|begincrawler_file = CrawlerFile.new(file_name)yield crawler_fileensurecrawler_file.closeendendenddef each_with_namefile_names.each do |file_name|begincrawler_file = CrawlerFile.new(file_name)yield crawler_file, file_nameensurecrawler_file.closeendendendend

读书人网 >编程

热点推荐