Получение событий страницы Facebook исключительно через JavaScript SDK для всех пользователей, включая тех, кто не вошел в Facebook - PullRequest
2 голосов
/ 06 марта 2012

Я работаю над тем, чтобы включить список событий, размещенных на странице Facebook на моем веб-сайте. Загвоздка в том, что я пытаюсь найти чисто клиентский JavaScript способ сделать это. Я не могу использовать PHP. Я могу использовать ASP.NET, но я борюсь с серьезным отсутствием документации Facebook C # SDK. Однако у меня есть почти идеальная реализация того, что я хочу сделать в JavaScript:

(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=MY_APP_ID";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

$(document).ready(function(){

FB.init({ 
    appId: 'MY_APP_ID',cookie: true,xfbml: true,status: true });
    var token;
    FB.getLoginStatus(function (response) {
        if (response.authResponse) {
        token = response.authResponse.accessToken;

        // Get and parse list of upcoming events
        $.getJSON("https://graph.facebook.com/mypagename/events?access_token="+token+"&callback=?",function(json){
            for (item in json.data) {
                $("#eventsFromFacebook").append('<h3><a href="https://www.facebook.com/events/' +json.data[item].id +'/">' +json.data[item].name + '</a></h3>');
                $("#eventsFromFacebook").append('<strong>' +json.data[item].start_time +'</strong>');
                getItemDescription(json.data[item].id);     
                $("#eventsFromFacebook").append("<div id='event"+json.data[item].id+"'></div>");
            }
        });

        // Get and parse event descriptions. This is a separate call for each event.
        function getItemDescription(id) {
            $.getJSON("https://graph.facebook.com/"+id+"?access_token="+token+"&callback=?",function(jsonItem) {
            $("#event"+id).html('<p>' +jsonItem.description+'</p>');
            });
        }

        } else {
            // not logged in
            $("#eventsFromFacebook").append("Not getting access to Facebook :(");
        }
    });
});

(для этого требуется FB JS SDK, jQuery и следующий HTML:)

<div id="eventsFromFacebook"></div>

Таким образом, этот код успешно извлекает события, опубликованные на определенной странице администратора, и публикует их на своем веб-сайте, при условии, что я вошел в Facebook с использованием учетной записи, подключенной к приложению и странице. Однако, если я не вошел в систему как пользователь, прошедший проверку подлинности в моем приложении, я не смогу получить правильный доступ, чтобы сделать это.

Существует ли чисто JavaScript-способ, позволяющий мне получить токен доступа, который мне нужен для получения информации о событии со страницы , когда я не вошел в систему ? Я не хочу требовать, чтобы пользователи проходили аутентификацию с моим приложением на моем веб-сайте, чтобы иметь возможность просматривать информацию. В идеале я хотел бы, чтобы они могли видеть список событий, не входя ни в какую учетную запись Facebook. Это возможно?

Если это невозможно, как запасной вариант, будет ли способ позволить пользователям, которым понравилась Страница (без аутентификации в приложении), по крайней мере, видеть события? Таким образом, по крайней мере, я могу добавить ссылку на свою страницу в Facebook в случае, если кто-то не вошел в Facebook (или дать им стимул понравиться Странице).

Спасибо.

1 Ответ

2 голосов
/ 07 марта 2012

Существует ли чисто JavaScript-способ, позволяющий мне получить токен доступа, необходимый для получения информации о событии со страницы, когда я не вошел в систему?Я не хочу требовать, чтобы пользователи проходили аутентификацию в моем приложении на моем веб-сайте, чтобы иметь возможность просматривать информациюВ идеале я хотел бы, чтобы они могли видеть список событий, не входя ни в какую учетную запись Facebook.Возможно ли это?

Да, это будет возможно, ОДНАКО не рекомендуется, поскольку вы будете выставлять токен доступа к странице на стороне клиента.

Сначала вы получите пользователя-администратора.токен доступа пользователя.Затем продлите его до 60 дней.Затем HTTP Get to me/accounts/PAGEID?fields=access_token&access_token=60DayUserAccessToken и захватите этот токен доступа (должен быть 60-дневный вариант, если нет, позвоните, чтобы расширить его).Используйте этот токен доступа на стороне клиента (ewe !! нехорошо выставлять это !!) для захвата событий страницы с помощью me/events?access_token=60DayPageAccessToken.Затем каждые 59 дней или около того вам нужно будет генерировать новый 60-дневный токен доступа, который будет включен в ваш JavaScript (пожалуйста, не делайте этого, поскольку выставление вашего токена доступа действительно очень плохо).

...