Программно создать событие Facebook с помощью JQuery и графического API

Есть ли способ использовать функцию 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-адреса, он получит доступ к пользовательской информации, как и ожидалось. Кто-нибудь знает, возможно ли то, что я пытаюсь сделать? Я чувствую, что упускаю что-то очевидное.


person Sam Johnson    schedule 07.06.2011    source источник


Ответы (2)


Вызов функций REST Graph API не очень хорошо работает с чистым JQuery из-за той же политики происхождения (http://en.wikipedia.org/wiki/Same_origin_policy).

Лучше использовать JavaScript SDK, который предоставляет Facebook, он создает скрытый 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); 
});
person CameraSchoolDropout    schedule 08.06.2011
comment
Вы не можете создавать события через Graph API. см. developers.facebook.com/docs/graph-api/reference/event - person Meekohi; 26.07.2017

После изучения вашего кода я обнаружил, что в переменной params вы используете «accesstoken», который должен быть «access_token». Также используйте $ .post для создания события на Facebook. Также используйте стандартный формат даты / времени для start_time. Сообщите мне, если это сработает.

person Rohit Singh Sengar    schedule 08.06.2011
comment
Токен доступа был опечаткой, которую я скопировал, когда возился с различными способами его исправления, и на самом деле большую часть времени я исправлял его. Кроме того, facebook принимает различные записи времени начала / окончания и преобразует их правильно. В своем посте я описал, как безуспешно пытался использовать как post, так и getJSON. Проблема на самом деле в том, что вы должны опубликовать форму в Facebook, и у нее есть проблемы с тем же происхождением, что описано в ответе выше. - person Sam Johnson; 09.06.2011