「まんぷく::日記」の記事の本文を「ただいま村」へのリンクに置き換え

これが
f:id:Imamura:20200620181418p:plain
こうなった
f:id:Imamura:20200620181425p:plain

(当該の記事はhttps://ima.hatenablog.jp/entry/20060514/p1で読めます)

「ただいま村」ははてなブログ上にあり2011年11月に始めている(→最初の記事)。その前ははてなダイアリーの「Imamuraの日記」(d:id:Imamura)を更新していた(2008年1月1日2018年12月31日)。「まんぷく::日記」(d:id:manpukuya)はさらにその前に書いていたもので、期間は2003年2月17日から2007年12月31日まで。

まんぷく::日記」の内容は以前、「Imamuraの日記」に転記した。

これ以降、「まんぷく::日記」の内容を修正するときは「Imamuraの日記」に転記したほうを書き換えていた。オリジナルの「まんぷく::日記」は放置である。でも「まんぷく::日記」を消したりはしなかった。「まんぷく::日記」へのリンクがリンク切れにならないようにしたかったから。

その後はてなダイアリーのサービス終了に合わせて、「Imamuraの日記」ははてなブログの「ただいま村」にインポート(統合)した。放置していた「まんぷく::日記」もリンク切れにならないよう、はてなブログへ移してある(https://manpukuya.hatenablog.jp/)。とはいえ「まんぷく::日記」から「ただいま村」へのリンクはないから、検索やリンクから「まんぷく::日記」のほうへ行ってしまうと「ただいま村」に新情報があっても気付かない。古い記事までしかたどり着かない人がいたら申し訳ないなーと思っていた。

まんぷく::日記」の本文を「この記事は~へ移動しました」という内容に置き換えたい。でもどうやって全部の記事を書き換えたらいいだろうか。先日アイデアが出てきて実現できた。

例によって「はてなブログライター」を使った。「はてなブログライター」のセットアップ方法は以下。

はてなブログライターを使っているディレクトリでこの下の「transferunited.pl」を実行する。一部を除き、すべての記事の内容が「この記事は~へ移動しました」に置き換えられる。例外は「×年×月×日の記事:(URL)」というエントリで、これははてなダイアリー時代にあった「その日全体のタイトル」を1つの記事にしたものである。リンク先は「http://manpukuya.hatenablog.jp/entries/2003/02/17」など、その日付のエントリをまとめて表示するURL(日付の前が「entry」や「archive」ではなく「entries」)にしてある。この記事に限っては本文を「×年×月×日の記事をまとめ読み(現行のブログへ移動します):(URL)」などとし、URLは「http://ima.hatenablog.jp/entries/2003/02/17」のように「ただいま村」のものに置き換えた。

これで出力された「transferunited.txt」を「diary.txt」と置き換えてはてなブログライターを実行すれば、記事の本文が「~へ移動しました」や「×年×月×日の記事をまとめ読み」に置き換えられる。記事は2003年から2007年いっぱいまで5年弱ぶんある。これをはてなブログライターがすべて修正するのに1時間以上かかった。

まんぷく::日記」の最後の日に、明日からは「Imamuraの日記」を書いていくという告知がある。この記事は「移動しました」にせず元のままにしておいた。

これで「まんぷく::日記」の本文は冒頭の画像のようになった。古いリンクなどから「まんぷく::日記」へ来た人も新しい「ただいま村」へ誘導できる。気分すっきりでよく眠れる。

関連記事

いくつかの場所で書いた古い日記を1つにまとめてきた歴史。

こうやってまとめて何をするのかといえば、長年日記として過去をふり返りニヤニヤするのだった。

transferunited.pl

#! /usr/local/bin/perl
use 5.010;
#■id:manpukuyaのはてなブログの記事を「~へ転記しました」というtransferunited.txtにするスクリプト
#■「-yyyy年m月d日の記事:https://manpukuya.hatenablog.jp/yyyy/mm/dd」のエントリは「~へ転記しました」に置き換えない

$outfilename = "transferunited.txt"; #出力ファイル名
$backupfilename = "transferunited_bak.txt"; #出力ファイルのバックアップファイル名(出力ファイルがすでにあったらバックアップする)
if (-f $outfilename) {
	if (-f $backupfilename) {
		unlink $backupfilename;
	}
	rename $outfilename , $backupfilename;
}

@dirlist = glob("./????-??-??_??.txt");
foreach $infilename ( @dirlist ){
	my $datafilename = "data/$infilename" . ".dat";
	my $header = "";
	open(IN1,"< $infilename");
	open(OUT,">> $outfilename");

	#■yyyy-mm-dd_nn.txtからエントリのタイトル($title)とヘッダ部分3行($header)を取得
	my @main = <IN1>;
	my $title = $main[0];
	$title =~ s/title: *//;
	chomp $title;
	for (my $i = 0; $i < 3; $i++) {
		$header .= $main[$i];
	}
	$header =~ s/^title: *//;

	#■data/yyyy-mm-dd_nn.txt.datの末尾(エントリのURL)を$urlへ取得
	open(IN2,"< $datafilename");
	while (<IN2>) {
		push (@content , $_);
	}
	my $url = pop @content;
	$url =~ s/url: *//;
	chomp $url;

	#■移動しましたメッセージの組み立て
	$message = "";
	if ($main[5] =~ /^\-\d{4}\d+\d+日の記事:http:\/\/manpukuya\.hatenablog\.jp\/entries\/\d{4}\/\d\d\/\d\d/) {
		my $num = @main;
		for ($j = 5; $j < $num; $j++) {
			$message .= @main[$j];
			$message =~ s/^(\-\d{4}\d+\d+日の記事):http:\/\/manpukuya/$1をまとめ読み(現行のブログへ移動します):https:\/\/ima/
		}
	} else {
		(my $newurl = $url) =~ s/manpukuya/ima/;
		$message = "この記事は以下へ移動しました。\n\n-→[" . $newurl . ":favicon]" . $title . "(" . $newurl . ")";
	}

	#■全体を組み立ててファイル出力
	($day = $infilename) =~ s/.*(\d{4}\-\d\d\-\d\d_\d\d)\.txt/$1/;
	my $out = $day . ":" . $header . "\n" . $message . "\n\n";
	$out =~ s|(.+)\n*$|$1\n\n|; #末尾の改行の数を調整

	print "Text of date added to " . $day . ".txt and united.\n";
	print OUT $out;
	$out = "";

	close IN;
	close OUT;
}