Java + Twitter4J で、 Twitter に画像を投稿するサンプルを書いてみた。

こんな感じでツイートされる。

Java + Twitter4J で、 Twitter に画像をアップロードするサンプル

動作環境: Java 7 + twitter4j-core-4.0.2.jar

サンプルコード。


import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
 
import twitter4j.StatusUpdate;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.conf.ConfigurationBuilder;
 
public class TwitterImagePost {
 
  public static void main(String[] args) throws Exception {
 
    // Twitter オブジェクトを生成
    String twitter_consumerKey = "XXXXXXXXXXXXXXXXXXXXX";
    String twitter_consumerSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    String twitter_token = "XXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    String twitter_tokenSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    Twitter t = getTwitter(
      twitter_consumerKey, twitter_consumerSecret,
      twitter_token, twitter_tokenSecret);
 
    // ツイートするテキストや画像などの情報
    String status = "Hello, こんにちは。";
    String imageUrl = "http://www.nilab.info/buzztubeimage/logo.png";
    String imageName = "hello.jpg";
    String imageFormatName = "jpg";
 
    // 画像を準備
    BufferedImage image = ImageIO.read(new URL(imageUrl));
    effectImage(image, status); // サンプルなので適当に加工
 
    // 画像の InputStream オブジェクトを生成
    InputStream mediaBody = createInputStream(image, imageFormatName);
 
    // 画像を添付してツイート
    tweet(t, status, imageName, mediaBody);
  }
 
  private static Twitter getTwitter(
    String consumerKey, String consumerSecret,
    String accessToken, String accessTokenSecret) {
 
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setOAuthConsumerKey(consumerKey)
      .setOAuthConsumerSecret(consumerSecret)
      .setOAuthAccessToken(accessToken)
      .setOAuthAccessTokenSecret(accessTokenSecret);
    TwitterFactory factory = new TwitterFactory(cb.build());
    AccessToken token = new AccessToken(accessToken, accessTokenSecret);
    Twitter twitter = factory.getInstance(token);
    return twitter;
  }
 
  private static void effectImage(BufferedImage image, String text) {
    Graphics2D g = image.createGraphics();
    g.drawString(text, 0, image.getHeight());
    g.dispose();
  }
 
  private static InputStream createInputStream(
    BufferedImage image, String formatName) throws IOException {
 
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(image, formatName, baos);
    InputStream is = new ByteArrayInputStream(baos.toByteArray());
    return is;
  }
 
  private static void tweet(
    Twitter t, String status,
    String mediaName, InputStream mediaBody) throws TwitterException {
 
    StatusUpdate su = new StatusUpdate(status);
    su.media(mediaName, mediaBody);
    t.updateStatus(su);
  }
}

tags: twitter4j twitter java

Posted by NI-Lab. (@nilab)