2008-04-17
■[perl][twitterbot]Net::Twitterで超簡単にPostしてみる
はじめに
PerlでTwitterにPostする・各種情報の取得を行なうにはNet::Twitterモジュールが簡単です。
Net::TwitterはCPANから取得できます。ただしNet::Twitterを利用するにはLWP::UserAgentとJSON::Anyをあらかじめインストール(これもCPANで取得できる)しておく必要があります。
基本的な使い方:送信編
use Net::Twitter; use Encode; use encoding 'UTF-8', STDOUT => 'cp932'; my $tw = Net::Twitter->new( username=>"YourTwitterName", password=>"YourTwitterPassword" ); $status = "テスト送信"; utf8::encode($status); my $result = $tw->update($status); if($result != undef){ # 送信成功した場合はupdateした内容が$resultに格納される } else{ # 送信失敗 }
Net::Twitter->new()でユーザ名・パスワードを設定。他にもクライアント名などが設定できますが今回はパス。
あとはupdateメソッドを使って送信。これだけ。必要あれば送信結果も取得できます。
送信文字コードについて
Twitterに送信する文字コードはUTF8ですので、内部文字コードもUTF8に。ソースもUTF8とかにしとくといいです。
ってことでutf8::encodeを利用してUTF8フラグを除去した上でTwitterに送信します。こうしないと化けるというか正常なPostができません。
(試しにutf8::encode()をコメントアウトして送信してみればいいですね)
UTF8やUTF8フラグについては
で解りやすく説明してくれているので読んでおくと吉。
送信に対する結果と応答を取得する
送信に成功すると送信結果的なものが返ってきます。Dumperを利用して表示させると
use Data::Dumper;
if($result != undef){
print Dumper($result);
}
↓
$VAR1 = {
'source' => 'Perl Net::Twitter',
'in_reply_to' => undef,
'truncated' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ),
'created_at' => 'Thu Apr 17 12:34:56 +0000 2008',
'text' => "\x{30c6}\x{30b9}\x{30c8}\x{9001}\x{4fe1}",
'in_reply_to_user_id' => undef,
'user' => {
'location' => '',
'followers_count' => 0,
'protected' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ),
'profile_image_url' => 'http://static.twitter.com/images/default_profile_normal.png’,
'name' => 'YourTwitterName',
'description' => '',
'url' => undef,
'id' => 00000000,
'screen_name' => 'YourTwitterName'
},
'id' => 000000000
};
statusID/update日時などが返ってきますので
if($result != undef){ $create_at = $result->{'created_at'}; $id = $result->{'id'}; }
こんな感じで取得。
また、送信結果のステータスコード・ステータス文字列もhttp_code・http_messageメソッドで取得できます。正常に送信できると「200/OK」が返ります。
$http_code = $tw->http_code();
$http_message = $tw->http_message();
たとえばユーザ名・パスワードに不一致が発生すると「401/Unauthorized」が返ってきます。このステータスコード/文字列の説明は
[観] Twitter API 仕様書 (勝手に日本語訳シリーズ)
の仕様の「HTTPステータスコード」の部分に記載されています。送信失敗時にログとして保存する、などに利用できそうです。
送信編はここらへんにして、そのうち受信について書きます。