有人知道是否有可能从twitter api获得所有url照片吗?作为一个例子,这条推文有4张照片https://twitter.com/wtfbaile/status/652694439584993280/photo/1我想在twitter api的一个请求中获得所有4个url的照片。
目前,为了做到这一点,我必须做2个请求。这4张url图片只在第二次请求中可用。
第一个:
Link1
结果:{
"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"
}
}
第二个:
Link2
结果: {
"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!
}
}
}
我找到了我的问题的解决方案,我把它贴在这里给你。
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);
这是基于@afaraut的一个更简单的答案。
首先确保您使用的是twitter4j
的最新版本,在本例中是4.0.4
,以获取tweet中的所有图片,例如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();
}