2011-06-07 14 views
7

¿Hay alguna manera de usar una función JQuery para crear un evento mediante programación en la página de Facebook de un usuario? He creado una aplicación que pide al usuario los permisos a través create_event:Crear un evento de Facebook usando JQuery y el gráfico api programáticamente

<input type="button" value="Add to Facebook" onclick="document.location='http://www.facebook.com/dialog/oauth?client_id=<AppID>&redirect_uri=<redirecturi>&scope=create_event,offline_access,manage_pages&response_type=token'"> 

que devuelve correctamente a la página de redirección con los parámetros señal_acceso y expires_in. La página utiliza el código siguiente para analizar los datos (menos elegantes, pero yo sólo estoy tratando de conseguir que esto funcione como una prueba)

<script> 

$(document).ready(function(){ 
    var url = window.location.href; 
    var fbParameters = url.substring(url.indexOf('#')+1,url.length); 
    var accesstoken;  

    if(fbParameters.indexOf("access_token=")>=0){ 
     accesstoken = fbParameters.substring(fbParameters.indexOf("access_token=")+("access_token=").length,fbParameters.length); 
     accesstoken=accesstoken.substring(0,accesstoken.indexOf('&')); 
     console.log(accesstoken); 
    } 

    var params = {'access_token':accesstoken,'name':'test','location':'someplace','start_time':'1322719200'} 

    $.getJSON('https://graph.facebook.com/me/events?callback=?',params,function(data){console.log(data)}); 

}); 

</script> 

También he intentado usar el jQuery $ .post y también manualmente ingresado en la URL para intentar crear este evento de prueba. Esto devuelve:

XMLHttpRequest cannot load https://graph.facebook.com/me/events?. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. 

También he intentado modificar la URL a/User ID/events en lugar de/me/events. Facebook sigue regresando:

({ 
    "data": [ 

    ] 
}); 

Si quito "eventos" de la URL, se accede a la información del usuario como se esperaba. ¿Alguien sabe si lo que estoy tratando de hacer es realmente posible? Siento que me falta algo obvio.

Respuesta

6

Llamar a las funciones REST de la API de gráficos no funciona bien con JQuery puro debido a la misma política de origen (http://en.wikipedia.org/wiki/Same_origin_policy).

Es una mejor idea usar el JavaScript SDK que proporciona Facebook, crea un iframe oculto para ejecutar tareas en el dominio de Facebook y devuelve los eventos a su página lidiando muy bien con todos los problemas de autenticación y aprobación de eventos tú.

Puede encontrar ejemplos de código, documentación y fragmentos en el sitio web facebook desarrollador (http://developers.facebook.com/docs/reference/javascript/) y aquí (http://developers.facebook.com/tools/console/)

Por ejemplo la creación de un evento parece:

var event = { 
    name: 'Name of your event', 
    description: 'Description of your event', 
    location: 'Location of event',       
    start_time: Math.round(new Date().getTime()/1000.0), // Example Start Date 
    end_time: Math.round(new Date().getTime()/1000.0)+86400 // Example End Date 
}; 

FB.api('/me/events', 'post', event, function (result) { 
    console.log(result); 
}); 
+0

No puede crear eventos a través de Graph API. ver https://developers.facebook.com/docs/graph-api/reference/event – Meekohi

0

Bien después de buscar en su código encontré que en la variable params está usando "accesstoken" que debería ser "access_token". También use $ .post para crear un evento en Facebook. También use el formato estándar de fecha/hora para "start_time". Déjame saber si funciona.

+0

El token de acceso era un error tipográfico Lo había copiado cuando me metía con diferentes formas de arreglarlo, en realidad lo tenía correcto la mayor parte del tiempo. Además, Facebook aceptará una variedad de entradas de tiempo de inicio/finalización y las convertirá correctamente. En mi publicación, describí cómo intenté usar tanto la publicación como getJSON en vano. El problema es que debes publicar un formulario en Facebook y tiene problemas con el mismo origen que se describe en la respuesta anterior. –

Cuestiones relacionadas