7

有没有办法使用 JQuery 函数以编程方式为用户 Facebook 页面创建事件?我创建了一个应用程序,通过以下方式向用户询问 create_event 权限:

<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'">

它使用参数 access_token 和 expires_in 正确返回重定向页面。该页面使用以下代码来解析数据(不太优雅,但我只是想让它作为测试工作)

<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>

我还尝试使用 JQuery $.post 并手动输入 URL 以尝试创建此测试事件。这将返回:

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

我还尝试将 URL 修改为 /User ID/events 而不是 /me/events。Facebook 不断返回:

({
    "data": [

    ]
});

如果我从 URL 中删除“事件”,它会按预期访问用户信息。有谁知道我正在尝试做的事情是否真的可能?我觉得我错过了一些明显的东西。

4

2 回答 2

6

由于相同的来源策略( http://en.wikipedia.org/wiki/Same_origin_policy),调用 Graph API REST 函数并不能很好地用于纯 JQuery 。

使用 Facebook 提供的 JavaScript SDK 是一个更好的主意,它创建一个隐藏的 iframe 来在 facebook 域上执行任务并将事件传递回您的页面,非常好地为您处理所有身份验证和事件传递问题。

您可以在 facebook 开发者网站 ( http://developers.facebook.com/docs/reference/javascript/ ) 和此处 ( http://developers.facebook.com/tools/console/ )上找到代码示例、文档和片段

例如创建一个事件如下所示:

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); 
});
于 2011-06-08T13:56:43.140 回答
0

好吧,在查看您的代码后,我发现在 params 变量中您使用的是“accesstoken”,它应该是“access_token”。还可以使用 $.post 在 Facebook 上创建活动。还对“start_time”使用标准日期/时间格式。让我知道它是否有效。

于 2011-06-08T08:26:20.533 回答