Pregunta

Al revisar la API social de Facebook de primavera, EventOperations ofrece

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

para publicar eventos en Facebook.

¿Hay alguna forma de publicar más información sobre el evento, como la imagen y la descripción del evento?

¿Fue útil?

Solución

Mirando a createEvent método, actualmente no admite el archivo adjunto (imagen del evento).Sin embargo, llama a GraphApi publish para publicar realmente el 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(...) en sí (que se implementa en Plantilla de Facebook ) apoyaría cualquier cosa como un par {clave,valor} que Facebook está listo para aceptar, ya que simplemente delega en RestTemplate y envía todos los pares {clave,valor} a Facebook a través de una POST HTTP normal:

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");
}

Por lo tanto se puede extender el Plantilla de evento y agrega otro createEvent método, eso tomaría un image name y un image file path, y lo agregaría como una {clave,valor} adicional a un data Mapa múltiple:

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

Por lo tanto, el método se parecería 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);
}

Por supuesto, esto no incluye ninguna posible validación que desee realizar, etc.Una vez que tengas esto funcionando, lo cual parece bastante sencillo, puedes donarlo/contribuirlo nuevamente a Spring Social => estarían muy contentos :)

Otros consejos

Aunque la respuesta proporcionada era posiblemente correcta en ese momento, hoy en día esta respuesta es engañosa y incorrecta.Desde v2.1 en adelante, no puede hacer CREAR / ACTUALIZAR / ELIMINAR de eventos a través de API.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top