FrontPage - habu Wiki @ SF.jp
habuは、プラグインを組み合わせることでRSSを加工して再配信するためのソフトウェアです。簡単に言っちゃえば,Plaggerもどきです。
plaggerも好きだし、pythonも好きなら試さない訳には行きません。インストールはマイコミジャーナルが詳しいかと思います。私は、いきなりsvn/trunk取得して必要な物はeasy_installしました。
まぁ題名の件で言えば、iTunesで聞いている曲をTwitterにPostするPythonのスクリプト ? TRIVIAL TECHNOLOGIES 2.0を使えば動きそうですが、とりあえず...
habuではpluginはクラスで定義され、実行時にexecuteというメソッドが呼び出されます。気をつけなければならないのがexecuteはperl版と異なりentry単位にhookされるのではなく、全てのcontentsを持って呼び出されます。
※開発中なのかbaseとなるpluginクラスといった物はありません。
またhabuにはまだtemplateが実装されていません。ですのでポスト形式は現状プラグイン本体に記述する事になります。(いずれ改良されるかもしれません)
あと、これはいたし方ないですがsite-packageにあるxxx.pyを使うpublisher/xxx.pyでimport xxx出来ません。
今回のtwitterポストプラグインも「twitterPost.py」という名前にしてあります。
webutilsクラスやlogクラス等で、おおよそperl版と同じような事が出来ます。perlよりもpythonの方が可読性がありますし、pytnonにも負けない程のライブラリ郡もありますから、色んな事が出来るかと思います。Djangoなんかと組み合わせても面白そうです。
あと、面白いなと思ったのがコマンドライン用インタフェース「runhabu.py」に"--download-module"というオプションがあり、svnサーバからダウンロード出来る仕組みがあるようです。こちらは追々試します。
pythonが好きでplaggerも触りたい人は、こちらから初めてみてみるのも良いかもしれませんね。
で、最後に適当に作ったプラグインがコレ
habu/publisher/twitterPost.py
# -*- coding: utf-8 -*-
from twitter import Api
import habu.log as log
class TwitterPublisher(object):
def __init__(self, config, environ):
self.username = config.get("username", "twitter username")
self.password = config.get("password", "twitter password")
def execute(self, content):
try:
api = Api(self.username, self.password)
for entry in content["entries"]:
message = entry["title"] + ":"
if len(entry["summary"]):
message += entry["summary"]
else:
message += entry["description"]
message += " " + entry["link"]
if len(message) > 159:
message = message[0: 159] + "..."
api.PostUpdate(message)
except Exception, e:
log.error()
else:
log.info("twitterPost : commit")
def create(config, environ):
return TwitterPublisher(config, environ)
あと、用意するYAMLはこんな感じ
global:
timezone: Asia/Tokyo
log: stdout
pipeline:
rss_fetcher:
- module: subscription.config
config:
feed:
- http://b.hatena.ne.jp/[hatena user]/rss
- module: filter.join
- module: filter.sort
config:
reverse: True
- module: publisher.twitterPost
config:
username: [twitter username]
password: [twitter password]
deps相当、Crypt相当の物はまだ実装されていませんのでご利用は計画的に。