特定の月のアーカイブ(monthly archive)のみを rebuild する cgi を作成してみました。 とりあえず、今回公開する版は、rebuild したい「月」を指定するのではなく、「エントリID」を指定することで、間接的に「月」を指定する、という方法を採用しています。
「エントリID」で指定したエントリが投稿された「月」の monthly archive のみを rebuild するい訳です。
下に示すスクリプトを mt-rebuild-month.cgi という名前で保存し、mt.cfg と同じディレクトリに置きます。使い方は、以下の通り。
例えば、エントリIDが 86 のエントリの投稿年月日が 2003年10月30日 の場合
mt-rebuild-month.cgi?86
は、「2003年10月」の monthly archive を rebuild することになります。
以下に、スクリプトを示します。
#!/usr/bin/perl -w # mt-rebuild-month.cgi 04 Nov 2003 # written by H.Tsujimura (tsupo@na.rim.or.jp) use strict; use CGI::Carp qw(fatalsToBrowser); my($MT_DIR); BEGIN { if ($0 =~ m!(.*[/\\])!) {$MT_DIR = $1;} else {$MT_DIR = './'; } unshift @INC, $MT_DIR . 'lib'; unshift @INC, $MT_DIR . 'extlib'; } require MT; my $mt = MT->new(Config => $MT_DIR .'mt.cfg', Directory => $MT_DIR) || die print "Error".(MT->errstr); require MT::Blog; require MT::Entry; print "Content-type: text/html\n\n<html lang=\"ja\">\n"; print "<head>\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html;"; print " charset=UTF-8\" />\n"; print "<title>rebuild monthly archive</title>\n</head>\n\n<body>\n"; my $entry_id = $ENV{'QUERY_STRING'}; my $entry; my $blog_id=1; my $blog = MT::Blog->load($blog_id); if (!$blog) {print "failed to load blog $blog_id\n"; exit 1;} if (!$entry_id) { # entry_id が指定されていない場合は、最新のエントリを対象とする my $iter = MT::Entry->load_iter( { blog_id => $blog_id }, { 'sort' => 'created_on', direction => 'descend', limit => 5 }); $entry = $iter->(); # いちばん最新のエントリ } else { # entry_id が指定されている場合は、当該エントリを対象とする $entry = MT::Entry->load($entry_id); } # 指定エントリの投稿月の monthly archive のみを rebuild する # (エントリの投稿年月日が yyyy年mm月dd日 なら yyyy年mm月の # monthly archive のみを rebuild する) print "<p>Rebuild Monthly Archive ... </p>\n<blockquote>\n"; print "EnteryTitle = ", $entry->title, "<br>\n"; print "EnteryDateTime = ", $entry->created_on, "<br>\n"; $mt->_rebuild_entry_archive_type(Entry => $entry, Blog => $blog, ArchiveType => 'Monthly') or die $mt->errstr; print "</blockquote>\n<p>done.</p>\n<hr>\n"; if ( $blog_id != $entry->blog_id ) { $blog_id = $entry->blog_id; $blog = MT::Blog->load($blog_id); } print "<font class='message'>"; print "Completed: ".($blog->name).", elapsed time = ".(time - $^T); print " seconds </font><br><br>\n"; END { print "</html>","\n"; }
Access Count:
Last Modified: Friday, 18-Apr-2008 05:28:25 JST