добавление информации о событиях в профиль facebook со стороннего веб-сайта

Я пытаюсь добавить информацию о событиях в профиль пользователей facebook со стороннего веб-сайта, используя Javascript SDK, предоставленный facebook. Я только что погуглил несколько уроков, и я получил эти ссылки

http://thinkdiff.net/facebook/graph-api-javascript-base-facebook-connect-tutorial/

http://www.masteringapi.com/tutorials/how-to-ask-for-extended-permission-in-your-facebook-application/32/

http://www.masteringapi.com/tutorials/how-to-create-facebook-events-using-graph-api/49/#using_the_js-sdk

Я пробовал с комбинацией входа в систему и сеанса обработки

это код, который я запускаю только для того, чтобы проверить, работает он или нет.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>

<div id="fb-root"></div>

<script type="text/javascript">
window.fbAsyncInit = function()
{
    FB.init({
        appId: '207712505927107', 
        status: true, 
        cookie: true, 
        xfbml: true
    });

    /* All the events registered */
    FB.Event.subscribe('auth.login', function(response) {
    // do something with response
        login();
    });

    FB.Event.subscribe('auth.logout', function(response) {
        // do something with response
        logout();
    });

    FB.getLoginStatus(function(response)
    {
        if (response.session)
        {
            // logged in and connected user, someone you know
            login();
        }
    });
};

(function() 
{
    var e = document.createElement('script');
    e.type = 'text/javascript';
    e.src = document.location.protocol
            + '//connect.facebook.net/en_US/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
}());

function login()
{
    FB.api('/me', function(response)
    {
        document.getElementById('login').style.display = "block";

        var loggedInMessage = response.name + " successfully logged in!";
        document.getElementById('login').innerHTML = loggedInMessage;
    });
}

function logout()
{
    document.getElementById('login').style.display = "none";
}

//addevent to facebook profile 

function addevents()
{
    FB.api('/me/events', 'post', {
        name:          "JS-SDK Event",
        start_time:    1272718027,
        location:      "Beirut",
        privacy_type:  "OPEN"
    }, function(resp) {
        alert(resp.id);
    });
}
</script>

<p>
    <fb:login-button
        autologoutlink="true" 
        perms="email,user_birthday,status_update,publish_stream,create_event">
    </fb:login-button>
</p>

<p>
    <a href="#" onclick="addevents(); return false;">Add Events</a>
</p>

<br />
<br />
<br />
<br />

<div id="login" style ="display:none"></div>
<div id="name"></div>

</body>
</html>

Когда я нажимаю на страницу добавления события, я получаю «неопределенное». Я не могу добавлять события в профиль facebook. Пожалуйста, помогите мне


person Jeevan Dongre    schedule 03.05.2011    source источник


Ответы (2)


Я бы попробовал ваш код еще раз и, возможно, console.log(resp) в вашем методе обратного вызова для функции addevents. Я протестировал ваш код на fbrell.com, и он работал отлично, как и ожидалось.

изменить: после небольшого исследования (и вашего исправленного кода..) я обнаружил, что кнопка fb:login не гарантирует, что ваше приложение имеет правильные разрешения, запрашиваемые параметром perms. Мы обнаруживаем это, когда делаем запрос Graph, и он терпит неудачу. Итак, мы ловим ошибку, а затем запускаем модальное окно входа с помощью метода FB.login и запрашиваем разрешение create_event. Когда пользователь принимает этот диалог, мы повторяем попытку создания события.

<fb:login-button
    autologoutlink="true" 
    perms="email,user_birthday,status_update,publish_stream,create_event">
</fb:login-button>
<a href="#" id="create_event" onclick="create_event();">create</a>

<script>
FB.XFBML.parse();
document.getElementById('create_event').onclick = function() { create_event(); }
function create_event()
{
    FB.api('/me/events', 'post', {
        name:          "JS-SDK Event",
        start_time:    1272718027,
        location:      "Anywhere USA",
        privacy_type:  "OPEN"
    }, function(resp) {

        if (typeof resp.error != 'undefined')
        { /*this failed. most likely because we don't have the extended permission
            for create_event. so lets check for it, ask for it, and try to create
            the event again.  but first, we'll make sure that the error message says
            something about 'create_event' so we don't launch an infinite loop
          */
            if (resp.error.message.match(/create_event/))
            {
                FB.login(function(response)
                {
                    if (response.session 
                        && response.status == 'connected' 
                        && response.perms.match(/create_event/))
                    {
                        //this user is connected & we have create event permission.
                        create_event();
                    }
                },
                {
                    perms: 'create_event'
                });
            }
        }    
    });
}
</script>

Рабочий код на fbrell.com: http://fbrell.com/saved/17c7b60eab91e6736a2a10c87d53c5b8

person Jim Rubenstein    schedule 04.05.2011
comment
эй, спасибо, но я понял проблему, я размещаю ее ниже в качестве ответа, который вы можете посмотреть. - person Jeevan Dongre; 04.05.2011

person    schedule
comment
Таким образом, кнопка входа не подтверждает, что у вас есть запрашиваемые разрешения, а только то, что вы вошли в систему. Это то, что я вижу? если да, я добавлю это к своему ответу, чтобы он был завершен. - person Jim Rubenstein; 04.05.2011
comment
да, именно JIMR, даже я был в замешательстве, спасибо всем блоггерам по всему миру, блоги более информативны, чем документация на Facebook. !!! Спасибо за помощь!!! - person Jeevan Dongre; 05.05.2011