Twitter REST API をラッピングした Java 用ライブラリ Twitter4J で写真や画像の情報を取得する。
今回使ったライブラリは twitter4j-core-4.0.2.jar

投稿画像1枚、複数投稿画像、アニメーションGIFなツイートについて試してみる。

Twitter に投稿した画像の情報を Java + Twitter4J で取得する

画像の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 では取得できなかった。

参考資料

tags: twitter twitter4j java

Posted by NI-Lab. (@nilab)