[Perl] Perlからツイッターにつぶやく (Twitter API v1.1対応)

訳あってPerlからツイッターにつぶやきをPOSTする必要が生じ、大昔に書いたサンプルコードを引っ張り出して動かしてみたもののエラーでうまく動かない…。

調べてみたところ最近Twitter API v1.1なるものが導入されていてエンドポイントや認証方式が変わった模様。軽く仕様を眺めてみたところ一から実装するのは骨が折れそうだったので、ググッてみたところCPANで公開されている「Net::Twitter::Lite」モジュールに含まれる「Net::Twitter::Lite::WithAPIv1_1」は使えそうだったので試してみるとあっさり動いてくれました。

use strict;
use utf8;
use Encode;
use Net::Twitter::Lite::WithAPIv1_1;

my $nt = Net::Twitter::Lite::WithAPIv1_1->new(
    consumer_key        => '(consumer_key)',
    consumer_secret     => '(consumer_secret)',
    access_token        => '(access_token)',
    access_token_secret => '(access_token_secret)',
    ssl => 1,
);

# つぶやきだけの場合
eval {
    $nt->update('あいうえお');
};
die $@ if $@;

# 画像付きでつぶやく場合
my $file = "test.jpg";
my $content = do {
    open my $fh, '<:bytes', $file or die "$!: $file";
    local $/;
    <$fh>;
};
my $filename = "test.jpg";

eval {
    $nt->update_with_media('あいうえお', [ undef, $filename, Content_Type => 'image/jpeg', Content => $content ])
};
die $@ if $@;

exit;

Net::Twitter::LiteはPurePerlなモジュールなので導入も楽チン。レンタルサーバでもuse libで動作します。

ただ内部でLWP::UserAgentを内製してenv_proxyを呼んでいるので、企業などプロキシ経由のアクセスが必要な環境から利用する場合などは若干対応を練る必要がありそうです。Web::ScraperのようにこちらからUAを渡せる作りだと個人的には有難いんですけどね。

    このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。

    reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

    頂戴したコメントは管理者に承認されるまで表示されません。また、メールアドレスが公開されることはありません。
    このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。