という訳で(何が?)、Python for Delphi を使って、はてなブックマークを登録するツールを作ってみました。
管理するツールじゃなくて、単純に登録するだけのツールです。
何で作ったのかと言うと、「Webから登録すると時間が掛かるから!」という問題があったからです。
自マシンの性能がミドルクラスなので、
- はてなブックマーク上から登録する際、タグ付きで登録しようとした時、JavaScriptを有効にしないといけない。
- この処理時間がワンクッション掛かる。
- ブックマークを大量に登録しようとすると、このワンクッションが我慢ならない。
という三段論法?からです。
このツールだと、HTTP?を投げつけるだけで、通信がほとんど無いのとHTML描画が無いので、多分速いです。(単純とも言う)
UIはWindows専用なので、レスポンスも早いと思います。
名前なんですが、はてなブックマークを登録(register)するから、「はてレジ」と名付けました。
まずは謝辞
このツールを作るにあたって、ueBLOGさんの、「ueBLOG: Pythonで「はてなブックマークAtomAPI」(訂正版)」の記事を、使用させてもらっています。
ひたすら感謝。
使い方
起動したら、以下の画面が出てきます。
はてレジ1 posted from フォト蔵
画面は単純で、登録URLにブックマークしたいURLを、コメント欄にコメントを書いて、タグリストで目的のタグをチェックして、登録ボタンを押すのみです。
やり方としては、IEやタブブラウザのURL欄を はてレジ にドラッグ&ドロップします。
はてレジ2 posted from フォト蔵
すると、登録URL欄にドラッグ&ドロップされたURLがコピーされます。
(別に、登録URL欄に直接コピペしてもOKですけど、面倒くさいからD&Dに対応させてます)
次に、コメント欄にコメントをメモを、タグリストでタグしたい項目にチェックを入れます。
はてレジ3 posted from フォト蔵
コメント欄に書き込んだ文字数が赤字でカウントされるので、なるべく100文字を超えないようにしてください。
(はてブの挙動から、日本語/英語関係なく1文字カウントしていると判断し、そのように処理しています)
タグをコメント欄に直接埋め込んでも構いませんが、入力ミスを防ぐ為にも、チェックリストボックスでチェックするのが確実だと思います。
コメントを書き終えたら、登録ボタンを押してください。
はてレジ4 posted from フォト蔵
はてなブックマークAtomAPIへの呼び出しが行われ、登録が完了したら「ポン」と音が鳴り(INIファイルを弄って消す事は可能です)、タイトルバーに「登録=OK 時間」という風に記載されます。
また、同時に登録URLとコメント欄、タグのチェックがクリアされます。
と、まぁこんなもんです。
登録の裏側で、送信されているXMLデータは、下側の「ログ」タブをクリックすると見る事が出来ます。
(と言いつつ、実は内部でPythonがprintしている内容を表示しているだけです。はい)
はてレジ5 posted from フォト蔵
ユーザ名とパスワードは、「設定」タブで設定します。
はてレジ6 posted from フォト蔵
初期タグとあるのは、タグリストに出てくる内容を、ここで編集できます。
設定内容は、アプリケーション終了時、INIファイルに保存されます。また、アプリケーションが起動される都度、このINIファイルの内容が読み込まれ、再設定されます。
ブツ(はてレジ)の場所
コンパイル済みバイナリを配布できる場所を持ってないのと、コード上の問題点とか指摘してもらえると嬉しいな。的観点から、ソースをLZHで圧縮し、以下の場所に base64でバイナリ→テキスト化したものを 貼り付けてます。
はてレジの場所:http://d.hatena.ne.jp/Wacky/20000502
base64でエンコードされたテキストを復元する方法は、http://d.hatena.ne.jp/Wacky/20000502/1146547697 にメモしてます。
ソース配布なので、バイナリを得るには以下の環境が必要です。
バイナリ配布とか改変はテキトーにしてください。出来れば、手前のココはおかしいとか、こういう風に記述するとヨシとかあったら、教えてもらえると嬉しいです。
(会社ん中じゃ、コード批評してくれるヒマ人いないんですよ。ホント)
構造の説明
コードを見てもらえば、大体わかると思うのですが、要点を箇条書きに説明してみます。
- GUIをDelphi、はてブへの登録作業を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を眺めてたんですが、自分には さっぱり でした。
補足なんですが、タイトル編集は、現在盛り込んでいません。
はてブで推奨してないのと、まぁメンドーだったので。うひゃ。