1

當我執行下面的代碼時,我只得到小圖片。春季社交Facebook |從feedOperations獲得大的照片

PagingParameters recordCount = new PagingParameters(2000, null, null, null); 
PagedList<Post> posts = facebook.feedOperations().getPosts(recordCount); 

Maven的版本:

<dependency 
<groupId>org.springframework.social</groupId> 
<artifactId>spring-social-facebook</artifactId> <version>2.0.3.RELEASE</version> 
</dependency> 

我們怎樣才能把飼料操作的全貌。這有什麼選擇嗎?

+0

春實社會|從用戶信息或頁面獲取完整圖片。 –

回答

0

我分析了這個問題的批次和發佈解決方案,因爲其他人可以從中獲得幫助。它返回完整的圖片作爲可以使用post.getExtraData()。get(「full_picture」)獲取的帖子的額外數據的一部分。代碼快照如下

public PagedList<Post> getPostByAccountId(final String accountId) { 
    LOGGER.debug("facebook accountId: ", accountId); 
    FacebookTemplate facebook = new FacebookTemplate("<access token>"); 

    String[] ALL_POST_FIELDS = { "id", "actions", "admin_creator", "application", "caption", "created_time", "description", "from", "icon", "is_hidden", "is_published", 
      "link", "message", "message_tags", "name", "object_id", "picture", "full_picture", "place", "privacy", "properties", "source", "status_type", "story", "to", 
      "type", "updated_time", "with_tags", "shares" }; 

    URIBuilder uriBuilder = URIBuilder.fromUri(facebook.getBaseGraphApiUrl() + "me/posts"); 
    uriBuilder = uriBuilder.queryParam("limit", String.valueOf(2000)); 
    uriBuilder.queryParam("fields", org.springframework.util.StringUtils.arrayToCommaDelimitedString(ALL_POST_FIELDS)); 
    URI uri = uriBuilder.build(); 

    JsonNode jsonNode = (JsonNode) facebook.getRestTemplate().getForObject(uri, JsonNode.class); 
    PagedList<Post> posts = new DeserializingPosts().deserializeList(jsonNode, null, Post.class); 
    return posts; 
} 

從帖子中獲取full_picture。

String picture = post.getPicture(); 
picture = post.getExtraData().get("full_picture") != null ? post.getExtraData().get("full_picture").toString() : picture; 

deserializingObject類的細節:

public class DeserializingPosts extends AbstractOAuth2ApiBinding { 

private ObjectMapper objectMapper = new ObjectMapper(); 

/** 
* 
* @param jsonNode 
* @param postType 
* @param type 
* @return 
*/ 
public <T> PagedList<T> deserializeList(JsonNode jsonNode, String postType, Class<T> type) { 
    JsonNode dataNode = jsonNode.get("data"); 
    List posts = new ArrayList(); 
    for (Iterator iterator = dataNode.iterator(); iterator.hasNext();) { 
     posts.add(deserializePost(postType, type, (ObjectNode) iterator.next())); 
    } 
    if (jsonNode.has("paging")) { 
     JsonNode pagingNode = jsonNode.get("paging"); 
     PagingParameters previousPage = PagedListUtils.getPagedListParameters(pagingNode, "previous"); 
     PagingParameters nextPage = PagedListUtils.getPagedListParameters(pagingNode, "next"); 
     return new PagedList(posts, previousPage, nextPage); 
    } 

    return new PagedList(posts, null, null); 
} 

/** 
* 
* @param postType 
* @param type 
* @param node 
* @return 
*/ 
public <T> T deserializePost(String postType, Class<T> type, ObjectNode node) { 
    try { 
     if (postType == null) { 
      postType = determinePostType(node); 
     } 

     node.put("postType", postType); 
     node.put("type", postType); 
     MappingJackson2HttpMessageConverter converter = super.getJsonMessageConverter(); 
     this.objectMapper = new ObjectMapper(); 
     this.objectMapper.registerModule(new FacebookModule()); 
     converter.setObjectMapper(this.objectMapper); 
     return this.objectMapper.reader(type).readValue(node.toString()); 
    } catch (IOException shouldntHappen) { 
     throw new UncategorizedApiException("facebook", "Error deserializing " + postType + " post", shouldntHappen); 
    } 
} 

/** 
* 
* @param node 
* @return 
*/ 
private String determinePostType(ObjectNode node) { 
    if (node.has("type")) { 
     try { 
      String type = node.get("type").textValue(); 
      Post.PostType.valueOf(type.toUpperCase()); 
      return type; 
     } catch (IllegalArgumentException e) { 
      return "post"; 
     } 
    } 
    return "post"; 
} 

}