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);
}
}
-
ref.
- Twitter4J - A Java library for the Twitter API
- Twitter4Jで画像をアップロード | ぜんのホームページ
- Twitter4Jで複数の画像をアップロードしてツイートする方法 - Qiita
tags: twitter4j twitter java
Posted by NI-Lab. (@nilab)