如何使用spring-social从Facebook获取个人资料图片URL?

5
我使用 spring-social-facebook 来与 Graph API 进行交互(如果有关系,版本为 1.0.3.RELEASE)。
我找不到任何操作来检索个人资料的图像网址。我只找到返回字节数组的操作,它们对于实现来说并不是非常方便。
在 Spring Social 中是否存在可检索图像网址的操作?
如果没有,是否有任何“整洁”的解决方法?
谢谢!
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();
}

5
我刚遇到同样的问题,希望这能帮助其他人。
Connection<Facebook> connection = userConnectionRepository.findPrimaryConnection(Facebook.class);
connection.createData().getImageUrl()

1
不错,但是如果有一个更大的版本就太棒了。 - nilsi

0
你可以用以下方式获取缩略图:
"http://graph.facebook.com/" + fbUser.getId() + "/picture?type=square"

0
在社交API中,您只能获取图像二进制文件的能力:
byte[] profileImage = facebook.userOperations().getUserProfileImage(imageType);

要获取URL,您需要有一些自定义内容(如上面的帖子中提到的)。 我从Facebook Social API中取了一部分代码(请参阅Facebook模板源代码以获取fetchImage),以及以下实用类:
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();
    }
}

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