Twitter4Jで複数の画像をアップロードしてツイートする方法

  • 29
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

CoreTweetの某wikiページ の Twitter4J 版です。

Twitter4J は 5 月末に公開された複数画像投稿及びそのエンティティのパースにいち早く対応しました。

詳しくはこちらを参照してください: Multiple Media Entities in Statuses | Twitter Developers

複数の画像をアップロードしてツイートする

まずは添付したい画像をアップロードしていきます。アップロードには Twitter.uploadMedia を使用します。

UploadedMedia media1 = twitter.uploadMedia(new File(path1));
UploadedMedia media2 = twitter.uploadMedia(new File(path2));

画像のアップロードが完了したら、あとはツイートするだけです。なお、アップロードが完了してから 1 時間以内にツイートしないと Twitter 上から削除されてしまうので注意して下さい。

StatusUpdate update = new StatusUpdate("Multiple World!");
update.setMediaIds(new long[2]{media1.getMediaId(), media2.getMediaId()});
Status status = twitter.updateStatus(update);

setMediaIds() のパラメータに long 配列を指定すると画像とツイートが関連付けられ、晴れて複数画像投稿ができました!
この方法で 1 - 28(#1) 枚の画像を添付することができます。

詳しくはリポジトリのexamplesを見てください。

#1: 確かに ここ には "up to a maximum of 28" と書いてあるんですが実際には5枚以上は拒否されたという情報もあります。公式アプリやWeb版Twitterが4枚までしか添付できないのできっとドキュメントが間違ってるのでしょう。

複数の画像が添付されたツイートを処理する

1つだけ画像が添付されているツイートは、今まで通り status.getMediaEntities で画像の情報を取得することができます。

複数の画像が添付されている場合は、status.getMediaEntities に加え、status.getExtendedMediaEntities に MediaEntity の配列が入っています。
つまり、status.getExtendedMediaEntities の配列の要素数が2以上かどうかで、画像が複数添付されているかどうかが判別できます。

※画像が1枚だけ添付されている場合でも status.getExtendedMediaEntities が設定される場合があるので注意してください。

Twitter4Jのどのバージョンを使えばいいの?

EntitiySupport#getExtendedMediaEntities と Twitter#uploadMedia は Twitter4J 4.0.2 からサポート されるようです されました。Twitter4J 4.0.2 以降をお使いください。

2014/6/23現在は SNAPSHOT 版で対応されていますが複数画像が投稿できないバグがあるので、パッチがマージされるまでは 下記の jar を使ってください。

https://dl.dropboxusercontent.com/u/166906/twitter4j-core-4.0.2-SNAPSHOT-takke-20140624.zip
※(2014/6/24) Java SDK 1.5 ビルド版に差し替えました