Criação de evento no Facebook com uma imagem via Spring social
-
27-10-2019 - |
Pergunta
Analisando a API social do Facebook da primavera, EventOperations oferece
createEvent(java.lang.String name, java.lang.String startTime,
java.lang.String endTime)
para postar eventos no Facebook.
Existe uma maneira de postar mais informações sobre o evento, como imagem e descrição do evento?
Solução
Olhando para o método createEvent
, ele não suporta atualmente o anexo (imagem do evento). No entanto, ele chama GraphApi publish
para realmente publicar o evento:
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 (...) em si (que é implementado em FacebookTemplate ) suportaria qualquer coisa como um par {chave, valor} que o Facebook está pronto para aceitar, já que apenas delega para o RestTemplate e alimenta todos os pares {chave, valor} para o Facebook por meio de um HTTP POST regular:
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");
}
Portanto, você pode estender o EventTemplate e adicionar outro método createEvent
, que levaria um image name
e um image file path
e o adicionaria como um {key, value} adicional um MultiMap data
:
data.set( "@" + imageName, "@" + imagePath )
Portanto, o método seria semelhante a:
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);
}
Isso obviamente não inclui qualquer validação possível que você queira fazer, etc. Assim que tiver feito isso, o que parece ser bastante simples, você pode doar / contribuir de volta para Spring Social=> eles ficarão muito satisfeitos :)
Outras dicas
Embora a resposta fornecida estivesse possivelmente correta na época, hoje em dia ela é enganosa e errada.Desde a v2.1 em diante, você não pode fazer CRIAR / ATUALIZAR / EXCLUIR de eventos via API.
https://developers.facebook.com/docs/graph-api/reference/v2.1/event/