kimotter
· 🪦 retired
コマンドラインからツイートを投稿する Ruby 製クライアントです。Twitter API を直接は使わず、mala API(http://api.ma.la/twitter/ にあった Web の投稿フォーム)を Mechanize で操作して投稿します。gem として公開していました。
使い方
Ruby 1.9 と nokogiri・mechanize が必要です(README 由来)。
gem install kimotter
kimotter "ツイート本文"
投稿の前に、ページから取り出した確認メッセージへの同意を求められます。README の実行例です。
> kimotter "EventSource知らんかった、普通に便利そう"
嘘偽りなく自分がキモトであると誓います[y/N] y
hi kimoto. try to tweet your cool message
done!
オプションは -d, --debug(デバッグモード)と -f, --force(API 制限を無視して実行)の2つです。
内部設計
コンポーネント構成です。全体で約170行の小さな gem で、フォーム操作をやる Kimotter クラスと、対話まわりを受け持つ KimotterCLI の2層でできています。
- Kimotter(
lib/kimotter.rb)—fetch_api_limit(エンドポイントを GET して API 制限値と確認メッセージをパース)、tweet(投稿フォームのstatusに本文を入れ、is_kimotoチェックボックスにチェックして submit)、api_limit?(使用数が上限に達したかの判定)を提供します - HTML のパース(
load_from_mala_html)は Nokogiri でやります。body テキストのAPI Limit: 使用数 / 上限を正規表現で読み、フォームのチェックボックスの隣にあるテキストを確認メッセージとして取り出します filterメソッドは投稿前に本文を加工するためのフックで、デフォルトは素通しです(コードのコメントに「必要ならオーバーライドして」とあります)- KimotterCLI(
lib/kimotter_cli.rb)— オプション解析(-d/-f/-a(エンドポイント URL の差し替え))、本文の受け取り、API 制限チェック、y/N 確認、終了コードの出し分けをやります。引数に本文がないときは$EDITORを一時ファイル相手に起動して書かせ、改行はスペースに置換します - bin/kimotter / bin/koiketter — どちらも中身は
KimotterCLI.executeの呼び出しだけで、koiketter はエンドポイントをhttp://kimoto.ssig33.com/apiに向けた別コマンドです
投稿1回の流れはこうなっています。
終了コードは、成功が 0、API 制限で止めたときが 1、確認プロンプトが EOF だったときが 2、y 以外で断ったときが 3 です。