#!/usr/bin/perl use lib qw (./lib ./extlib); use MT; use MT::App::CMS; use MT::Blog; use MT::Entry; use MT::Comment; use MT::TBPing; use MT::Trackback; use FileHandle; use Jcode; $| = 1; my $cfg_file = "./mt.cfg"; my $mt_path = "./"; my $app = MT::App::CMS->new( Config => $mt_path . $cfg_file, Directory => $mt_path, ); my $mt = MT->new( Config => $mt_path . $cfg_file, Directory => $mt_path, ); my %month = ( 'January' => '01', 'February' => '02', 'March' => '03', 'April' => '04', 'May' => '05', 'June' => '06', 'July' => '07', 'August' => '08', 'September' => '09', 'October' => '10', 'November' => '11', 'December' => '12', ); my $blog_id = 1; my $author_id = 1; my $blog_id = 1; my $blog = MT::Blog->load($blog_id); while ($file = shift) { # HTML読み込み $html = do {local $/; my $fh = FileHandle->new($file); <$fh>}; # パース開始 next unless ($file =~ /(\d\d\d\d\d\d).html/); my $entry_id = int($1); print "$file\nID: $entry_id\n"; # エントリー情報 $html =~ /

(.*?)<\/h3>\n(.*?)\n
/s; my ($title, $body) = ($1, $2); $html =~ /dc:date="(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d).*"/; my $created_on = "$1$2$3$4$5$6"; $body =~ s/(\n

|<\/p>\n|
\n)/\n/gs; $body =~ /^\n(.*)\n\n<\/a>\n(.*)\n$/s; my ($text, $text_more) = ($1, $2); # エントリー生成 my $entry = MT::Entry->new; $entry->blog_id($blog_id); $entry->title($title); $entry->text($text); $entry->text_more($text_more); $entry->author_id($author_id); $entry->created_on($created_on); $entry->id($entry_id); $entry->convert_breaks(1); $entry->allow_comments(1); $entry->allow_pings(1); $entry->status(MT::Entry::RELEASE()); $entry->save or die $entry->errstr; # Trackback情報 @trackbacks = ($html =~ /

\n(.*?)\n<\/div>/gs); foreach $trackback (@trackbacks) { $trackback =~ /(.*?)<\/a>.*?Excerpt:<\/b> (.*?)
\nWeblog:<\/b> (.*?)
\nTracked:<\/b> (.*?)<\/span>/s; my ($source_url, $title, $excerpt, $blog_name, $date) = ($1, $2, $3, $4, $5); $date =~ /^(\w*?) (.\d), (\d\d\d\d) (\d\d):(\d\d)/; my $created_on = $3.$month{$1}.sprintf("%02d", $2).$4.$5."00"; $title =~ s/<.*?>//sg; $excerpt =~ s/<.*?>//sg; # Trackback生成 my $ping = MT::TBPing->new; $ping->blog_id($blog_id); $ping->tb_id((MT::Trackback->load({ entry_id => $entry_id }))->id); $ping->source_url($source_url); $ping->ip('255.255.255.255'); $ping->excerpt($excerpt); $ping->title($title); $ping->blog_name($blog_name); $ping->created_on($created_on); $ping->save or die $ping->errstr; } # Comment情報 @comments = ($html =~ /(.*?<\/div>)/gs); foreach $comment (@comments) { $comment =~ /name: (.*?)\ndate: (\d\d\d\d)\/(\d\d)\/(\d\d) (\d\d):(\d\d)/s; my $author = $1; my $created_on = "$2$3$4$5$6"."00"; my $email = ""; my $url = ""; if ($author =~ /
/) { $email = $1; $email =~ s/&#(\w\w);/chr($1)/ge; } elsif ($author =~ //) { $url = $1; $url =~ s/&#(\w\w);/chr($1)/ge; } $author =~ s/<.*?>//sg; $author =~ s/^ななしさん$//; $comment =~ /
(.*?)<\/div>/s; my $text = $1; $text =~ s/(\n

|<\/p>\n|
\n)/\n/gs; $text =~ s/<.*?>//g; $text =~ s/>/>/g; $text =~ s/^\n//; $text =~ s/\n$//; # Comment生成 my $comment = MT::Comment->new; $comment->ip('255.255.255.255'); $comment->blog_id($blog_id); $comment->entry_id($entry_id); $comment->author($author); $comment->email($email); $comment->url($url); $comment->text($text); $comment->created_on($created_on); $comment->visible(1); $comment->save or die $comment->errstr; } } $blog->touch; $blog->save;