Twitter REST API をラッピングした Java 用ライブラリ Twitter4J で写真や画像の情報を取得する。
今回使ったライブラリは twitter4j-core-4.0.2.jar
投稿画像1枚、複数投稿画像、アニメーションGIFなツイートについて試してみる。
画像のURL (media_url) の後に、コロン「:」+「large」と付けると大きいサイズの画像をゲットできたりして便利。
サンプルコード
import java.util.Map;
import twitter4j.MediaEntity;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.conf.ConfigurationBuilder;
public class TwitterMediaInformation {
public static void main(String[] args) {
// Twitter
try{
String consumerKey = "XXXXX";
String consumerSecret = "XXXXX";
String accessToken = "XXXXX";
String accessTokenSecret = "XXXXX";
Twitter t = getTwitter(consumerKey, consumerSecret, accessToken, accessTokenSecret);
System.out.println("************************************************************");
printMediaInformation(t, "475840770877173760");
System.out.println("************************************************************");
printMediaInformation(t, "489610352506580993");
System.out.println("************************************************************");
printMediaInformation(t, "489617828610199554");
}catch(Exception e){
e.printStackTrace();
}
}
private static void printMediaInformation(Twitter t, String statusId) {
try{
Status status = t.showStatus(Long.parseLong(statusId));
System.out.println("ツイート: " + status.getText());
MediaEntity[] me = status.getExtendedMediaEntities();
for(int i=0; i<me.length; i++){
System.out.println("画像" + (i + 1) + "枚目");
MediaEntity m = me[i];
System.out.println("getId=" + m.getId());
System.out.println("getMediaURL=" + m.getMediaURL());
System.out.println("getDisplayURL=" + m.getDisplayURL());
System.out.println("getExpandedURL=" + m.getExpandedURL());
System.out.println("getURL=" + m.getURL());
System.out.println("type=" + m.getType());
System.out.println("getSizes=[");
Map<Integer,MediaEntity.Size> sizes = m.getSizes();
for (Map.Entry<Integer,MediaEntity.Size> e: sizes.entrySet()){
Integer sizeKey = e.getKey();
MediaEntity.Size size = e.getValue();
System.out.println(
getSizeString(sizeKey) +
": getWidth=" + size.getWidth() +
", getHeight=" + size.getHeight() +
", getResize=" + getResizeString(size.getResize()) +
", MediaURL=" + getSizeMediaURL(m.getMediaURL(), getSizeString(sizeKey))
);
}
System.out.println("]");
}
}catch(TwitterException te){
te.printStackTrace();
}
}
private static String getSizeString(Integer sizeKey){
if(MediaEntity.Size.LARGE.equals(sizeKey)){ return "large";
}else if(MediaEntity.Size.MEDIUM.equals(sizeKey)){ return "medium";
}else if(MediaEntity.Size.SMALL.equals(sizeKey)){ return "small";
}else if(MediaEntity.Size.THUMB.equals(sizeKey)){ return "thumb";
}else { return "";
}
}
private static String getResizeString(int resize){
switch(resize){
case MediaEntity.Size.FIT: return "FIT";
case MediaEntity.Size.CROP: return "CROP";
default: return "";
}
}
/**
* ref. Entities in Twitter Objects | Twitter Developers
* https://dev.twitter.com/docs/entities
*/
private static String getSizeMediaURL(String mediaUrl, String sizeString){
return mediaUrl + ":" + sizeString;
}
private static Twitter getTwitter(String consumerKey, String consumerSecret, String accessToken, String accessTokenSecret){
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.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;
}
}
出力結果
************************************************************
ツイート: キッズスペースのあるオシャレなカフェでランチ。 (@ CAFE FAMIGLIA) https://t.co/palXBFdwua http://t.co/Spe6hSjLrg
画像1枚目
getId=475840770717798400
getMediaURL=http://pbs.twimg.com/media/BpqGqOxIUAAtfag.jpg
getDisplayURL=pic.twitter.com/Spe6hSjLrg
getExpandedURL=http://twitter.com/nilab/status/475840770877173760/photo/1
getURL=http://t.co/Spe6hSjLrg
type=photo
getSizes=[
thumb: getWidth=150, getHeight=150, getResize=CROP, MediaURL=http://pbs.twimg.com/media/BpqGqOxIUAAtfag.jpg:thumb
small: getWidth=340, getHeight=255, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BpqGqOxIUAAtfag.jpg:small
medium: getWidth=600, getHeight=450, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BpqGqOxIUAAtfag.jpg:medium
large: getWidth=960, getHeight=720, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BpqGqOxIUAAtfag.jpg:large
]
************************************************************
ツイート: 複数画像アップロードのテスト。 http://t.co/f5w9GqGJTi
画像1枚目
getId=489610350531051522
getMediaURL=http://pbs.twimg.com/media/BstyBQ3CAAISTAC.png
getDisplayURL=pic.twitter.com/f5w9GqGJTi
getExpandedURL=http://twitter.com/nilab/status/489610352506580993/photo/1
getURL=http://t.co/f5w9GqGJTi
type=photo
getSizes=[
thumb: getWidth=150, getHeight=150, getResize=CROP, MediaURL=http://pbs.twimg.com/media/BstyBQ3CAAISTAC.png:thumb
small: getWidth=320, getHeight=568, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BstyBQ3CAAISTAC.png:small
medium: getWidth=320, getHeight=568, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BstyBQ3CAAISTAC.png:medium
large: getWidth=320, getHeight=568, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BstyBQ3CAAISTAC.png:large
]
画像2枚目
getId=489610351596433409
getMediaURL=http://pbs.twimg.com/media/BstyBU1CcAEdQhm.jpg
getDisplayURL=pic.twitter.com/f5w9GqGJTi
getExpandedURL=http://twitter.com/nilab/status/489610352506580993/photo/1
getURL=http://t.co/f5w9GqGJTi
type=photo
getSizes=[
thumb: getWidth=150, getHeight=150, getResize=CROP, MediaURL=http://pbs.twimg.com/media/BstyBU1CcAEdQhm.jpg:thumb
small: getWidth=320, getHeight=568, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BstyBU1CcAEdQhm.jpg:small
medium: getWidth=320, getHeight=568, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BstyBU1CcAEdQhm.jpg:medium
large: getWidth=320, getHeight=568, getResize=FIT, MediaURL=http://pbs.twimg.com/media/BstyBU1CcAEdQhm.jpg:large
]
************************************************************
ツイート: アニメーションGIFを投稿してみるテスト。 http://t.co/c6c6KXFxGs
JPEGとPNG画像は情報取得可能。1ツイートに複数枚投稿された画像にも対応してる。アニメーションGIF画像は media entity では取得できなかった。
参考資料
-
ref.
- MediaEntity (Twitter4J)
- GET statuses/show/:id | Twitter Developers
- Entities in Twitter Objects | Twitter Developers
tags: twitter twitter4j java
Posted by NI-Lab. (@nilab)