【Lifehacks】Twitterに投稿する
■タスク
ファイルに記述したメッセージをTwitterに投稿する。
■背景
・マイクロブログサービス「Twitter」では、各種機能をAPIとして公開しています。APIはREST形式WebAPIのため、簡単に利用することができます。そこでごく初歩的な投稿プログラムを作成してみました。
・Net::Twitterモジュールを使えば数行で書けますが、Twitter APIの理解を目的として生APIを使用します。
■仕様
・OAuth認証はまだ不安定なので、ベーシック認証を使用。
・入力ファイルの文字コードはShift_JISとします。
・メッセージの長さチェックは特にしていません。
■使用方法
> perl SgPostTwitter.pl < Input.txt > Result.txt
■プログラム
# # SgPostTwitter.pl # Twitterに投稿する。 # # Author: Orihika Ikuo # Create: 2009.06.17 # Update: 2009.XX.XX # ##### Pragma use strict; use warnings; use Encode; use LWP::UserAgent; use URI; use URI::Escape; use URI::Escape qw/uri_escape_utf8/; ##### Setting our $USR = "XXXXXXXX"; our $PWD = "XXXXXXXX"; our $UA_NAME = "SgPostTwitter/1.0 "; our $KEEP_ALIVE = 4; our $URI = "http://twitter.com/statuses/update.xml"; our $ENC_SJIS = ':encoding(shiftjis)'; our $ENC_UTF8 = ':encoding(utf8)'; ##### Constant our $RET_SUCCESS = "RET: Success."; our $RET_FAILURE = "RET: Failure."; ##### Main routine &main(); sub main { my $ua; my $req; my $res; my $line; my $msg = ""; # 入出力文字コードを設定 binmode STDIN, $ENC_SJIS; binmode STDOUT, $ENC_UTF8; # メッセージを標準入力から読み込み while ($line = <STDIN>) { $msg .= $line; } # 投稿の準備 $ua = LWP::UserAgent->new( agent => $UA_NAME, keep_alive => $KEEP_ALIVE ); $req = HTTP::Request->new(POST => $URI); $req->authorization_basic($USR, $PWD); $req->content("status=" . uri_escape_utf8($msg)); # 投稿の実行 $res = $ua->request($req); # 返信を標準出力に出力 if ($res->is_success) { print $RET_SUCCESS, "\n"; print $res->content, "\n"; print "\n"; } else { print $RET_FAILURE, "\n"; print $res->status_line, "\n"; print "\n"; } }