Net::Twitterで作った簡易CGIを携帯向けに改良してみた
表示と実処理を分けた方がいいかなと思って作ったけど、実際その必要ないんじゃないかと思い直す。それにタイムラインとか見れた方が便利かなと思って改造してみた。オブジェクト指向な書き方を考えてたけど、今の自分のレベルじゃ意味がなさそうだったのでこちらは却下。
twitter.pl - まとめ版
#!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Carp qw(fatalsToBrowser); use Jcode; use Net::Twitter; my $twit = Net::Twitter->new( username=>"kulamochi", password=>"hogehoge" ); #APIでログイン my ($view, $tweet, $result); my $cgi = new CGI; if($cgi->param('tweet')){ $tweet = Jcode::convert($cgi->param('tweet'), 'utf8'); $result = $twit->update($tweet); } $view = ($cgi->param('v') ? $cgi->param('v') : 5 ); #TL表示件数をパラメータから取得 my $tl_ref = $twit->friends_timeline({count=>$view}); #APIでTLを取得 引数は件数 print $cgi->header(-charset=>'Shift_JIS'), $cgi->start_html('Net::Twitter'), $cgi->h1('Net::Twitter'), $cgi->h2('What are you doing?'), $cgi->start_form( -method=>"post", -action=>$ENV{'SCRIPT_NAME'} ), $cgi->textfield( -name=>"tweet", -maxlength=>"140" ), $cgi->hidden( -name=>"v", -value=>$view ), $cgi->submit( -name=>"submit", -value=>"tweet!" ), $cgi->endform; if($tl_ref){ print $cgi->h2('Timeline'); foreach my $hash_ref (@$tl_ref) { #TLを展開 my $text = Jcode->new($hash_ref->{'text'})->sjis; print $cgi->hr, $cgi->p($hash_ref->{'user'}{'screen_name'},":<br />", $text), } print $cgi->hr; } print $cgi->start_form( -method=>"post", -action=>$ENV{'SCRIPT_NAME'} ), "recent posts: ", $cgi->textfield( -name=>"v", -size=>"3", -value=>$view ), #TL表示件数設定 $cgi->submit( -name=>"submit", -value=>"modify" ), $cgi->endform, $cgi->end_html; exit;
まぁほとんどHTMLを描画してるだけなんだけどwタイムラインを取得するのに参考にさせていただいたのは前回に引続きこちら。
friends_timelineなどのメソッドにはリファレンスで値を渡さなければいけないということに気づかず小一時間ハマった。newの時は参考サイトどおりパラメータ指定できたのが不思議*1。
Please note that any method that takes a hashref as an argument must be called in the form:
$twit->method({arg => "value"}); and not $twit->method(arg => "value");If the curly brackets around the arguments are missing, the code which implements the convenience methods allowing you to specify a single argument as a string will interpret "arg" as your argument.
Net::Twitter - Perl interface to twitter.com - search.cpan.org
タイムラインの表示件数を設定できるようにしてみた。さて次の課題はログイン処理でUsernameとPasswordを取得してセッションに保存とかが出来ればいいかな。
簡単なことしかやってないと思うんだけど、なんかプログラミング面白い!
追記
使用携帯端末実機で文字化けしたので、出力部分をShift_JISに変更。(2009/5/26)