M.C.P.C.ブログをココログ(TypePad)からMTOS5に移し替えた
ココログでやってた M.C.P.C.ブログ( http://blog.dtpwiki.jp/ )がもうすぐ4000エントリになるし、業界も変わってDTPWiki.jpドメインのまま何かやるのもいろいろ辛いので、更新終了・動態保存することを考えて、そうすると、ココログだと月1,000円かかるので、もったいないので、 ココログをやめる方向で考えている。
で、ココログで作ったblog.dtpwiki.jpドメインのパーマリンクをそのまま維持すればいいよね、ていうことで、昔取った杵柄、
TypePadからMovableTypeに移行するときPerlスクリプトを使い元のPermalinkになるようBasenameを設定する - M.C.P.C.
を使い、半日かけて誰にも気づかれない(つもり)ように動かした。今見ている http://blog.dtpwiki.jp/ はもうココログではなくてレンタルサーバにあるのです。バックアップせな……
昔書いた通りにやると、どうやらDBにSQLite使っているせいかMTOS5のせいかわからないけれども、MT.pmからだと999エントリまでしかまとめて操作できない。
現時点で3996エントリあったから、何回かに分けてPermalink書き換え終了。とりあえず見た目移転したとは全然わからないブログになったかな。
あと、MT.pmの方でutf8フラグ付きで取り扱うようになったみたいなので、decode_utf8しなくてもよくなった。
以下コード。(MTOS 5.14-jaで動作確認。)
Filename: mt_changebasename.pl
#!/usr/bin/perl use strict; use warnings; use lib 'path/to/MTOS/lib'; use LWP::Simple; use MT; use utf8; use YAML; binmode STDOUT => ':utf8'; #my $data = get('http://example.com/title-permalink.yaml'); #my $list = YAML::Load($data); my $list = YAML::LoadFile('title-permalink.yaml'); #print Dump($list); #exit; my $mt = MT->new( Config => '/path/to/MTOS/mt-config.cgi' ) or die MT->errstr; my @entries = MT::Entry->load({ blog_id => 2, status => MT::Entry::RELEASE(), }, { limit => 2500, # ここで細切れ書き換えを制御する offset => 501, # 999までいける } ); foreach my $entry (@entries) { # $entryには、MT::Entryオブジェクト my $title = $entry->title; my $permalink = $list->{$title}; (my $basename = $permalink) =~ s{^.+/(.+)\..+}{$1}; # PermalinkからBasenameへ my $o_basename = $entry->basename; # 書き換え前のBasename $entry->basename($basename); # MT::Entry objのBasename書換 $entry->save or die $entry->errstr; # MT::Entry obj書込 print "$title $o_basename->$basename\n"; } exit; __END__
あと、ココログのポップアップ表示のコードと同じ動きするコードを即席で書かなくてはならんかった。
Filename: /.shared/image.html
#!/usr/bin/perl use strict; use warnings; use CGI; use HTML::Template; my $q = CGI->new; my $tmpl = << 'END_OF_HTML'; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <title>Photo</title> <style type="text/css"> html { margin: 0; padding: 0; background: white; } body, p { margin: 0; border: 0; padding: 0; background: white; } </style> </head> <body> <p><img src="/.<tmpl_var name="img">" alt="Photo" /></p> </body> </html> END_OF_HTML my $t = HTML::Template->new( scalarref => \$tmpl ); my $str = $q->param('keywords'); $t->param( img => $str ); print $q->header('text/html'); print $t->output; exit; __END__
しんどかったなー