通过Spring社交创建带有图像的Facebook活动

时间:2011-10-20 03:16:33

标签: java facebook-graph-api spring-social

查看春季社交facebook api,EventOperations提供

    createEvent(java.lang.String name, java.lang.String startTime, 
                                                      java.lang.String endTime)

将活动发布到Facebook。

有没有办法发布事件的更多信息,比如事件图像和事件描述?

2 个答案:

答案 0 :(得分:3)

查看createEvent方法,它目前不支持附件(事件图像)。但它会调用GraphApi publish来实际发布事件:

public String createEvent(String name, String startTime, String endTime) {
    requireAuthorization();
    MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>();
    data.set("name", name);
    data.set("start_time", startTime);
    data.set("end_time", endTime);
    return graphApi.publish("me", "events", data);
}

graphApi。publish(...)本身(在FacebookTemplate中实现)将支持任何作为Facebook准备好的{key,value}对接受,因为它只是委托给RestTemplate,并通过常规HTTP POST将所有{key,value}对提供给Facebook:

public String publish(String objectId, String connectionType, MultiValueMap<String, Object> data) {
    MultiValueMap<String, Object> requestData = new LinkedMultiValueMap<String, Object>(data);
    URI uri = URIBuilder.fromUri(GRAPH_API_URL + objectId + "/" + connectionType).build();
    Map<String, Object> response = getRestTemplate().postForObject(uri, requestData, Map.class);
    return (String) response.get("id");
}

因此,您可以扩展EventTemplate并添加另一个createEvent方法,该方法需要image nameimage file path,并将其添加为额外的{key,值}到data MultiMap:

data.set( "@" + imageName, "@" + imagePath )

因此该方法看起来很接近:

public String createEvent( String name, 
                           String startTime, 
                           String endTime,
                           String imageName,
                           String imagePath ) {   // or maybe even "File image", where you would derive the path
    requireAuthorization();
    MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>();
    data.set("name", name);
    data.set("start_time", startTime);
    data.set("end_time", endTime);

    data.set( "@" + imageName, "@" + imagePath );  // <<< adding this line

    return graphApi.publish("me", "events", data);
}

这当然不包括您可能想要做的任何可能的验证等。 一旦你有了这个工作,这看起来非常简单,你可以捐赠/贡献给Spring Social =&gt;他们会很高兴:)。

答案 1 :(得分:0)

虽然当时提供的答案可能是正确的,但现在这个答案是误导和错误的。从v2.1起,您无法通过API执行事件的创建/更新/删除

https://developers.facebook.com/docs/graph-api/reference/v2.1/event/