twittershellのちょっとした改造

twittershellのちょっとした改造

GTalkとの連携がしょっちゅういかれる今日このごろ,Twitterユーザの皆様にはいかがおすごしでしょうか(笑
あんまりにも落ちるので,私はtwittershellを使い始めました.このスクリプトは牧さんが作られたTwitter::Shell - Twitter From Your Shell! - metacpan.orgに付属しているツールで,コンソールからTwitterにアクセスすることができます.これを実行して"ft"とかコマンドするとfriend_timelineを実行してフレンドリストに載ってる人のステータスを新しい物から順に表示してくれます.環境にもよるでしょうが,日本語出力もokです.

だがしかし

一々"ft"とか入力するのがメンドクサイので10秒毎に勝手に"ft"か"pt" (public_timeline)を実行してくれるコマンドを追加してみました.Twitter::Shell::Shellにこんなパッチを充てています.

*** original    Fri Apr 20 18:44:44 2007
--- /usr/local/lib/perl5/site_perl/5.8.8/Twitter/Shell/Shell.pm Fri Apr 20 18:09:26 2007
***************
*** 6,11 ****
--- 6,12 ----
  package Twitter::Shell::Shell;
  use strict;
  use warnings;
+ no warnings qw(redefine);
  use base qw(Term::Shell);
  
  sub context { shift->_elem('context', @_) }
***************
*** 30,35 ****
--- 31,37 ----
      my $ret    = $c->$method(@_);
  
      if ($ret) {
+         print '-' x 60,"\n" if ($self->{API}{check_idle});
          print "$cmd ok\n\n";
      } else {
          print "Command $cmd failed :(\n\n";
***************
*** 88,93 ****
--- 90,96 ----
  sub help_friends_timeline {}
  
  *run_ft = \&run_friends_timeline;
+ 
  sub smry_ft { "alias to friends_timeline" }
  sub help_ft {}
  
***************
*** 124,127 ****
--- 127,156 ----
  sub smry_followers { "display followers' status" }
  sub help_followers {}
  
+ sub run_ftloop
+ {
+     my $self = shift;
+     $self->{API}{check_idle} = 10;
+     *idle = \&run_friends_timeline;
+ }
+ sub smry_ftloop { "loops friend_timeline every 10 seconds" }
+ sub help_ftloop {}
+ 
+ sub run_ptloop
+ {
+     my $self = shift;
+     $self->{API}{check_idle} = 10;
+     *idle = \&run_public_timeline;
+ }
+ sub smry_ptloop { "loops public_timeline every 10 seconds" }
+ sub help_ptloop {}
+ 
+ sub run_end
+ {
+     my $self = shift;
+     $self->{API}{check_idle} = 0;
+ }
+ sub smry_end {"end ftloop or ptloop" }
+ sub help_end {}
+ 
  1;

あれ,なんかゴミな空行が入ってる・・・ 本題に関係ないからいいや(笑.使ってみてると,たまにAPI叩くのに失敗しているようです.

おまけ

twittershellを使っていると,環境によっては日本語入力したときに文字化けします."?????"みたいな感じ.これは,Twitter::Shellが使ってるTerm::ReadLineのせいです.Term::ReadLine::Gnuをインストールして,正しく日本語表示ができるようにするとストレスフリーな世界に近寄ることができます.そうそう,Term::ReadLine::Gnuをインストールするためには,事前にreadlineライブラリをGNUがら落としてインストールする必要があります.んでもって,Term::ReadLineがTerm::ReadLine::Gnuを呼び出すためには,環境変数といてPERL_RLをGnuにセットする必要があります.

export PERL_RL=Gnu

こんな感じ.

追加(Apr 22 2007)

Intel MacOSX 10.4.9 でのTerm::ReadLine::Gnuインストールはうまくいってたんですが,ppc MacOSX 10.4.9でのインストールができません.

Failed Test  Stat Wstat Total Fail  List of Failed
-------------------------------------------------------------------------------
t/callback.t    2   512     7   12  2-7
t/history.t     2   512    82  162  2-82
t/readline.t    2   512   104  206  2-104
Failed 3/3 test scripts. 190/193 subtests failed.
Files=3, Tests=193,  0 wallclock secs ( 0.24 cusr +  0.08 csys =  0.32 CPU)
Failed 3/3 test programs. 190/193 subtests failed.
make: *** [test_dynamic] Error 2
  HAYASHI/Term-ReadLine-Gnu-1.16.tar.gz
  /usr/bin/make test -- NOT OK
Failed during this command:
 HAYASHI/Term-ReadLine-Gnu-1.16.tar.gz        : make_test NO

う〜ん,何だこりゃ