画像アップロードAPIを使って投稿してみる

新しく、Twitterで正式に画像アップロードのAPIが提供されたそうで。
POST statuses/update_with_media (deprecated) | Twitter Developers


早速使ってみた。

"pic.twitter.com/*******"というURLで投稿され、それぞれのTweet URLでそのまま画像が見える。逆に未対応のクライアントソフトだと画像付きTweetだと認識してもらえずちょっと不便だったり…


各言語のライブラリ側での対応もまだ少し時間はかかりそう。"multipart/form-data"で送らないといけない、ということでOAuth headerだけつけてリクエストは自前で生成して投げてみた。

#!/usr/bin/env perl
use strict;
use warnings;

use utf8;
use Encode 'encode_utf8';
use Config::Pit;
use Furl;
use HTTP::Request::Common;
use OAuth::Lite::Consumer;

my $config = pit_get('twitter.com', require => {
    consumer_key        => 'consumer_key',
    consumer_secret     => 'consumer_secret',
    access_token        => 'access_token',
    access_token_secret => 'access_token_secret',
});
my $consumer = OAuth::Lite::Consumer->new(
    consumer_key    => $config->{consumer_key},
    consumer_secret => $config->{consumer_secret},
);

my $uri = 'https://upload.twitter.com/1/statuses/update_with_media.json';
my $req = POST $uri,
    Content_type  => 'form-data',
    Authorization => $consumer->gen_auth_header('POST', $uri, +{
        token => OAuth::Lite::Token->new(
            token  => $config->{access_token},
            secret => $config->{access_token_secret},
        ),
    }),
    Content => [
        status    => encode_utf8('APIから画像あげてみるテスト'),
        'media[]' => [ '/Users/sugyan/Pictures/icon-large.png' ]
    ];
my $res = Furl->new->request($req);
if ($res->is_success) {
    print $res->content, "\n";
}

これくらいのコードで出来ました。