はてなグループの日記をはてなブログへ投稿するのを補助するスクリプト(CSVをダウンロードしてあった人向け)

はてなグループが終了した。グループ内の日記データは、エクスポートを依頼してあれば後日MT形式で各ユーザーに配布されるそうだ。

はてなグループではそれとは別に、CSV形式で日記データをダウンロードしておくこともできた。MT形式でエクスポートされるデータの構造は「はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 - 機能変更、お知らせなど」に書かれている。これだとちょっとナーということになるかもしれないし、エクスポートしたデータをいつもらえるかもわからないので、CSV形式のデータをもとに「はてなブログライター」を使ってはてなブログへ登録していくことにした。

はてなブログライターの使い方は以下で解説している。

ダウンロードしたCSVデータをはてなブログライター向けに加工する。

  1. CSV形式のデータを「csv2hw.pl」で日付ごとのテキストファイルに分解する
  2. 同じディレクトリで下のスクリプト(「g_uniter.pl」とする)を実行する。
#! /usr/local/bin/perl

$outfilename = "united.txt"; #出力ファイル名
$backupfilename = "united_bak.txt"; #出力ファイルのバックアップファイル名
if (-f $outfilename) {
	if (-f $backupfilename) {
		unlink $backupfilename;
	}
	rename $outfilename , $backupfilename;
}

@dirlist = glob("./????-??-??.txt");

foreach $infilename ( @dirlist ){
	open(IN,"< $infilename");
	open(OUT,">> $outfilename");
	my @lines = (<IN>);

	$day = $infilename;
	$day =~ s/.*(\d{4}\-\d\d\-\d\d)\.txt/$1/;

	$lines[0] = $day . "_01:" . $lines[0] . "date: " . $day . " 00:00:00 +0900\ncategory:\n\n";
	$lines[$#lines] =~ s|(.+)\n*$|$1\n\n|; #ファイル末尾の改行の数を調整

	foreach ( @lines ) {
		print OUT;
	}
	print "Text of date added to " . $day . ".txt and united.\n";

	close IN;
	close OUT;
}

g_uniter.plはたいへん簡素なスクリプトで、最低限の機能を盛りこんだ。

  • その日全体のタイトルが記事のタイトルになる
  • 1日分が1記事になる(1日に複数の記事を登録してあった場合でもまとめて1つの記事になる)
  • 投稿時刻は00:00:00で固定(スクリプト内の「00:00:00」を別の時刻にすると、すべての記事の投稿時刻がその時刻になる)
  • カテゴリは空欄になる(スクリプト内の「category:\n」のところを「category:カテゴリ名\n」とすると、すべての記事にそのカテゴリ名がつけられる)
カテゴリの自動挿入を実装するとしたら
「my @lines = (<IN>);」のところで各日付のファイルを1行ごとに読み込んでいる。読み込むときに「*…*[~][~]…」という文字列を含む行を見つけて、「~」の部分をその日のカテゴリとして配列に入れていく(重複もチェックすること)。「$lines[0] = $day . "_01:" . $lines[0] . "date: " . $day . " 00:00:00 +0900\ncategory:\n\n";」の行の最後、「category:」のところにカテゴリの配列を挿入して出力する

g_uniter.plを実行すると、はてなブログライター向けのヘッダがついた1つのテキストファイル「united.txt」が出力される。

これで、はてなブログライターで登録し直しやすくなった。はてなブログでは24時間の新規エントリ登録数は100までに制限されているから、全部一気にはてなブログに移したいという場合は登録数に制限がないMT形式でのインポートということになる。

また、はてなグループの日記のCSVデータにはコメントが不完全な形でしか含まれていない。コメントをコメントとして移すにはMT形式でのインポートが必要になる。(自分の場合、はてなグループの終了前にコメントをコピーしておき本文に移設した)

MT形式のデータのインポートについてわかったこと

  • MT形式のデータをインポートすると、「見たままモード」で登録される
    • インポートした日のテキストをはてなブログライターのhbwdl.rbでダウンロードし、編集後に再投稿すると、はてなブログの「基本設定」にある「編集モード」で指定したモードに切り替わる
    • MT形式のデータ内の「CONVERT BREAKS:」を「markdown」にすると「markdownモード」で登録される
      • 「CONVERT BREAKS: markdown」でインポートすると改行2つごとにp要素となる(改行1つはbr要素にはならず、HTML上で改行されているだけになる→改行されずスペースになる)
  • MT形式のデータのインポートではIDコールが送出されない
    • インポートした記事を再編集すると、初回のみIDコールが送出される(ブラウザからの直接編集、はてなブログライターからの投稿とも)
      • 過去記事の編集でIDコールが飛んでほしくない場合、登録時だけプライベートモードにする方法がある

MT形式の基本的な説明は以下に。

はてなグループについて書いた記事

はてなグループの代替になりそうなサービスの紹介もあります。