如何从Twitter API Java JSON获取所有的URL照片

3

有人知道通过Twitter API是否可以获取所有的URL照片吗?例如,这个推文有4张照片 https://twitter.com/wtfbaile/status/652694439584993280/photo/1。我想在一次Twitter API请求中获取所有4个URL照片。

目前,为了实现这一点,我必须进行两次请求。4个URL照片仅在第二个请求中可用。

第一个请求:

链接1

结果:

{
  "statuses": [
    {
      "metadata": {
        "result_type": "recent",
        "iso_language_code": "en"
      },
      "in_reply_to_status_id_str": null,
      "in_reply_to_status_id": null,
      "created_at": "Sat Oct 10 03:57:35 +0000 2015",
      "in_reply_to_user_id_str": null,
      "source": "<a href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\">Twitter for iPhone<\/a>",
      "retweet_count": 1,
      "retweeted": false,
      "geo": null,
      "in_reply_to_screen_name": null,
      "is_quote_status": false,
      "id_str": "652694439584993280",
      "in_reply_to_user_id": null,
      "favorite_count": 6,
      "id": 6.5269443958499e+17,
      "text": "some cool pictures from time square, brooklyn bridge and china town http:\/\/t.co\/kv0OVmoMoI",
      "place": null,
      "lang": "en",
      "favorited": false,
      "possibly_sensitive": false,
      "coordinates": null,
      "truncated": false,
      "entities": {
        "urls": [

        ],
        "hashtags": [

        ],
        "media": [
          {
            "display_url": "pic.twitter.com\/kv0OVmoMoI",
            "indices": [
              68,
              90
            ],
            "sizes": {
              "small": {
                "w": 340,
                "h": 191,
                "resize": "fit"
              },
              "large": {
                "w": 1024,
                "h": 576,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 600,
                "h": 337,
                "resize": "fit"
              }
            },
            "id_str": "652694417070006272",
            "expanded_url": "http:\/\/twitter.com\/wtfbaile\/status\/652694439584993280\/photo\/1",
            "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQ7WHTxWoAA8JXV.jpg",
            "id": 6.5269441707001e+17,
            "type": "photo",
            "media_url": "http:\/\/pbs.twimg.com\/media\/CQ7WHTxWoAA8JXV.jpg",
            "url": "http:\/\/t.co\/kv0OVmoMoI"
          }
        ],
        "user_mentions": [

        ],
        "symbols": [

        ]
      },
      "contributors": null,
      "user": {
        "utc_offset": -10800,
        "friends_count": 112,
        "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/652216850751688704\/kC7rdEm__normal.png",
        "listed_count": 3,
        "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000046929850\/8b7537e055b6c558c461f49cb1a3ad39.png",
        "default_profile_image": false,
        "favourites_count": 21009,
        "description": "?? | 121614 ?? | phs '18 | ig: wtfbaile",
        "created_at": "Sat Jun 30 02:41:11 +0000 2012",
        "is_translator": false,
        "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000046929850\/8b7537e055b6c558c461f49cb1a3ad39.png",
        "protected": false,
        "screen_name": "wtfbaile",
        "id_str": "622435883",
        "profile_link_color": "9266CC",
        "is_translation_enabled": false,
        "id": 622435883,
        "geo_enabled": true,
        "profile_background_color": "C0DEED",
        "lang": "en",
        "has_extended_profile": true,
        "profile_sidebar_border_color": "FFFFFF",
        "profile_text_color": "333333",
        "verified": false,
        "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/652216850751688704\/kC7rdEm__normal.png",
        "time_zone": "Atlantic Time (Canada)",
        "url": null,
        "contributors_enabled": false,
        "profile_background_tile": true,
        "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/622435883\/1444187766",
        "entities": {
          "description": {
            "urls": [

            ]
          }
        },
        "statuses_count": 67181,
        "follow_request_sent": false,
        "followers_count": 600,
        "profile_use_background_image": true,
        "default_profile": false,
        "following": false,
        "name": "baile",
        "location": "410",
        "profile_sidebar_fill_color": "DDEEF6",
        "notifications": false
      }
    }
  ],
  "search_metadata": {
    "max_id_str": "652694439584993280",
    "since_id_str": "0",
    "query": "some+cool+pictures+from+time+square%2C+brooklyn+bridge+and+china+town+filter%3Aimages+exclude%3Aretweets",
    "count": 100,
    "max_id": 6.5269443958499e+17,
    "since_id": 0,
    "completed_in": 0.027,
    "refresh_url": "?since_id=652694439584993280&q=some%20cool%20pictures%20from%20time%20square%2C%20brooklyn%20bridge%20and%20china%20town%20filter%3Aimages%20exclude%3Aretweets&include_entities=1"
  }
}

第二个:

链接2

结果:

    {
  "possibly_sensitive_appealable": false,
  "extended_entities": {
    "media": [
      {
        "display_url": "pic.twitter.com\/kv0OVmoMoI",
        "indices": [
          68,
          90
        ],
        "sizes": {
          "small": {
            "w": 340,
            "h": 191,
            "resize": "fit"
          },
          "large": {
            "w": 1024,
            "h": 576,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "medium": {
            "w": 600,
            "h": 337,
            "resize": "fit"
          }
        },
        "id_str": "652694417070006272",
        "expanded_url": "http:\/\/twitter.com\/wtfbaile\/status\/652694439584993280\/photo\/1",
        "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQ7WHTxWoAA8JXV.jpg",
        "id": 6.5269441707001e+17,
        "type": "photo",
        "media_url": "http:\/\/pbs.twimg.com\/media\/CQ7WHTxWoAA8JXV.jpg",
        "url": "http:\/\/t.co\/kv0OVmoMoI"
      },
      {
        "display_url": "pic.twitter.com\/kv0OVmoMoI",
        "indices": [
          68,
          90
        ],
        "sizes": {
          "small": {
            "w": 340,
            "h": 255,
            "resize": "fit"
          },
          "large": {
            "w": 1024,
            "h": 768,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "medium": {
            "w": 600,
            "h": 450,
            "resize": "fit"
          }
        },
        "id_str": "652694417128747008",
        "expanded_url": "http:\/\/twitter.com\/wtfbaile\/status\/652694439584993280\/photo\/1",
        "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQ7WHT_W8AAgwUB.jpg",
        "id": 6.5269441712875e+17,
        "type": "photo",
        "media_url": "http:\/\/pbs.twimg.com\/media\/CQ7WHT_W8AAgwUB.jpg",
        "url": "http:\/\/t.co\/kv0OVmoMoI"
      },
      {
        "display_url": "pic.twitter.com\/kv0OVmoMoI",
        "indices": [
          68,
          90
        ],
        "sizes": {
          "small": {
            "w": 340,
            "h": 255,
            "resize": "fit"
          },
          "large": {
            "w": 1024,
            "h": 768,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "medium": {
            "w": 600,
            "h": 450,
            "resize": "fit"
          }
        },
        "id_str": "652694417195827200",
        "expanded_url": "http:\/\/twitter.com\/wtfbaile\/status\/652694439584993280\/photo\/1",
        "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQ7WHUPWgAA14SE.jpg",
        "id": 6.5269441719583e+17,
        "type": "photo",
        "media_url": "http:\/\/pbs.twimg.com\/media\/CQ7WHUPWgAA14SE.jpg",
        "url": "http:\/\/t.co\/kv0OVmoMoI"
      },
      {
        "display_url": "pic.twitter.com\/kv0OVmoMoI",
        "indices": [
          68,
          90
        ],
        "sizes": {
          "small": {
            "w": 340,
            "h": 605,
            "resize": "fit"
          },
          "large": {
            "w": 575,
            "h": 1024,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "medium": {
            "w": 575,
            "h": 1024,
            "resize": "fit"
          }
        },
        "id_str": "652694417208385536",
        "expanded_url": "http:\/\/twitter.com\/wtfbaile\/status\/652694439584993280\/photo\/1",
        "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQ7WHUSWIAAP9Ue.jpg",
        "id": 6.5269441720839e+17,
        "type": "photo",
        "media_url": "http:\/\/pbs.twimg.com\/media\/CQ7WHUSWIAAP9Ue.jpg",
        "url": "http:\/\/t.co\/kv0OVmoMoI"
      }
    ]
  },
  "in_reply_to_status_id_str": null,
  "in_reply_to_status_id": null,
  "created_at": "Sat Oct 10 03:57:35 +0000 2015",
  "in_reply_to_user_id_str": null,
  "source": "<a href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\">Twitter for iPhone<\/a>",
  "retweet_count": 1,
  "retweeted": false,
  "geo": null,
  "in_reply_to_screen_name": null,
  "is_quote_status": false,
  "id_str": "652694439584993280",
  "in_reply_to_user_id": null,
  "favorite_count": 6,
  "id": 6.5269443958499e+17,
  "text": "some cool pictures from time square, brooklyn bridge and china town http:\/\/t.co\/kv0OVmoMoI",
  "place": null,
  "lang": "en",
  "favorited": false,
  "possibly_sensitive": false,
  "coordinates": null,
  "truncated": false,
  "entities": {
    "urls": [

    ],
    "hashtags": [

    ],
    "media": [
      {
        "display_url": "pic.twitter.com\/kv0OVmoMoI",
        "indices": [
          68,
          90
        ],
        "sizes": {
          "small": {
            "w": 340,
            "h": 191,
            "resize": "fit"
          },
          "large": {
            "w": 1024,
            "h": 576,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "medium": {
            "w": 600,
            "h": 337,
            "resize": "fit"
          }
        },
        "id_str": "652694417070006272",
        "expanded_url": "http:\/\/twitter.com\/wtfbaile\/status\/652694439584993280\/photo\/1",
        "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQ7WHTxWoAA8JXV.jpg",
        "id": 6.5269441707001e+17,
        "type": "photo",
        "media_url": "http:\/\/pbs.twimg.com\/media\/CQ7WHTxWoAA8JXV.jpg",
        "url": "http:\/\/t.co\/kv0OVmoMoI"
      }
    ],
    "user_mentions": [

    ],
    "symbols": [

    ]
  },
  "contributors": null,
  "user": {
    "utc_offset": -10800,
    "friends_count": 112,
    "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/652216850751688704\/kC7rdEm__normal.png",
    "listed_count": 3,
    "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000046929850\/8b7537e055b6c558c461f49cb1a3ad39.png",
    "default_profile_image": false,
    "favourites_count": 21009,
    "description": "?? | 121614 ?? | phs '18 | ig: wtfbaile",
    "created_at": "Sat Jun 30 02:41:11 +0000 2012",
    "is_translator": false,
    "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000046929850\/8b7537e055b6c558c461f49cb1a3ad39.png",
    "protected": false,
    "screen_name": "wtfbaile",
    "id_str": "622435883",
    "profile_link_color": "9266CC",
    "is_translation_enabled": false,
    "id": 622435883,
    "geo_enabled": true,
    "profile_background_color": "C0DEED",
    "lang": "en",
    "has_extended_profile": true,
    "profile_sidebar_border_color": "FFFFFF",
    "profile_text_color": "333333",
    "verified": false,
    "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/652216850751688704\/kC7rdEm__normal.png",
    "time_zone": "Atlantic Time (Canada)",
    "url": null,
    "contributors_enabled": false,
    "profile_background_tile": true,
    "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/622435883\/1444187766",
    "entities": {
      "description": {
        "urls": [

        ]
      }
    },
    "statuses_count": 67181,
    "follow_request_sent": false,
    "followers_count": 600,
    "profile_use_background_image": true,
    "default_profile": false,
    "following": false,
    "name": "baile",
    "location": "410",
    "profile_sidebar_fill_color": "DDEEF6",
    "notifications": false
  }
}

我也尝试了使用twitter4j,但是也不起作用..我只能得到第一个URL的照片! 也许我做错了什么! 如果有人能帮助我!

public static void main(String[] args) throws Exception {
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
                .setOAuthConsumerKey(TwitterConstantes.APIKEY)
                .setOAuthConsumerSecret(TwitterConstantes.APIKEYSECRET)
                .setOAuthAccessToken(TwitterConstantes.TOKEN)
                .setOAuthAccessTokenSecret(TwitterConstantes.TOKENSECRET);
        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();
        Query query = new Query("some cool pictures from time square, brooklyn bridge and china town");
        QueryResult result = twitter.search(query);
        System.out.println(result);
        for (Status status : result.getTweets()) {
            MediaEntity[] media = status.getMediaEntities(); //get the media entities from the status
            for(MediaEntity m : media){ //search trough the entities
                System.out.println(m.getMediaURL()); //get your url!
            }
        }
}

2
Twitter4j 怎么样? - Mounir Elfassi
我现在还没有尝试过,但我会去检查它的!谢谢 :) 希望这对你有所帮助。 - afaraut
我尝试了twitter4j,但是也不起作用..我只得到了第一个URL的照片!可能是我的操作有误!如果有人能帮助我就好了! - afaraut
2个回答

5

我找到了解决方案并在这里向你们发布。 希望对其他遇到同样问题的人有所帮助。

        ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
            .setOAuthConsumerKey(TwitterConstantes.APIKEY)
            .setOAuthConsumerSecret(TwitterConstantes.APIKEYSECRET)
            .setOAuthAccessToken(TwitterConstantes.TOKEN)
            .setOAuthAccessTokenSecret(TwitterConstantes.TOKENSECRET);

    TwitterFactory tf = new TwitterFactory(cb.build());
    Twitter twitter = tf.getInstance();
    double res = 5;

    //Query query = new Query(this.text);
    Query query = new Query().geoCode(new GeoLocation(latitude,longitude), res, Query.KILOMETERS.toString()); 
    query.setResultType(Query.RECENT); // get the recent tweets
    query.count(100);
    QueryResult result = twitter.search(query);
    do {

        for (Status tweet : result.getTweets()) {
            //if (tweet.isRetweet()){continue;}         
            try {
                Status tweetById = twitter.showStatus(tweet.getId());
                String url= "https://twitter.com/" + tweetById.getUser().getScreenName() 
                        + "/status/" + tweetById.getId();

                List<String> hashtags =  new ArrayList<String>();
                HashtagEntity[] hashtagsEntities = tweetById.getHashtagEntities();
                for (HashtagEntity hashtag : hashtagsEntities){
                    System.out.println(hashtag.getText());
                }

                ExtendedMediaEntity[] medias = tweetById.getExtendedMediaEntities();
                for (ExtendedMediaEntity m : medias){
                    System.out.println(m.getMediaURL());    
                }

            } catch (TwitterException e) {
                System.err.print("Failed to search tweets: " + e.getMessage());
                return;
            }
        }
        query = result.nextQuery();
        if(query!=null){
            result = twitter.search(query);
        }

    }while(query!=null);

1
这是基于@afaraut的努力得出的简单答案。
首先确保您使用的是最新版本的twitter4j,在这种情况下是4.0.4,例如获取推文中的所有图片tweetID ="652694439584993280":
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
        .setOAuthConsumerKey(TwitterConstantes.APIKEY)
        .setOAuthConsumerSecret(TwitterConstantes.APIKEYSECRET)
        .setOAuthAccessToken(TwitterConstantes.TOKEN)
        .setOAuthAccessTokenSecret(TwitterConstantes.TOKENSECRET);
    TwitterFactory tf = new TwitterFactory(cb.build());
    Twitter twitter = tf.getInstance();

    String tweetID ="652694439584993280";
    try {
        twitter4j.Status sts = twitter.showStatus(Long.parseLong(tweetID));
        ExtendedMediaEntity[] medias = sts.getExtendedMediaEntities(); //get the media entities from the status
        for(ExtendedMediaEntity m : medias){ //search trough your entities
            System.out.println("this is a pic","  " +m.getMediaURL());
        }
    } catch (TwitterException e) {
        e.printStackTrace();
    }

是的,谢谢,这个很好用!但是在获取tweetID之前,您必须执行一个请求。 关于twitter4j版本,我有4.0.4。 - afaraut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接