5

我使用spring-social-facebook与 Graph API(1.0.3.RELEASE,如果它是米特)进行交互。
而且我找不到任何操作来检索个人资料的图片网址。我发现只有返回字节数组的操作,它们对于实现不是很方便。
Spring Social 中是否存在任何类型的检索图像 url 的操作?
如果没有,是否有任何“整洁”的解决方法?
谢谢!

4

4 回答 4

8

最后,我在spring social中没有找到任何提及头像url
我的解决方案:
最初我计划扩展UserOperationsFacebokTemplate.userOperations)类并添加新方法。但它是一个包级别的类,在外面是不可见的。
所以我决定创建自己的模板类扩展FacebookTemplate并以这种方式实现该方法:

public String fetchPictureUrl(String userId, ImageType imageType) {
    URI uri = URIBuilder.fromUri(GRAPH_API_URL + userId + "/picture" +
            "?type=" + imageType.toString().toLowerCase() + "&redirect=false").build();

    JsonNode response = getRestTemplate().getForObject(uri, JsonNode.class);
    return response.get("data").get("url").getTextValue();
}
于 2014-02-13T16:26:29.223 回答
5

我刚遇到同样的问题,希望这对其他人有帮助

Connection<Facebook> connection = userConnectionRepository.findPrimaryConnection(Facebook.class);
connection.createData().getImageUrl()
于 2014-06-02T03:25:08.727 回答
0

你可以用这种方式拍摄微缩照片:

"http://graph.facebook.com/" + fbUser.getId() + "/picture?type=square"
于 2016-02-23T23:49:09.590 回答
0

在社交 API 中,您只能获取图像二进制文件:

byte[] profileImage = facebook.userOperations().getUserProfileImage(imageType);

要获取 URL,您需要进行一些自定义(如上面的帖子中所述)。我从 Facebook 社交 API(请参阅 fetchImage 的 Facebook 模板源代码)和以下实用程序类中获取了部分代码:

public final class FacebookUtils {

    private static final String PICTURE_PATH = "picture";

    private static final String TYPE_PARAMETER = "type";

    private static final String WIDTH_PARAMETER = "width";

    private static final String HEIGHT_PARAMETER = "height";

    private FacebookUtils() {
    }

    public static String getUserProfileImageUrl(Facebook facebook, String userId, String width, String height, ImageType imageType) {
        URIBuilder uriBuilder = URIBuilder.fromUri(facebook.getBaseGraphApiUrl() + userId + StringUtils.SLASH_CHARACTER + PICTURE_PATH);
        if (imageType != null) {
            uriBuilder.queryParam(TYPE_PARAMETER, imageType.toString().toLowerCase());
        }
        if (width != null) {
            uriBuilder.queryParam(WIDTH_PARAMETER, width.toString());
        }
        if (height != null) {
            uriBuilder.queryParam(HEIGHT_PARAMETER, height.toString());
        }
        URI uri = uriBuilder.build();
        return uri.toString();
    }
}
于 2018-05-25T10:36:07.507 回答