ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

P4Dで、はてレジ(はてなブックマークを登録するツール)を作ってみました

という訳で(何が?)、Python for Delphi を使って、はてなブックマークを登録するツールを作ってみました。


管理するツールじゃなくて、単純に登録するだけのツールです。
何で作ったのかと言うと、「Webから登録すると時間が掛かるから!」という問題があったからです。
自マシンの性能がミドルクラスなので、

  1. はてなブックマーク上から登録する際、タグ付きで登録しようとした時、JavaScriptを有効にしないといけない。
  2. この処理時間がワンクッション掛かる。
  3. ブックマークを大量に登録しようとすると、このワンクッションが我慢ならない。

という三段論法?からです。


このツールだと、HTTP?を投げつけるだけで、通信がほとんど無いのとHTML描画が無いので、多分速いです。(単純とも言う)
UIはWindows専用なので、レスポンスも早いと思います。
名前なんですが、はてなブックマークを登録(register)するから、「はてレジ」と名付けました。

まずは謝辞

このツールを作るにあたって、ueBLOGさんの、「ueBLOG: Pythonで「はてなブックマークAtomAPI」(訂正版)」の記事を、使用させてもらっています。
ひたすら感謝。

使い方

起動したら、以下の画面が出てきます。
はてレジ1
はてレジ1 posted from フォト蔵


画面は単純で、登録URLにブックマークしたいURLを、コメント欄にコメントを書いて、タグリストで目的のタグをチェックして、登録ボタンを押すのみです。


やり方としては、IEタブブラウザのURL欄を はてレジ にドラッグ&ドロップします。
はてレジ2
はてレジ2 posted from フォト蔵
すると、登録URL欄にドラッグ&ドロップされたURLがコピーされます。
(別に、登録URL欄に直接コピペしてもOKですけど、面倒くさいからD&Dに対応させてます)


次に、コメント欄にコメントをメモを、タグリストでタグしたい項目にチェックを入れます。
はてレジ3
はてレジ3 posted from フォト蔵
コメント欄に書き込んだ文字数が赤字でカウントされるので、なるべく100文字を超えないようにしてください。
(はてブの挙動から、日本語/英語関係なく1文字カウントしていると判断し、そのように処理しています)
タグをコメント欄に直接埋め込んでも構いませんが、入力ミスを防ぐ為にも、チェックリストボックスでチェックするのが確実だと思います。


コメントを書き終えたら、登録ボタンを押してください。
はてレジ4
はてレジ4 posted from フォト蔵
はてなブックマークAtomAPIへの呼び出しが行われ、登録が完了したら「ポン」と音が鳴り(INIファイルを弄って消す事は可能です)、タイトルバーに「登録=OK 時間」という風に記載されます。
また、同時に登録URLとコメント欄、タグのチェックがクリアされます。


と、まぁこんなもんです。


登録の裏側で、送信されているXMLデータは、下側の「ログ」タブをクリックすると見る事が出来ます。
(と言いつつ、実は内部でPythonがprintしている内容を表示しているだけです。はい)
はてレジ5
はてレジ5 posted from フォト蔵


ユーザ名とパスワードは、「設定」タブで設定します。
はてレジ6
はてレジ6 posted from フォト蔵
初期タグとあるのは、タグリストに出てくる内容を、ここで編集できます。
設定内容は、アプリケーション終了時、INIファイルに保存されます。また、アプリケーションが起動される都度、このINIファイルの内容が読み込まれ、再設定されます。

ブツ(はてレジ)の場所

コンパイル済みバイナリを配布できる場所を持ってないのと、コード上の問題点とか指摘してもらえると嬉しいな。的観点から、ソースをLZHで圧縮し、以下の場所に base64でバイナリ→テキスト化したものを 貼り付けてます。


はてレジの場所:http://d.hatena.ne.jp/Wacky/20000502


base64エンコードされたテキストを復元する方法は、http://d.hatena.ne.jp/Wacky/20000502/1146547697 にメモしてます。


ソース配布なので、バイナリを得るには以下の環境が必要です。

  • Delphi6以上(もしかしたら、無償のPersonal版でも動くかも。試してませんが)
  • Python 2.4.2
  • Python for Delphi Ver.3.31(2006/3/5)


バイナリ配布とか改変はテキトーにしてください。出来れば、手前のココはおかしいとか、こういう風に記述するとヨシとかあったら、教えてもらえると嬉しいです。
(会社ん中じゃ、コード批評してくれるヒマ人いないんですよ。ホント)

構造の説明

コードを見てもらえば、大体わかると思うのですが、要点を箇条書きに説明してみます。

  • GUIDelphiはてブへの登録作業をPythonにやらせています。
  • 登録作業を担当するPythonコードのメインは、外部ファイルのmain.pyが担当しています。
  • ueBLOGさんの提供されている はてブライブラリ(hatenaBookmark.py)は、main.pyからimportで読み込んで使用しています。
  • はてレジ起動時、ツール内のPythonエンジンがmain.pyをロードします。
    登録ボタンを押すと、main.pyの postBookmark 関数を呼び出す事で、はてブへのブックマーク登録を実現しています。
  • main.pyでprint出力された内容は、はてレジの「ログ」タブのTMemoに出力されるように設定されています。
    だから、適当なデバッグをしたければ、printを一杯噛ませばいいのです。
  • main.pyでは、はてブライブラリのオブジェクト生成に使う login 関数と、存在チェックを実施する isObject 関数が用意されています。
    はてレジでは、登録ボタン押下前後に、呼び出してオブジェクトを生成させています。
    ↑アプリケーション実行中に、main.pyの内容はアンロードされてない点に注意。
  • GUI画面の登録URLのボックスと、コメント欄のボックスは、main.pyから edtURL.Value、edtComment.Valueを介してアクセスできるように設定されています。

言い訳

最初、P4DのDelphiモジュールを使って、徹頭徹尾Pythonで書き倒そうと思っていたんですが、ドラッグ&ドロップさせる方法がわかんなくて諦めてしまいました。


今回、P4Dを使っていますが、IronPythonを使うのも結構面白いチョイスだと思います。
(IronPythonに興味があるなら、匣の向こう側 - あまりに.NETなさんの記事を、追いかけるのが良いかも)
まぁ、技術的蓄積が無いんで諦めましたけど。


後、はてブAPIなんですが、以下の方法を検知するやり方。誰か知りませんか?

  • このURLは、自分が登録済みか否か?を知る方法
  • 自分の登録しているタグ一覧を抜き出す方法

APIをパコパコ弄ってみたり、はてな - はてなブックマークAtomAPIを眺めてたんですが、自分には さっぱり でした。


補足なんですが、タイトル編集は、現在盛り込んでいません。
はてブで推奨してないのと、まぁメンドーだったので。うひゃ。