Python を使って twitter クライアントをつくってみる。

ことの発端は twitter クライアント tween の画面をみなみさんにみせてもらったことだった。 それはタスクトレイに常駐して、新着メッセージがあるとバルーンが表示されていた。 うらやましくおもったが、ぼくの PC は Linux だった。 Linux で tween は動かなかった・・・。

てなことで、ないものはつくる精神。 ひろまさはバルーン好きだった。

notify00

これね。 なんかにょーんってでてくるのが好きです。(XP ツアーはいらないが・・・)

で、Linux でもアップデートマネージャとかで同じようなバルーンがでてきていたので、ツールキットとして存在していることは分かっていました。

実は何を隠そう、バルーンできる Linux 向け twitter クライアントは既にいくつかありまして、

TwitterNotifier: バルーンで更新を通知するTwitterクライアント

アイコン付きバルーン(notification)としてユーザーに更新を通知するタイプのTwitterクライアントです.

こちらは、そのまんまOK。

SimpleTwitterScreenlet GNOME-Look.org

A Simple Twitter Screenlet for posting and checking for messages.

デスクトップガジェットの screenlets にもあって、こちらも notify 表示ができます。

TwitterNotifier さんをありがたく使わせていただけばよいのですが、ちょっと表示のイメージが違うのと、あとクライアントは IM (Jabber) 経由でとろうと思っていて、その修正するのがちょっと難しそうだったので(待ちうけスレッド立てなきゃいけない)、今回はソースの参考用にさせてもらっています。(ありがとうございます)

したの SimpleTwitterScreenlet は、(あとで気がついたのですが)日本ロケールで動かすとメッセージ notify が動作しません。 strptime という関数が ja_JP UTF-8 ロケールで動かすと、解釈を日本の月名とか曜日でしてしまいおちてしまうようです。

clear = (None , None)
locale.setlocale(locale.LC_ALL, clear)

とか先頭にいれておくと動くかもです。

さて、何を隠そうぼくは Python 言語も GTK ツールキットもまったくわかりません。。 Python というのはいわゆるスクリプト言語。 GTK というのは、主に Linux などでウインドウを描くためのライブラリです。

何はなくても公式ドキュメント。

Python 2.4 ドキュメント – June 27, 2006

チュートリアル (ここから読み始めてください

Python から GTK を呼ぶには PyGTK というのを使えばよいようです。

satolog: PyGTK と Glade を使った GUI の作り方

Tkinter を使って GUI の作成をしてきて、それはとても簡単にできたんだけど、Tkinter が僕のコードと GUI をリンクするやりかたに不満があって、他のツールキットを使って GUI を作ることを検討することにした。いろんなオプションを調べた後、僕は PyGTKGlade を使うことに決めた。

PyGTK 2.0 Reference Manual

This reference describes the classes of the Python PyGTK module.

・・・。 よし。(←なにがよしだ

Python はまったくわからないので、Python を Python らしくつかうことなぞ、到底できませんが、、動かすくらいはできるでしょう。 スクリプト言語ってことは JavaScript みたいなもんでしょ。(←相当誤った解釈

で、いろいろライブラリなどをあつめ、かくと同時に言語仕様につまるなどし、試行錯誤。。 実行。 ぴ。

notify01

ぎゃー。

[tegaki]ですぎ(笑)[/tegaki]

もうちょっといじって。。 あぁ、ひさしぶりに GUI のツールキットさわるね、などと思いつつ、部品が visible になるまえにイベントが発生してうまくでないとか、「懐かしいなぁ」などとおもいつつ・・・。

ぴ。

notify02

うむ、満足。 🙂

ほんとは API でなく Jabber 経由でひろいたいので、あとは IM が復活して dsub の差し替えをすればいけるはずなのですが、はたして。。

さて、今では普通なんでしょうけど、スクリプト言語で GUI つくれるのは、なかなか不思議な感覚をうけます。 gtk.main() でイベントループするんだーみたいな。そりゃそーなんですが。

ちなみに、PHP も GTK とのバインディングがあるのでやればできるみたいですね。

PHP-GTK

PHP-GTK is an extension for the PHP programming language that implements language bindings for GTK+. It provides an object-oriented interface to GTK+ classes and functions and greatly simplifies writing client-side cross-platform GUI applications.

GTK は Glade というライブラリをつかうと、XML により GUI コンポーネント定義と、イベントシグナル定義ができて、プログラムから簡単に扱えるようです。

notify03

Glade 用のデザイナーもあります。

今回、自分でかいたのは 100ステップ未満。 もちろん多彩なライブラリのおかげもありますが、こんだけで twitter の GUI がつくれてしまうのは、お手軽感が非常に高いです。

プログラミングって結構楽しいですが、いま全盛の Web におけるプログラミングというのは、あるいみ敷居が高くて、言語自体の仕様のほかに、HTTP ネットワーク、HTML の構造とか、周辺環境の知識とか言語自体にも覚えなければいけないことがたくさんあります。

しかも、Webプログラミングは、方式の目的外使用して無理やりやっている事柄も多くみられることから、とっかかりの難易度としては高いような気もします。 クライアントアプリケーションから、クラサバになって、Web になってとか順をおってやっていると大して難しくないのですが、いきなり Web ってなるとなかなか。 いつもどこから説明していいか分からなくなります(笑)

てなわけで、5行くらいのコードで、画面に GUI をだせちゃったりする Python + GTK はプログラミングの勉強環境としてはよいかなと、ふと思ったりもしました。 最初はなんか派手に画面でたほうが面白いもんね。 🙂

ちなみに、この環境は Windows でもちゃんと動くようです。 サンプルうごかして、ソース見るだけでも楽しいかもですヨ!

驚きのあるプログラミングとデータ収集趣味

芸風というのは歳とともに変わるもので、自分でかくプログラムで好きなのは、データをああだこうだと加工して出力する類のものです。

むかしは、ゲームなんかもつくっていたくらいなので、GUI 部品とかそういったプレゼンテーションレイアーのプログラミングがすきだったのですが、最近はバックエンドでこそこそ動いて、画面にはなにもださずに、でもすごいことをやってのけて終了する UNIX のコマンドのようなソフトが好みです。

というのは、GUIとかって自分でかいても、あたりまえというか(いや、ホントはすごいんですけど!)、動作の予測ができてしまうところに驚きがないのが、自分ではかかなくなった原因なのかと思います。(あくまでソースコードのアルゴリズムのお話です)

楽しいのは、自分でかいたコードが正しく動いているのに、結果が自分の想像と違うとき!

[tegaki]そーだったのか![/tegaki]

なんだかドキドキしちゃいますよね。(笑)

たぶん、WordPress のつくったプラグインで、この最たる例で言えば wp-kumonosu が代表です。

wp-kumonosu

基本はサイトにいただいた、コメント・トラックバックをさまって管理画面に表示するだけ。 WordPress の動作になにも影響しないというへんてこなプラグインですが、昔に一度だけコメントをいただいた方とかを思い出して、浸れるという素敵な部分をもちます。 🙂

wp-kougabu も、自分では忘れていたような画像をひっぱりだしてくるという意味では似ているのかもしれません。

wp-kougabu10

どちらも自分で動かしてみて、「おー!そうかー!」、みたいな感覚になれるのが面白かったです。

ソースコードというのは自分の頭の中の処理をそのままかいただけのもの。 でも、与えるデータによっては意外性がでてきたりする。 これがぼくがプログラミングをする楽しみのひとつなのかもしれません。

で、重要なのはデータ。 そんなこともあり、自分はわりとデータ収集趣味があるのではないかとおもいます。 なんといっても、スパムメールですら 3万通くらいとってあったりするのです。 これは、もちろんスパムフィルターの学習素材です。

あと、WordPress にくるスパムコメント。 なにげにあれのホスト情報はプロキシを探すのに便利かも。 関係ないか。(笑)

メールに関して言えば、メーリングリストも相当な情報源で、おそらくトラブルがあったときは Google を検索するより、メーラでその話題を扱っているメーリングリストを検索したほうが早いと思います。

あとは、RSS。

これは、家のローカルサーバで動かしているフィードリーダを使っていますが、理由は取得フィードの保存期限が事実上無限だからです。 インターネット上の RSSリーダは、保存期限が明確でなくてどうも不安です。 中身のエクスポートもできないみたいだし。

yutakasan

うちの Gregarius という feed aggregator の MySQL の内容です。 データは 2006/10/06 から保存されています。 (上は yutaka さんの記事です!) Gre ちゃんは、そんな使いやすいソフトではないのですが、データベース構造がそのまんまで、分かりやすいので愛用しています。

RSS によるコンテンツ配信については、納得いかないことのひとつが画像の扱いです。

・・・だって、画像はただの直リンクなんだもん。 🙂 サイト消えたら画像見えなくなります。 RSS はコンテンツ配信という意味では、かなり不完全な仕組みだと思うんですがどうなんでしょう・・・。 配信されてねーじゃん、みたいな(笑) 今は img タグ見つけたら、そのままサーバに画像吸い取ってリンクをすげかえようかと、ちょっと画策していたりもします。

ほかに RSS に関しては、RSS を登録するとほぼフルオートで解析して、勝手に全文RSSをつくるプログラムをかいていて、これにニュースサイトRSSを登録しているので、どんどん Gregarius にスクラップされていっています。 あれ、そんなニュースあったなーとかって検索できて便利です。

以上はすべてローカル(手元)にデータがあるからできる芸当。 MySQL で like 検索するもよし、形態素して検索するもよし。

データ集計検索こそ、オープンアーキテクチャであり、自分の意思でデータを集め、自分のアルゴリズムで行うべき事柄。

Google に対する過度の信頼は、彼らに情報操作される危険性をはらむ。 都合の悪いこと、もしくは他者からの巨額の裏の金のやりとりで、順位操作がされている可能性を排除してはいけない。 彼らは自ら語ることなく、表示順位による第三者意見の提示というマジックで情報を容易に操作できる。 検索アルゴリズムがトップシークレットになっているのは何故かを考えるべきであり、上層社員に莫大な金を与えているのをなぜか考えるべきであり、そして、利用者に無料で提供されるアプリケーションはそれを考えていても「ぼくらの Google がそんなわけない」と思わせる、甘い罠である。

なーんて冗談ですが、こんな映画あったら面白そうですね。

と話がそれたところで、おしまい。

低反発リストレスト付マウスパッド

職業柄、ずーっとすわって PC と向き合っていることが多いので、意外と体がダメージを受けています。 .zone のときマウスパッドだこのエントリを書いたことがありましたが、そんなかんじでこすれたり、肩がこったりしちゃうわけです。 だって、10時間以上同じ姿勢ですからね、そんなこともあります。

てなわけで、少し前なのですが Amazon でなんとなくウインドウショッピング(?)していたら、低反発リストレスト付マウスパッドというのがあったので、買ってみました。 980 円とか。

これがなかなか良い! レビューにはマウスの動きが悪くなるとかいてありましたが、レーザーマウスだとぜんぜんそんなことないような? 😀 単品で買うと送料かかっちゃうので、何か他の買い物と一緒にでも。

IMG_0623

ちなみに、キーボード、マウスとも Microsoft の人間工学系のやつです。 マウスはかなりでかいので普通の人にはつかいずらいかも。 キーボードはキーが歪曲しているタイプですが、これもなかなか良いですぞ。

IMG_0624

モニタの左は「データホルダー」で、机からアームがでているタイプのもので、こちらも Amazon さんから。(実はマウスパッドよりこっちのほうがメインでした) ちょっと、つくりがおもちゃっぽい部分もありますが、肝心のアームはよさそうです。

サプライ品って、そんなに高くないし意外と面白かったりするのでたまに眺めたりします。 🙂

ubu36

PC のほうのデスクトップは、以前 Vista のガジェットにもいれてみた、はちゅねさんを製作。 よくみると以前からバージョンアップ。 ねぎが二刀流だぜぃ。 あ、ちなみに画像表示しているだけなので動いたりはしません。(笑)

Linux のデスクトップガジェットは、screenlets を使っていますが、なんか Google より Vista より、一番つくりやすいかも、と思いました。 それっぽくかいて、Python 起動するだけなので、デバッグしやすいんですよね。 Eclipse の PyDev とかつかったらデバッグブレイクもできるかも?

いろいろな作業環境って面白いですよね。 Masayanさんの工具ねたとか結構ファンだったりします。 🙂