2023/06/18(日)2023年6月時点においてPerlで画像付きtweetするコード

2022年にPerlで画像付きtweetするコード」というのを書いてあるのですが、こちらがTwitterの仕様変更で使えなくなったので2023年6月版を書きました。

重要ポイント

  1. Twitter API Ver. 1.1 で画像アップロードして media_id を受け取る
  2. Twitter API Ver. 2 で「1」で受け取った media_id をtweets APIで送る

中々変な仕様なのでそのうちTwitter側で変更が入るかもしれません(?)

PerlのCPANモジュール固有の注意点

  • Ver.2 に完全対応はしていないため、 api_version や api_ext のオプションを指定する必要がある
  • update メソッドは Ver.2 に対応していないので request という低レベルAPIでPOSTする必要がある
#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use Twitter::API;

my $twitter_v1_1 = Twitter::API->new_with_traits(
      api_version => '1.1',
      api_ext => '.json',
      traits => [qw/Migration ApiMethods RetryOnError/],
      consumer_key => 'xxx',
      consumer_secret => 'xxx',
      access_token => 'xxx',
      access_token_secret => 'xxx',
);

my $twitter_v2 = Twitter::API->new_with_traits(
    api_version => '2',
    api_ext => '',
    traits => [qw/RetryOnError/],
    consumer_key => 'xxx',
    consumer_secret => 'xxx',
    access_token => 'xxx',
    access_token_secret => 'xxx',
);

my $media = ['/nanka/tekitohna/filepath.png'];
my $ret = $twitter_v1_1->upload_media($media);
my $text = 'ツイートするテキスト';
$twitter_v2->request(post => 'tweets', { -to_json => { text => $text, media => { media_ids => [ $ret->{media_id_string} ] } } });

その他

Twitter APIのアクセス権限回りは https://www.zenryoku-kun.com/post/twitter-api が参考になるかと思います。