2006年06月27日 (火)

HaloScan コメントを一気にダウンロードするコマンド

HaloScan にはコメントを CAIF という一種の XML としてエクスポートする機能があります。これを利用して全てのコメントをダウンロードし、スレッド(エントリ)毎に別ファイルにしてしかも日付順にソートするコマンドを作ってみました。
  1. α2を出しました」を追記

HaloScan のプレミアム会員だけのような気もしますが、HaloScan のコメントを export するページから全てのコメントを CAIF という一種の XML としてダウンロードすることができます。HaloScan が使用している CAIF のバージョンは 0.2 のようですが現在は CAIF 0.4 というのが最新で ちょっと違うところもありますが、取り敢えずは気にしないことにします。(参照「Tecknik.net: Commenting: CAIF: Specification: 0.4」)

この CAIF。それをインポートするサービスを知らないのでどう使えばよいのかわからずほったらかしにしていたのですが、最近密かに妄想している iBlog サイトの AJAX 構想と連動して活用できるなあと思っていました。そこへきてこの CAIF を利用しようと會澤さんが奮戦していました。なんかその気になったのでコア部分の Perl スクリプトを書いてコメントに貼付けたのですが、ダウンロードが手動では面倒です。その Perl スクリプトを書いたときにも自動ダウンロードの shell スクリプトを書いたのですが、Firefox が保持している cookie を利用するという汎用的でない方法を使っていたので捨ててしまいました。

そのときに既に気付いていたことですが、curl コマンドには cookie をファイルに保存し、そのファイルを再利用して cookie をサーバに返すことができます。そこで昨日、再びシェルスクリプトを作成して以前書いた Perl スクリプトと連動させたらばっちり成功しました。何が成功したかと言うとこうです。

  • CAIF ファイルを全部一気にダウンロードする。
    でもダウンロードしたファイルは残しません。
  • ダウンロードした CAIF を元にスレッド(エントリ)毎に別ファイルにする。

こうすることで各エントリ毎の完全なコメントリストのデータファイルができあがります。これを更に加工して會澤さんのように JavaScript ファイルにしようとすることもできますし、私の目論見のようにそのままアップロードしておいて AJAX 風に JavaScript を利用して色々な表示をすることも可能になります。

しかしそのままでは欠点がありました。一つは shell スクリプトと Perl スクリプトが連動するためコマンドを二つ用意しなければならないことです。個人使用の場合はそれで問題はないのですが、公開する場合は PATH が通っているところに呼び出される方を置くとかそういうことで話がややっこしくなるのは必定です。もう一つは元々の CAIF がそうなのですが、スレッド内のコメント達の順番がバラバラなことです。コメントの表示順がばらばらでもしょうがないから必ずどこかで着信順に整列させることになります。色々に利用する度に整列させるのは無駄というものです。

そこで全てを Perl スクリプトで書いて、更にスレッド毎の CAIF ファイルではコメントが着信順に整列するようにしました。これでほぼ広く実用できるかと思います。そこでまだ正式版ではありませんが、誰かに試してもらえて、自分以外のコメントでも OK だったら次に進めるなあということで公開してみます。

使い方はターミナルで次のようにします。

getHaloCmnts.pl username password outputDirectory

ただし引数は次のとおりです。

username

HaloScan にログインするときのユーザ名です。

password

HaloScan にログインするときのパスワードです。

outputDirectory

スレッド毎の CAIF ファイルを作成するディレクトリです。既にそのディレクトリがあればそこに置きますし、なければディレクトリが作成されて CAIF ファイルが置かれます。

次のようにするとマニュアルが出力されます。(いい加減な英語で書いてあります)

getHaloCmnts.pl --help

引数やオプション無しで実行すると使用方法に絞ってインストラクションが表示されます。

更に色々考え中です。例えば HaloScan で使用している文字エンコードや出力する CAIF ファイルの文字エンコードをオプションで指定するとか、CAIF 0.2 で出力しているのをデフォルトで CAIF 0.4 にした上で CAIF 0.2 でもオプションで出力できるようにするとか、個々のスレッドの出力ファイルのテンプレートを指定することで任意の形式で出力できるようにするとか。更に、iBlog 限定ということであれば、iBlog のプレビューディレクトリの対応するエントリのディレクトリに出力するようにするとか、Thingamablog の内部データベースと連動するとか、そのためにコマンドではなく Perl モジュールとして再構築するとか。

まあでも考え出すと広がり過ぎて結局何もできなくなってしまいそうなので、ほどほどに改良を加えて正式リリースするつもりです。

追記

α2を出しました

次のバグがあったので修正しました。

  • HaloScan からダウンロードできる CAIF のうち最初の一つを取得し漏らしていた。
    そのためコメント数が少ないと全く取得できなかった。
  • 各スレッドの最後のコメントの後ろに変な文字列が入っていた。
  • 出力ディレクトリに .xml という無意味な隠しファイルができてしまっていた。

Posted: 03:29    | Comment | Trackback


以下、類似エントリです。