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?

Foi útil?

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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top