設定ファイルはYAML形式で記述します。YAMLの詳細は、PyYAMLのサイト、または、WikiPediaを参照してください。
設定ファイルは大きく4つのセクションで構成されています。
globalセクションでは,habu全体の設定をします。ここではログ出力設定や、複数のプラグインでの共通の設定を行ないます。現在利用できる設定は,logの設定とプラグインのパスの設定です。
logでログの出力先を指定します。出力先に指定でstdoutで標準出力に,stderrで標準エラーにログを出力します。nullを指定するとログ出力を抑制します。ファイルパスを指定すると,指定したファイルにログを出力します。ログをファイルに出力するように指定した場合,自動的に日付ごとにログローテートします。
loglevelを指定することで,ログ出力を制御できます。値は数字,または、次の文字列です。数値の場合は,値が大きいほど、より詳細なログが出力できます。文字列での指定は,DEBUGがもっとも詳細な出力で,NONEは殆ど出力されません。
global: log: stdout loglevel: INFO
プラグインのパスは任意の場所(パス)を指定できます。追加のプラグインの場所はplugin_pathで指定します。plugin_pathの値は配列で、複数指定することができます。プラグインのロード順は、
です。
global: plugin_path: - /plugin/path/1 - /plugin/path/2
プロキシを指定できます。指定しない場合は,直接インターネットに接続します。proxy_hostでプロキシのホスト名、または,IPアドレスを指定します。proxy_portで、プロキシのポート番号を指定します。proxy_portを指定しない場合は,80番が使用されます。
global: proxy_host: myproxy.host.name proxy_port: 3128
オプションでhabuで使用するデータベースをdburiで指定できます。データベースに接続するためにはSQLObjectを使用します。dburiはSQLObjectのデータベースのURIでの指定方法で指定します。%(current_dir_uri)sはカレントディレクトリのパスに置換されます。
SQLObjectが使用するデータベースは使用できますが、sqliteを推奨します。
データベースを設定すると、publisher.dbstoreプラグインが使用できるようになります。また、Webサーバ機能でplanetモジュールが使用できます。
scheduleセクションを指定すると,habuをデーモンとして常駐させて,指定したスケジューリングに従って,定期実行できます。この仕様は将来変更するかも知れません。
scheduler: - pipeline: mypipeline expression: "* * * * *"
指定方法は,piplelineごとにcronライクなスケジュール指定を行ないます。具体的には,scheduleは配列です。各配列の要素はpipelineとexpressionになります。pipelineは実行したい処理になります。expressionで、実行スケジュールを指定します。expressionでは,空白区切りで,実行する分,時間,日,月,曜日になります。「*」は、毎Xと言う意味になります。「* * * * *」と記述することで,一分ごとに実行できます。また,「*/1- * * * *」と記述すると10分ごとに実行することができます。
実行スケジュールにhourly, dairy, weekly, monthlyを指定すると,それぞれ,一時間ごと、毎日,一週間ごと,毎月の意味になります。これは,単純なエイリアスです。
エイリアス名 | 実際の値 | 意味 |
hourly | 0 * * * * | 毎時 |
daily | 0 2 * * * | 毎日 |
weekly | 0 0 0 0 1 | 一週間ごと |
monthly | 0 0 1 * * | 毎月 |
RSSの配布サイトごとに別のフィルタを通すことで、RSSの加工方法を変更したい場合があります。その場合、設定ファイルを複数に分割して、複数のプロセスで処理することもできます。PlaggerやPRaggerはこの方式で動作します。habuも同じように動作させることもできますが、一つのプロセス内で複数の加工方法を同時並行で処理できます。一つの一連のフィルタ(フィルタチェーン)の組み合わせをpipelineと呼んでいます。例えば、pipeline Aでは、RSSを取得後、「python」という単語があるエントリだけを抜き出してRSSを再配信し、pipleline BではすべてのRSSのエントリのRSSを取得することができます。最終的にpipeline Aとpipeline BのRSSを一つのRSSにまとめあげることも、別のRSSとして読むこともできます。
pipeline: rss_fetcher: - module: subscription.config config: feed: - http://www.liris.org/blog/RSS - http://dev.ariel-networks.com/Members/blog_update/RSS sub-modules: - module: subscription.mixidiary config: userid: mixiuserid password: mixipassword - module: filter.join - module: filter.sort config: reverse: True - module: publisher.rssfeeder config: file: "out.rss"
pipelineセクションの中は辞書になっています。キーに各pipelineの名前をしていします。上の例ではrss_fetcherです。この名前はpipelineセクションの中でユニークでなければなりません。値としては、プラグインの配列になります。プラグインはインスタンス化された後に上から順次、実行されます。
プラグインの設定はmoduleとconfig、sub-modules, urlから構成されます。moduleはプラグインの名前(プラグインのモジュール名)です。moduleはプラグインのモジュール名です。configは各プラグインごとに固有の設定です。configの詳細は、「プラグイン一覧」の各項目を参照してください。urlはもし、プラグインパス上にモジュールが見つからなかった場合、指定したURLから自動でプラグインをダウンロードします。URLを指定せずに、プラグインパス上にモジュールが見つからない場合は、エラーを出力してプログラムを終了します。
sub-modulesはプラグインの中にプラグインを入れ子にするための機能です。subscription.configプラグインは、RSSフィードを取得しますが、サブモジュールとしてsubscription.mixidiaryを指定することで、同時にmixiのお友達の日記も同時に取得することができます。sub-modulesは配列で、複数のプラグインを指定できます。指定方法はpipelineの各モジュールの指定方法と同じです。sub-modulesに複数指定してもチェーンになりません。
sub-modulesの機能はオプショナルで、現在sub-modulesをサポートしているプラグインは次のものです。
moduleの名前は「.」で区切られ、標準のプラグインはsubscription.*, filter.* publisher.*です。それぞれはカテゴリ分けされていますが、これはプラグインの機能を把握しやすくするために分けています。機能的な差異はほとんどありません。
habuのサーバ機能を設定します。serverセクションは辞書で,キーにサーバの種類,値にサーバの設定を記述します。現在利用できるサーバ機能はwebです。
サーバ機能を利用するためには,パーソナルファイアウォールなどの設定を見直す必用があるかも知れません。
configにwebサーバとしての基本設定,resourceにwebサーバの個別の機能を設定します。
configの値は辞書です。portにサーバを起動するときのポート番号、interfaceにサーバを起動するときのアドレスを入力します。interfaceはオプションで,指定しない場合は,localhostになります。0.0.0.0を指定すると,外部PCからアクセスできます。
resourceの値は配列です。Webサーバのルートパスの直下に配置されます。各要素は,辞書で最低,次の二つの要素を持つ必用があります。
上記の二つ以外は、module固有の設定です。
静的ファイルをフィードします。pathにフィードしたいファイルへのパスを指定します。ディレクトリを指定した場合は,そのディレクトリ以下のファイルがすべてフィードされます。
Web UIからHyperEstraierに全文検索し,RSS出力します。nodeで全文検索するHyperEstraierのノードへのURLを指定します。userid,passwordでそれぞれユーザID、パスワードを指定します。省略すると,admin,adminにそれぞれなります。 これを利用するためには,hyperestraier pure python版0.10.0以降が必用です。
データベースから更新上を取得してRSSをフィードするPlanet機能を提供します。現状はRSSを直接フィードするだけです。
titleにRSSのタイトルを指定します。urlはこのPlanet機能へのリンクです。省略するとそれぞれ、「Habu Planet」「http://localhost/」になります。
rangeで表示する日数を指定します。sizeで表示する最大サイズを指定します。データベースから取得したデータでrangeとsizeで少ない方の数だけフィードします。rangeは省略すると7日間になります。sizeは省略すると0になります。0は無制限を意味します。