2016-05-10 18 views
4

Postオブジェクトには、getPicture()プロパティがあります。これには、非常に小さい(130×130)イメージへのURLが含まれています。春のソーシャルFacebook:投稿から大きな写真を取得するには?

Facebookの投稿の大きな画像を取得するにはどうすればよいですか?

サンプルURL:

https://scontent.xx.fbcdn.net/v/t1.0-0/s130x130/13173717_10209376327474891_7842199861010585961_n.jpg?oh=d244df2db666e1d3be73cb7b76060337&oe=57A64C44

それはそれは新しいグラフAPIで動作しませんので、URLにs130x130を交換するためには役立ちません。

私はgraphApi.mediaOperations()を使用しようとしましたが、postIdを受け入れる方法はありません。そこgraphApi.mediaOperations().getPhotos(objectID)があるが、このオブジェクトIDはマニュアルに従ってALBUMIDまたはユーザーIDである必要があり、このメソッドは例外をスロー:

org.springframework.social.UncategorizedApiException: (#100) Tried accessing nonexisting field (photos) on node type (Photo)

編集:私は働く何かを見つけた:

byte[] photo = graphApi.mediaOperations().getAlbumImage(post.getObjectId(), ImageType.NORMAL);

今、私はURLの代わりにバイト[]を取得するので、今どこかにイメージを格納する必要があります:(

+0

FeedOperations()で問題を解決しましたか? –

答えて

-1

はImageType.NORMALの代わりにImageType.LARGEを使用します それはCustomMultipartFileを返します

+0

どうすればfacebook.feedOperations()を取得できますか?それは小さな絵だけを返すからです。 ImageTypeを設定するオプションはありません。 Mavenの \t \t \t org.springframework.social \t \t \t 春-社会のFacebook \t \t \t 2.0.3.RELEASE \t \t

+0

@AwanishKumarあなたは問題を解決しましたか?私は今同じことに直面している。 –

+0

ImageTypeはSpringソーシャルのFacebook APIの列挙型です。 その他の参照先:http://cleanbugs.com/item/412720/spring-social-how-get-big-photo-from-post-to-facebook.html –

0

私はSpring Socialフレームワークを使用してFacebook投稿のfull_pictureをフェッチする直接的な方法を取得できませんでした。 FacebookのグラフAPIを使って完全な画像を取得しました。参照用のコードを追加しています。必要に応じてカスタマイズする必要があります。

FacebookTemplate facebook = new FacebookTemplate("<fb 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", "likes.limit(1).summary(true)" }; 

URIBuilder uriBuilder = URIBuilder.fromUri(facebook.getBaseGraphApiUrl() + request.getAccountId() + "/posts"); 
uriBuilder = uriBuilder.queryParam("limit", String.valueOf(request.getRecordCount())); 
uriBuilder.queryParam("fields", org.springframework.util.StringUtils.arrayToCommaDelimitedString(ALL_POST_FIELDS)); 
URI uri = uriBuilder.build(); 
LOGGER.info("facebook URL :{} ", uri); 
JsonNode jsonNode = (JsonNode) facebook.getRestTemplate().getForObject(uri, JsonNode.class); 
LOGGER.debug("facebook URL :{}, response: {} ", uri, jsonNode); 
// you can cast jsonnode as required into your format or below line can be used to cast into PagedList<Post> format 
PagedList<Post> posts = new DeserializingPosts().deserializeList(jsonNode, null, Post.class, true); 

jsonNodeコードを必要な形式にキャストします。またはクラスを使用してPagedList<Post>にキャストすることもできます。

@Component 
public class DeserializingPosts extends AbstractOAuth2ApiBinding { 

    private ObjectMapper objectMapper = new ObjectMapper(); 

    private static final Logger LOGGER = Logger.getLogger(DeserializingPosts.class); 

    public <T> PagedList<T> deserializeList(JsonNode jsonNode, String postType, Class<T> type, boolean accountFlag) { 
     JsonNode dataNode = jsonNode.get("data"); 
     return deserializeList(dataNode, postType, type); 
    } 


    public <T> PagedList<T> deserializeList(JsonNode jsonNode, String postType, Class<T> type) { 
     List posts = new ArrayList(); 
     for (Iterator iterator = jsonNode.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); 
    } 


    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.getMessage(), 
        shouldntHappen); 
     } 
    } 

    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) { 
       LOGGER.error("Error occured while determining post type: " + e.getMessage(), e); 
       return "post"; 
      } 
     } 
     return "post"; 
    } 

} 
関連する問題