今さらながら、このダイアリーをひとつのテキストファイルから更新できるようにした。その作業メモ。具体的な手順はWindows向けですが適宜読み替えればMacなどでもできるはず。
そもそもそういうことをしたくなったのは、Twitterの全ツイートをダウンロードできるようになったから。
- Twitterの全ツイートダウンロード機能を試してみたよ! - F.Ko-Jiの「一秒後は未来」(http://blog.fkoji.com/2012/12301318.html)
このダイアリーには自分(@yimamura)のツイートを随時転記している。いろいろあって2009年7月分のツイートが手元になかったのだが、全ツイートダウンロード機能の提供開始で補完できることになった。これをまとめてダイアリーに転記したい。
該当する日付のダイアリーをいちいちブラウザで開いて「編集」してもよいが、もうちょっとエレガントにやりたい。
「はてダラ」を使うと、日付のテキストファイルを作って実行すればダイアリーを更新してくれる。さらに「はてダラスプリッタ」を使えば、日ごとのテキストファイルを用意しなくても、すべての日付をひとつにしたテキストファイルから「はてダラ」用のテキストファイルを生成してくれる。ある決まったテキストファイルを編集したあと、「はてダラスプリッタ」に続いて「はてダラ」を実行すれば変更があった日だけ更新できるというわけ。
「はてダラ」と「はてダラスプリッタ」の環境を作っておけば、後日ダイアリーの内容を一括置換したいときなどに便利だ。自分のテキスト編集環境では、日付のテキストファイル群をgrepする(「はてダラ」のみ使用)よりはひとつのテキストファイルを一括で検索/置換できるほう(「はてダラスプリッタ」も使用)がよい。
そんなわけで以下のように作業した。
- Perlを入れていない人はインストール→Download and Install Perl: ActivePerl | ActiveState(https://www.activestate.com/products/activeperl/downloads/)
- 「Crypt::SSLeay」モジュールをインストール。WindowsとMacでのインストール方法は以下。
- Windows 8でPPMからCrypt::SSLeayをインストールする(d:id:Imamura:20130416:cryptssleay)
- Macで「はてダラ」を使うには(d:id:Imamura:20110916:Mac_hw)
- 今後はてダラを使うディレクトリに「hw.pl」、「csv2hw.pl」、「hws.pl」を置く
- hw.pl:はてなダイアリーライター(略称:はてダラ)
- csv2hw.pl:csv2hw.pl: CSV からはてダラ形式への変換スクリプト
- hws.pl:はてなダイアリーライター(略称:はてダラ) - 関連ツール: はてダラスプリッタ(hws.pl))
- 複数ブログ機能で作ったはてなダイアリーで「はてダラ」を使うには、「hw.pl」の代わりに以下のスクリプトを使う:複数ブログ機能に対応した「はてダラ」(d:id:Imamura:20110712:hw)
- ダイアリーのデータをダウンロードする。ダイアリーの「管理」−「データ管理」−「ブログのエクスポート」−「はてなの日記データ形式」の「ダウンロード」を右クリックし「名前を付けて保存」する。
- ダウンロードした日記データ(xml形式)を正規表現を使えるテキストエディタ(秀丸エディタやサクラエディタ、miなど)で開き、以下のように検索/置換する。
- xmlファイルの文字コードを「シフトJIS」に変更し、「diary.txt」として保存
- 「perl hws.pl」(はてダラスプリッタ)を実行
- メモ:生成されるテキストファイルのタイムスタンプはhws.plの実行時刻(テキストファイルのファイル名にもとづく日付にはならない)
- 生成された「2013-01-01.txt」「2013-01-02.txt」…という日付のテキストファイルのうち、1つを残して削除(こうすることで、次にはてダラを実行時に既存の日記が全部再アップロードされるのを抑止できる。1つだけ残すのは最終更新日時の情報が入った「touch.txt」を生成してもらうため)
- 「perl hw.pl -c -u ユーザーID」を実行。パスワードを入力(このときパスワードは「*」などでマスクされない)。すると残したファイルの日付のダイアリーが更新される
- 「diary.txt」の内容を必要に応じて追加・修正し、コマンドラインから「perl hws.pl & perl hw.pl -c -u ユーザーID」を実行(こう書かれたバッチファイルを作ってもよい)
以上で、今後は上の手順の最後、「diary.txt」を修正して「perl hws.pl & perl hw.pl -c -u ユーザーID」を実行することでダイアリーを更新できるようになった。お疲れさまでした。
ところではてなとしては、はてなダイアリーからはてなブログへの移行をユーザーにすすめていきたいらしい。はてなブログでもこの種の更新ツールを使えるようになったら移行する人がもっと増えるんではないですかねーなんて。(フィードバック済み)
追記:下のようなツールがありました
- blogsync ではてなブログのエントリをローカルと同期する - 詩と創作・思索のひろば(https://motemen.hatenablog.com/entry/2014/12/22/blogsync)
(さらに追記:その後はてなブログの更新には「はてなブログライター」を使うようになりました)
- はてなブログを更新:はてなブログライターを試してみる - ただいま村(https://ima.hatenablog.jp/entry/20170606/hatenablogwriter)
adddateheader.pl
ダイアリーのCSVデータから「diary.txt」を作るときに使うスクリプト。
- ダイアリーのCSVデータを今後はてダラに使うディレクトリにダウンロード(ダイアリーの「管理」−「データ管理」−「ブログのエクスポート」−「CSV形式」の「ダウンロード」を右クリックし「名前を付けて保存」)
- ダウンロードしたCSVファイルをcsv2hw.plにかける。コマンドプロンプトで「はてダラ」を使うディレクトリへ移動し「perl csv2hw.pl CSVファイルのファイル名」
- 「2013-01-01.txt」などが生成されたディレクトリで「dir ????-??-??.txt /b > dir.bat」を実行
- 生成された「dir.bat」をテキストエディタで開き「2013-01-01.txt」を「perl adddateheader.pl 2013-01-01.txt」のように一括置換。具体的には、正規表現検索/置換ができるテキストエディタを使い「^(.)」を検索、「perl adddateheader.pl $1」に置換するなど
- 「dir.bat」を実行。「a2013-01-01.txt」「a2013-01-02.txt」…のようなファイルが生成される
- 「copy /b a*.txt diary.txt」を実行。「a2013-01-01.txt」「a2013-01-02.txt」…のようなファイルが日付順に結合され「diary.txt」というテキストファイルとして出力される。Windowsで日付の降順(新しい日付を上)にしたいときはpacktextなどを使う(→「概要−packtext−水無瀬の部屋」)。その場合も出力するテキストファイルのファイル名は「diary.txt」とする
- 「2013-01-01.txt」や「a2013-01-01.txt」といった日付ファイルを全部別の場所へ移動する。削除しちゃってもよい。「csv2hw.pl」、「adddateheader.pl」ももう使わないので別の場所へ移動するか削除
- 上の手順を「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; }
関連記事
- テキスト処理に便利なソフトで日記を統合(d:id:Imamura:20110829:textoperation)
- はてなダイアリーからはてなブログへ引っ越す前にはてな記法をはてなブログ向けに修正する - ただいま村(http://ima.hatenablog.jp/entry/2019/01/12/235959)