2003-05-17

λ dailyupdate.rb 初期バージョン

日付ごとのファイル yyyymmdd.td2d をtDiaryに読み込ませるスクリプト。update.rb の一部をパクった。posttdiary.rb をベースにしたはずなのにNKFの引数ぐらいにしか痕跡が残っていない。
#!/usr/bin/env ruby
$KCODE= 'e'
#
# dailyupdate: update tDiary via e-mail. $Revision$
#
# Copyright (C) 2003, All right reserved by KAMIYA Satosi 
# You can redistribute it and/or modify it under GPL2.
 
def usage
	text = <<-TEXT
		#{File::basename __FILE__}: update tDiary via daily separated files.
		usage: ruby dailyupdate.rb [options]  
		arguments:
		  update.rb:  path to your update.rb
		  dailyfiles: .td2d
  TEXT
  text.gsub( /\t/, '' )
end
 
require 'nkf'
require 'cgi'
 
def update_rb_replace(body, title, year, month, day)
        require 'tdiary'
        @cgi = CGI::new
        conf = TDiary::Config::new
        tdiary = nil
 
	# Set CGI Variables
	@cgi.params['old']   = ["#{year}#{month}#{day}"]
	@cgi.params['year']  = [year]
	@cgi.params['month'] = [month]
	@cgi.params['day']   = [day]
	@cgi.params['title'] = [NKF::nkf( '-m0 -Xed', title )]
	@cgi.params['body']  = [NKF::nkf( '-m0 -Xed', body )]
	@cgi.params['replace'] = ['true']
 
        tdiary = TDiary::TDiaryReplace::new( @cgi, 'show.rhtml', conf )
 
	puts "replace: #{@cgi.params['old']}\n"
end
 
def updatefile(filename)
    if %r|^(\d\d\d\d)(\d\d)(\d\d)\.| =~ File.basename(filename) then
	year = $1
	month = $2
	day = $3
	File.open(filename) { |fp|
		body = fp.read
		title = ''
		savedir = Dir.pwd
		Dir.chdir(File::dirname( updaterb ))
		begin
			update_rb_replace(body, title, year, month, day)
		ensure
			Dir.chdir(savedir)
		end
	}
    end
end
 
begin # main routine
	raise usage if ARGV.length < 1
 
	# parse options
 	require 'getoptlong'
	parser = GetoptLong::new
	opt_recurse = false
	parser.set_options(
		['--recurse', '-r', GetoptLong::NO_ARGUMENT],
	)
	begin
		parser.each do |opt, arg|
			case opt
			when '--recurse'
				opt_recurse = true
			end
		end
	rescue
		raise usage
	end
 
 	updaterb = ARGV.shift 
        if FileTest::symlink?( updaterb ) then
                org_path = File::dirname( File::readlink( updaterb ) )
        else
                org_path = File::dirname( updaterb )
        end
        $:.unshift( org_path.untaint )
 
	ARGV.each { |filename|
		if opt_recurse == false then
			updatefile(filename)
		else
			#
		end
	}
rescue
	$stderr.puts $!
	exit 1
end

λ title 変数がないとエラーになるのだが、日毎につけるタイトルは利用していないのでとりあえず空白で。

λ <pre>の中でも、空白行があったらセクションの始まりになってしまうのか。きつー。

[]