オープンソースの画像生成AIをセットアップから使い方まで解説する『Stable Diffusion AI画像生成ガイドブック』(ソシム刊)発売中(→本のサポートページ

ダイアリーを「はてダラ」と「はてダラスプリッタ」で更新できるようにしたメモ

今さらながら、このダイアリーをひとつのテキストファイルから更新できるようにした。その作業メモ。具体的な手順はWindows向けですが適宜読み替えればMacなどでもできるはず。

そもそもそういうことをしたくなったのは、Twitterの全ツイートをダウンロードできるようになったから。

このダイアリーには自分(@yimamura)のツイートを随時転記している。いろいろあって2009年7月分のツイートが手元になかったのだが、全ツイートダウンロード機能の提供開始で補完できることになった。これをまとめてダイアリーに転記したい。

該当する日付のダイアリーをいちいちブラウザで開いて「編集」してもよいが、もうちょっとエレガントにやりたい。

はてダラ」を使うと、日付のテキストファイルを作って実行すればダイアリーを更新してくれる。さらに「はてダラスプリッタ」を使えば、日ごとのテキストファイルを用意しなくても、すべての日付をひとつにしたテキストファイルから「はてダラ」用のテキストファイルを生成してくれる。ある決まったテキストファイルを編集したあと、「はてダラスプリッタ」に続いて「はてダラ」を実行すれば変更があった日だけ更新できるというわけ。

はてダラ」と「はてダラスプリッタ」の環境を作っておけば、後日ダイアリーの内容を一括置換したいときなどに便利だ。自分のテキスト編集環境では、日付のテキストファイル群をgrepする(「はてダラ」のみ使用)よりはひとつのテキストファイルを一括で検索/置換できるほう(「はてダラスプリッタ」も使用)がよい。

そんなわけで以下のように作業した。

  1. Perlを入れていない人はインストール→Download and Install Perl: ActivePerl | ActiveState(https://www.activestate.com/products/activeperl/downloads/
  2. 「Crypt::SSLeay」モジュールをインストール。WindowsMacでのインストール方法は以下。
  3. 今後はてダラを使うディレクトリに「hw.pl」、「csv2hw.pl」、「hws.pl」を置く
  4. ダイアリーのデータをダウンロードする。ダイアリーの「管理」−「データ管理」−「ブログのエクスポート」−「はてなの日記データ形式」の「ダウンロード」を右クリックし「名前を付けて保存」する。
    • CSVデータを「はてダラスプリッタ」にかける方法もあるが煩雑になるため省略
  5. ダウンロードした日記データ(xml形式)を正規表現を使えるテキストエディタ秀丸エディタサクラエディタ、miなど)で開き、以下のように検索/置換する。
    • 正規表現で検索:^<day date="(\d{4}\-\d\d\-\d\d)" title="(.*)">\n<body>
    • 置換:$1:$2
    • 正規表現で検索:\n</body>\n</day>
    • 置換:(削除)
    • 通常の検索:&lt;
    • 置換:<
    • 通常の検索:&gt;
    • 置換:>
    • 通常の検索:&quot;
    • 置換:"
    • 通常の検索:&amp;
    • 置換:&
    • xmlファイル冒頭の「<?xml version="1.0" encoding="UTF-8"?>(改行)<diary>」を削除
    • xmlファイル末尾の「</diary>」を削除
  6. xmlファイルの文字コードを「シフトJIS」に変更し、「diary.txt」として保存
  7. perl hws.pl」(はてダラスプリッタ)を実行
    • メモ:生成されるテキストファイルのタイムスタンプはhws.plの実行時刻(テキストファイルのファイル名にもとづく日付にはならない)
  8. 生成された「2013-01-01.txt」「2013-01-02.txt」…という日付のテキストファイルのうち、1つを残して削除(こうすることで、次にはてダラを実行時に既存の日記が全部再アップロードされるのを抑止できる。1つだけ残すのは最終更新日時の情報が入った「touch.txt」を生成してもらうため)
  9. perl hw.pl -c -u ユーザーID」を実行。パスワードを入力(このときパスワードは「*」などでマスクされない)。すると残したファイルの日付のダイアリーが更新される
  10. 「diary.txt」の内容を必要に応じて追加・修正し、コマンドラインから「perl hws.pl & perl hw.pl -c -u ユーザーID」を実行(こう書かれたバッチファイルを作ってもよい)

以上で、今後は上の手順の最後、「diary.txt」を修正して「perl hws.pl & perl hw.pl -c -u ユーザーID」を実行することでダイアリーを更新できるようになった。お疲れさまでした。

ところではてなとしては、はてなダイアリーからはてなブログへの移行をユーザーにすすめていきたいらしい。はてなブログでもこの種の更新ツールを使えるようになったら移行する人がもっと増えるんではないですかねーなんて。(フィードバック済み)

追記:下のようなツールがありました

(さらに追記:その後はてなブログの更新には「はてなブログライター」を使うようになりました)

adddateheader.pl

ダイアリーのCSVデータから「diary.txt」を作るときに使うスクリプト

  1. ダイアリーのCSVデータを今後はてダラに使うディレクトリにダウンロード(ダイアリーの「管理」−「データ管理」−「ブログのエクスポート」−「CSV形式」の「ダウンロード」を右クリックし「名前を付けて保存」)
  2. ダウンロードしたCSVファイルをcsv2hw.plにかける。コマンドプロンプトで「はてダラ」を使うディレクトリへ移動し「perl csv2hw.pl CSVファイルのファイル名」
  3. 「2013-01-01.txt」などが生成されたディレクトリで「dir ????-??-??.txt /b > dir.bat」を実行
  4. 生成された「dir.bat」をテキストエディタで開き「2013-01-01.txt」を「perl adddateheader.pl 2013-01-01.txt」のように一括置換。具体的には、正規表現検索/置換ができるテキストエディタを使い「^(.)」を検索、「perl adddateheader.pl $1」に置換するなど
  5. 「dir.bat」を実行。「a2013-01-01.txt」「a2013-01-02.txt」…のようなファイルが生成される
  6. 「copy /b a*.txt diary.txt」を実行。「a2013-01-01.txt」「a2013-01-02.txt」…のようなファイルが日付順に結合され「diary.txt」というテキストファイルとして出力される。Windowsで日付の降順(新しい日付を上)にしたいときはpacktextなどを使う(→「概要−packtext−水無瀬の部屋)。その場合も出力するテキストファイルのファイル名は「diary.txt」とする
  7. 「2013-01-01.txt」や「a2013-01-01.txt」といった日付ファイルを全部別の場所へ移動する。削除しちゃってもよい。「csv2hw.pl」、「adddateheader.pl」ももう使わないので別の場所へ移動するか削除
  8. 上の手順を「7.『perl hws.pl』(はてダラスプリッタ)を実行」から行う
#! /usr/local/bin/perl
# 引数に書かれたファイル名のファイルを読み込んで1行ずつ処理して出力する
foreach $infilename ( @ARGV ){ #コマンドラインで指定された複数の引数をすべて処理する(引数は@ARGVを通して$infilenameに入る)
	$day = $infilename;
	$day =~ s/([\d\-]+)\.txt/\n$1/g; # 「2001-01-01.txt」を「<改行>2001-01-01」に(各テキストファイルの末尾に改行がないことがあるので)
	$outfilename="a".$infilename; #「a元ファイル名」というファイルに出力

	open(IN,"< $infilename");
	open(OUT,"> $outfilename");
		@list=<IN>;
		@out=($day.":",@list);
			print OUT @out;
	close IN;
	close OUT;
}

関連記事