Net::Twitterで超簡単にPostしてみる

はじめに

PerlTwitterにPostする・各種情報の取得を行なうにはNet::Twitterモジュールが簡単です。

Net::TwitterCPANから取得できます。ただし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フラグについては
http://www.rwds.net/kuroita/program/Perl_unicode.html
で解りやすく説明してくれているので読んでおくと吉。

送信に対する結果と応答を取得する

送信に成功すると送信結果的なものが返ってきます。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ステータスコード」の部分に記載されています。送信失敗時にログとして保存する、などに利用できそうです。

送信編はここらへんにして、そのうち受信について書きます。