スラッシュドット日記をMovable Typeにエクスポートする方法
日記リストページからURLリストを生成し、一括ダウンロードします。そして、それらをMovable Type形式に変換します。
URLリストの生成と一括ダウンロード
http://slashdot.jp/journal.pl?op=list のHTMLからURLリストを生成します。
#!/usr/bin/perl while(<>) { if(/<!-- start template: ID 56, journallist;journal;default -->/) { last; } } while(<>) { if(/<td valign="top"><a href="(http:\/\/slashdot\.jp\/.+?)"><b>(.+?)<\/b>/) { print $1; print "\n"; } }
日記ページの解析
日記ページを解析してMovable Type形式で出力します。日記ページごとに以下のスクリプトを走らせて、出力を連結すればエクスポートデータができます。
#!/usr/bin/perl while(<>) { if(/<div class="journal">/) { last; } } while(<>) { if(/<TD .+?><b>(.+?)<\/b>/) { # date $_ = $1; split /[^\d]+/; $date = "@_[1]/@_[2]/@_[0]"; last; } } while(<>) { if(/<TD .+?>(\d\d:\d\d) (AM|PM)<\//) { $time = "$1:00 $2"; last; } } if(!$date || !$time) { die; } print "--------\n"; print "DATE: $date $time\n"; while(<>) { if(/<TD>.+?<a href=".+?">(.+?)<\/a><\/B><div class="journalmain">(.+)/) { $title = $1; $main = $2; last; } } if(!$title || !$main) { die; } while(<>) { if(/HSPACE="20" VSPACE="10" ALT="(.+?)" title=/) { $category = $1; last; } } # title print "TITLE: $title\n"; # category if($category) { print "CATEGORY: $category\n"; } # main print "-----\n"; print "BODY:\n"; $_ = $main; s/<br>/\n/g; s/<\/?p>//g; s/<blockquote> <div><tt>/\n\n<code>/g; s/<\/tt><\/div> <\/blockquote>/<\/code>\n\n/g; s/<blockquote>/\n\n<blockquote>/g; s/<\/blockquote>/<\/blockquote>\n\n/g; s/<\/?div>/\n/g; print; print "\n";