はてなダイアリーの記事データを有効活用するためのRubyスクリプト,hatedma.rbを作成しました.GitHub - takehiko/hatedma: Hatena Diary Managerより参照・取得できます.
hatedma概要
- hatedma.rbを使うと,はてなダイアリーの記事データをエントリごとにファイル化し,いくつかの方法で検索を行えます.
- シェルで実行します.特定のフォルダ(デフォルトでは,~/.hatedma)にファイルが作られ,hatedma.rbおよび他のソフトウェア*1で検索ができます.
- 記事内の[...]による表記(タグ)を取り出し,同一タグの記事情報を出力することができます.ISBNおよびASIN記法については,Ruby/AWSと連携して,書籍や商品の詳細情報を取得できます.
- 記事情報の出力の仕方には,「URL」「ファイルのパス」「本文(ソース)」があり,コマンドオプションで制御できます.
- はてなへのアクセスは一切行いません.処理のもととなるファイル(記事データ)は,あらかじめ取得したものを使用します.
準備
- シェルとRuby処理系が必要です.(Ruby 1.8.7/1.9.3/2.0.0(スナップショット版を含む)で動作確認をしています.)
- はてなダイアリーの記事データのファイルを取得しておきます.取得方法は次のとおりです.
- 書籍や商品の詳細情報を取得するには,Ruby/AWSで商品検索の準備のところで書いた,「AWSアカウントの取得」「ruby-aawsの導入」「~/.amazonrcの作成」を行っておきます.(hatedma.rbの-Bオプション,-Wオプションを使う予定がなければ,しなくてもかまいません.)
- hatedma.rbを,https://github.com/takehiko/hatedmaより取得します.テキストエディタでファイルを開き,「HATENA_USERNAME =」の後を自分のユーザ名に変更して,保存します.実行属性をつけてから,コマンドサーチパス上の適当な場所に置きます.
上記のうち,「ユーザ名」は,シェルを使う際のユーザ名(環境変数USERなどの値)ではなく,はてな利用におけるユーザ名を指します.以下も同じです.
はじめに行う作業
- mkdir ~/.hatedmaを実行し,ディレクトリを作ります.そして,記事データのファイルを,そのディレクトリに置きます.
- hatedma.rb -Aを実行します.URLが表示されます(1つのURL表示につき,1つのファイルが保存されます).すべての記事内容をファイル化したら,この処理は終了です.
- 書籍や商品の詳細情報を取得するには,hatedma.rb -Bを実行します.Amazonのサイトにアクセスするため,少し時間がかかります.
新しい記事データを取得したら,ディレクトリ~/.hatedmaの作成を除く上記作業をやり直すことになります.なお,-Bオプションによる処理では,すでに取得している情報の再検索はしないので,2回目以降の処理時間は短くなります.
作成するファイル
上記の処理を終えると,~/.hatedma内に,次のディレクトリやファイルが作成されます.
- data:記事ごとに分けられたファイルを格納するディレクトリです.例えば,当雑記の昨日のエントリは,~/.hatedma/data/2012/01/12_1326314349.txtに保存されます.
- data.old:一つ前のdataです.
- ユーザ名_title.txt:「URL」「カテゴリー」「記事タイトル」のリストです.文字コードはUTF-8,改行コードはCR LFとしており,Windowsのメモ帳で開いても,乱れることなく表示できます.
- ユーザ名_date.txt:「URL」「日付」「記事タイトル」のリストです.過去の記事を貼り付ける際の使用を,念頭に置いています.文字コードなどは,ユーザ名_title.txtと同じです.
- tag.pstore:記事内に書かれた各タグについて,どの記事に書かれているかをハッシュ化したものを,PStoreを用いて保持しています.
- tag.pstore.old:一つ前のtag.pstoreです.
- amazon.pstore:ISBNまたはASINのそれぞれについて,詳細情報をハッシュ化したものを,PStoreを用いて保持しています.
タグ
hatedma.rb -Aの処理中に,[ と ]で挟まれた文字列を検出し,タグとして処理しています.
- isbn:...,asin:...
- http:...,https:...
- id:ユーザ名...
- f:id:ユーザ名...(fotolife記法)
- その他
に分けられます.見出しにつけるカテゴリー名や,コードやコマンドの一部で[ と ]で囲まれているものも,該当します.
いくつかの記法について,「:detail」「:image」「:title=...」などは取り除いた上で,タグ文字列としています.
検索コマンドの例
検索コマンドの例を示します.
- hatedma.rb -S pdfとすると,記事ファイルすべてについて,「pdf」を検索し,該当記事を出力します.全検索なので時間がかかります.
- hatedma.rb -S pdf -r 2011とすると,2011年の記事ファイルすべてについて,「pdf」を検索し,該当記事を出力します.
- hatedma.rb -S pdf -r 201101とすると,2011年1月の記事ファイルすべてについて,「pdf」を検索し,該当記事を出力します.
- hatedma.rb -T Cとすると,「[C]」が書かれている記事を出力します.
- hatedma.rb -T 0895792524とすると,「[isbn:0895792524(それ以降は任意)]」が書かれている記事を出力します.
- hatedma.rb -W 0895792524とすると(そしてRuby/AWSが利用可能になっていれば),0895792524をASINとして検索し,製品(この場合は書籍)の情報を出力します.
上記の-Sまたは-Tオプションをつけた検索では,該当記事のURLを出力します.-fオプションを同時につけて検索すれば,代わりにファイルパスを出力します.-bオプションだと,本文(ソース)を出力します.
その他のオプション
- hatedma.rb -Gを実行すると,タグと,それを含む記事を出力します.これも,-fまたは-bを指定することができます.
- ユーザ名や,各ファイルを格納するディレクトリ名(~/.hatedma)を変更したければ,「-n ユーザ名」「-d ディレクトリ名」を指定します.
- hatedma.rb -Eで,読み書きする各ファイルの所在が出ます.-n,-dオプションを同時に指定できます.最後の「file_diary =」の値が,実在するファイル名でなければ(典型的にはユーザ名になっていたら),おそらく,-Aによるファイルの分析(記事データファイルの読み出し)に失敗します.
- hatedma.rb --helpで,オプションの説明が出ます.
今後の予定
- PStore形式で保持している内容について,エクスポートやインポートができるようにします.
- 記事取得をもっと効率良く行えるような検索方法を考案し,実装します.
- ソースファイルを見直し,module/classの階層や,変数名・メソッド名などを整理します.