印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType 削除したエントリーIDを再利用するには

記事の削除で使われなくなったエントリーIDを復活させて記事を投稿する。

■ ■ ■

Movable Type では,記事を削除するとその記事に使われていたエントリーID (記事番号) は再利用されない。MT 3.0 以降 (?) のデフォルト設定では,日付のついたファイル名でアーカイブされるため,エントリーIDの「抜け」はあまり気にならない。しかし,MT 2.661 までの個別記事はエントリーIDのついたファイル名で作成されるため,抜けがあると気になる。気になる人がいる。というよりも,私が気になっていた (nlog(n): エントリの総数を表示するには)。

削除されたエントリーIDは,API を使って投稿すれば復活させることができる (Movable Type オブジェクト・リファレンス - MT::Entry)。つまり,好きなエントリーIDで復活させることができるので,DB が飛んでしまった場合でも頑張れば HTML から DB を復元することができる (HTML から weblog を復旧する方法 - bricklife.weblog.*)。

環境は Movable Type 2.661 + 日本語パッチである。MT3 以降でも同様の手続きが可能だろう。

そこで,Perl スクリプトを書いた。エントリーID「50」で投稿するもので,この記事そのものがその例となっている。ライブラリのパス,ブログID ($BLOG_ID),投稿者ID ($AUTHOR_ID),エントリーID ($ENTRY_ID) を適宜セットする。MT3 以降の場合は,設定ファイル名を「mt.cfg」から「mt-cfg.cgi」に変更する必要がある。

#!/usr/bin/perl -w

use strict;
use lib qw (/home/httpd/html/movabletype/lib);
use MT;
use MT::Entry;

my $MT_DIR = '/home/httpd/html/movabletype';
my $BLOG_ID = 1;
my $AUTHOR_ID = 1;
my $TITLE = "My title";
my $TEXT = "Some text";
my $ENTRY_ID = 50;

my $mt = MT->new(Config => "$MT_DIR/mt.cfg") or die MT->errstr;
my $blog = MT::Blog->load($BLOG_ID);
my $entry = MT::Entry->new;
$entry->blog_id($blog->id);
$entry->author_id($AUTHOR_ID);
$entry->title($TITLE);
$entry->text($TEXT);
$entry->id($ENTRY_ID);
$entry->save or die $entry->errstr;

タイトルは「My title」,エントリーの内容には「Some text」が入った記事が生成される。時刻は実行した時刻が入る。データベースだけが更新されるだけなので,まだ投稿としては完了していない。MT の管理画面を開いて「保存」ボタンで再構築する必要がある。

再構築する前に2度このスクリプトを実行しない方がよい。実行すると,記事が消えたように見えるので注意が必要である。原因は,再構築しないと作成日時に値がセットされないからである。もし見えなくなってしまった場合は,管理画面から「投稿の状態」が「下書き」であるものを検索すれば見つけることができる。作成日時は「--::」というあり得ない値となっているはず。

次の記事からは,エントリーIDと投稿数が一致するはずである。…だから何が嬉しいかと言われると苦しいのだが。

Posted by n at 2007-11-19 20:23 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?