#!/usr/bin/perl # # original script at http://kenstar.org/~kenstar/computer/program/t2m.html # modified by Fumihiro Kato at 2009-02-09 # # 前提知識 # tdiaryのログはdata_pathの下にファイルがあります。 # ファイル # 200405.td2 : 日記ファイルのデータ本体 # 200405.tdc : ツッコミデータ ( TrackBackデータも存在 ) # # 使いかた # 上記データファイルがカレントディレクトリにある時だけ、動作確認をしています。 # # t2m.pl -d [log file] {-n [date]} {-g} # [log file]は、最後の文字(2やc)を除いたファイル名を指定。 # 200405.tdc, 200405.td2の場合は, 200405.tdを指定 # # [date] この日付けを指定し、これよりも新しい日付けの日記にたいして処理を行わせる # 書式例: 20040101 # binmode(STDOUT, ":utf8"); $author="fumi"; #画像の移行を行うばあいは設定必須 ${tdiary_imags_dir}="/home/kenstar/public_html/tdiary/images"; ${MT_image_dir}="/home/kenstar/public_html/ks/archives"; ${image_url}="/~kenstar/ks/archives"; use Getopt::Std; use File::Copy; getopt("d:n:g"); #--------------------------- # log2mt.logの本体部分出力 #--------------------------- sub print_body($$$){ my($title, $date, $body, $category)=@_; print << "__DIARY_FST__"; AUTHOR: $author TITLE: $title STATUS: Draft ALLOW COMMENTS: 1 CONVERT BREAKS: __default__ ALLOW PINGS: 1 __DIARY_FST__ if($category ne ""){ print << "__DIARY_CATEGORY__"; PRIMARY CATEGORY: $category CATEGORY: $category __DIARY_CATEGORY__ }else{ print "PRIMARY CATEGORY: \n"; } print << "__DIARY_SND__"; DATE: $date ----- BODY: $body ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- __DIARY_SND__ } #------------------------------ # log2mt.logのコメント部分出力 #------------------------------ sub print_comment($$$$$$){ my($com_auth, $email, $date, $body, $ip, $url)=@_; print << "__COMMENT__"; COMMENT: AUTHOR: $com_auth EMAIL: $email IP: $ip URL: $url DATE: $date $body ----- __COMMENT__ } #--------------------------------- # log2mt.logのTrackBack部分出力 #--------------------------------- sub print_ping($$$$$$){ my($title, $url, $blog_name, $date, $body, $ip)=@_; print << "__PING__"; PING: TITLE: $title URL: $url IP: $ip BLOG NAME: $blog_name DATE: $date $body ----- __PING__ } sub print_end{ print "\n\n--------\n"; } #------------------------------ # td2の読み込み。 #------------------------------ # 使用するkey # $diary_key = "${date}-${key}" # === つかうHash # $title{$diary_key} # $date{$diary_key} # $body{$diary_key} sub read_tdiary($){ my ($file) = @_; open TDIARY, "<:encoding(euc-jp)", $file; $title_switch=0; $ul_switch=0; while (){ chomp; if(/^.$/){ # 日付終了記号 $title_switch=0; }elsif(/^$/){ # 空の行。次の行はTitle $title_switch=1; }elsif(/^Format: tDiary$/){ # 意味無の行。ただし、Headerのさいご $title_switch=2; }elsif($title_switch==2){ # Headerの次のぎょうは空行。何もしない。 $title_switch=1; }elsif(/Date: ([\w]+)/){ # 日付けを読み込む。 if($date == $1){ $key++; }else{ $key=0; } $date = $1; $diary_key = "${date}-${key}"; $date =~/([\d][\d][\d][\d])([\w][\w])([\w][\w])/; my($year, $mon, $day); $year = $1; $mon = $2; $day = $3; # MTの日付け書式に変換 $p_date = sprintf "%02d/%02d/%02d", ${mon}, ${day}, ${year}; }elsif(/Title: (.*)/){ # $title{$diary_key}=$1; }elsif(/Last-Modified/){ # 無視 }elsif(/^Visible: (.*)/){ if($1 =~ /true/){ $visible=1; }else{ $visible=0; } # 無視 }elsif($title_switch==1){ # 空行の次だったのでタイトルとして使用 $key++; $diary_key = "${date}-${key}"; my($tmp); $tmp = $_; # replace a hyperlink if ($tmp =~ /\[\[(.*)\s*\|(.*)\]\]/){ $tmp = $1; } if ($tmp =~ /\[([^\]]*)\](.*)/){ $category{$diary_key} = $1; $title{$diary_key} = $2; $visible{$diary_key} = $visible; }else{ $category{$diary_key} = ""; $title{$diary_key} = $tmp; $visible{$diary_key} = $visible; } if($title{$diary_key} =~ /^!(.*)/){ $title{$diary_key} = $1; } $title_switch=0; $p_date_time = sprintf "%s 12:00:%02d PM", ${p_date}, ${key}; $date{$diary_key}=$p_date_time; }else{ # 日記本体 # <%=image 0, '川べり ここに写ってないけど、久々にすずめをみたよ。', nil, [256,192]%> # <%=image 1, '職場からの東京(昼)その1'%> # for 画像対応 # 20040413_0.jpg if (/\<\%=image\s+([\d]+),\s*'(.*)'\s*(,\s*([^\[]*)\s*,\s*(.*)\s*)?\%\>/ ){ print "image\n" if $DEBUG; print "$1, $2, $3,$4,\n" if $DEBUG; $image_key = $1; $alt = $2; $op = $3; $nil = $4; $wh = $5; $image_name ="${date}_${image_key}.jpg"; print "$image_name\n" if $DEBUG; if($wh ne ""){ $wh =~ /\[\s*([\d]+)\s*,\s*([\d]+)\s*\]/; $width = $1; $height = $2; }else{ $width=-1; $height=-1; } s/\<\%=image\s+[\d]+,\s*'.*'\s*(,\s*.*\s*,\s*.*\s*)?\%\>/\\"${alt}\"/; copy ("${tdiary_imags_dir}/${image_name}", "${MT_image_dir}") or print "cannot copy\n"; } # replace a hyperlink if ($tmp = /\[\[(.*)\s*\|(.*)\]\]/){ $tmp = "" . $1 . ""; } if ($ul_switch && /^[^\*]/) { $ul_switch = 0; $body{$diary_key} .= "\n

"; } if (/^\*\s+(.*)/){ if (! $ul_switch) { $ul_switch = 1; $body{$diary_key} .= "

\n