Hatena::ブログ(Diary)

わさっき RSSフィード

2012年01月13日

[][] hatedma: はてなダイアリーマネジャー

はてなダイアリーの記事データを有効活用するためのRubyスクリプト,hatedma.rbを作成しました.GitHub - takehiko/hatedma: Hatena Diary Managerより参照・取得できます.

hatedma概要

  • hatedma.rbを使うと,はてなダイアリーの記事データをエントリごとにファイル化し,いくつかの方法で検索を行えます.
  • シェルで実行します.特定のフォルダ(デフォルトでは,~/.hatedma)にファイルが作られ,hatedma.rbおよび他のソフトウェア*1で検索ができます.
  • 記事内の[...]による表記(タグ)を取り出し,同一タグの記事情報を出力することができます.ISBNおよびASIN記法については,Ruby/AWSと連携して,書籍や商品の詳細情報を取得できます.
  • 記事情報の出力の仕方には,「URL」「ファイルのパス」「本文(ソース)」があり,コマンドオプションで制御できます.
  • はてなへのアクセスは一切行いません.処理のもととなるファイル(記事データ)は,あらかじめ取得したものを使用します.

準備

上記のうち,「ユーザ名」は,シェルを使う際のユーザ名(環境変数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の階層や,変数名・メソッド名などを整理します.

*1:高機能なgrep型検索として,Rakがおすすめです.