M.C.P.C. (Mamesibori Creation Plus Communication)

印刷屋から五反田のWeb屋に転職したCLのブログです。

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__

しんどかったなー