2023/06/18(日)2023年6月時点においてPerlで画像付きtweetするコード
「2022年にPerlで画像付きtweetするコード」というのを書いてあるのですが、こちらがTwitterの仕様変更で使えなくなったので2023年6月版を書きました。
重要ポイント
- Twitter API Ver. 1.1 で画像アップロードして media_id を受け取る
- 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 が参考になるかと思います。