Reputation: 1542
Looking over the spring social facebook api, EventOperations offers
createEvent(java.lang.String name, java.lang.String startTime,
java.lang.String endTime)
to post Events to facebook.
Is there a way to post more information for the event, like event image and event description?
Upvotes: 0
Views: 1465
Reputation: 1079
Although answer provided was possibly correct at the time, nowadays this answer is misleading and wrong. Since v2.1 onwards you can't do CREATE/UPDATE/DELETE of Events via API.
https://developers.facebook.com/docs/graph-api/reference/v2.1/event/
Upvotes: 0
Reputation: 22549
Looking at createEvent
method, it does not currently support the attachment (event image). It does however call into GraphApi publish
to actually publish the event:
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(...) itself ( which is implemented in FacebookTemplate ) would support anything as a {key,value} pair that Facebook is ready to accept, as it just delegates to the RestTemplate, and feeds all the {key,value} pairs to Facebook through a regular HTTP POST:
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");
}
Hence you can extend the EventTemplate and add another createEvent
method, that would take an image name
and an image file path
, and would added it as an additional {key,value} to a data
MultiMap:
data.set( "@" + imageName, "@" + imagePath )
Hence the method would look close to:
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);
}
This of course does not include any possible validation that you might want to do, etc.. Once you have this working, which seems to be pretty straightforward, you can donate / contribute it back to Spring Social => they'd be very pleased :)
Upvotes: 3