отображать мои каналы из facebook на моей веб-странице с помощью javascript api?

Я пытаюсь получить всю ленту с моей страницы в Facebook с помощью javascript api. У кого-нибудь есть рабочий пример?

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

Любой вклад действительно ценится. Спасибо!

У меня есть этот код:


Редактировать

Хорошо, у меня есть код внутри кода инициализации, как показано ниже, и он не работает, он не выполняет код, и я не получаю ошибок:

<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '<%=facebookAppId%>', // App ID
            channelUrl : 'www.mypage.se/channel.html', // Channel File
            status     : true, // check login status
            cookie     : true, // enable cookies to allow the server to access the session
            xfbml      : true,  // parse XFBML
            oauth      : true
        });

        // get the wall - feed
var page_id = '<%=facebookPageId%>';
    FB.api('/' + page_id, {fields: 'access_token'}, function(resp2) {
        if(resp2.access_token) {
            alert(resp2.access_token);


 FB.api('/page id/feed?access_token='+resp2.access_token, function(response) {

    var ul = document.getElementById('feed');
    for (var i=0, l=response.data.length; i<l; i++) {

      var
      feed = response.data[i],
      li = document.createElement('li'),
      a = document.createElement('a');
      a.innerHTML = feed.message;
      a.href = feed.link;
      li.appendChild(a);
      ul.appendChild(li);
                       }
            });
        }
    }); 

 };//end window.fbAsyncInit

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));


</script>
  1. Итак, почему я могу, например: FB.api('/facebook id', function(response) { alert('Ваше имя ' + response.name); }); внутри кода инициализации, а не другого кода?

  2. Мне все еще нужна помощь по структуре, чтобы написать обратные вызовы на странице, чтобы она выглядела хорошо, как на Facebook. Люблю выписывать "сообщение, картинку, ссылку, имя" а может еще что-то?

  3. Как я тестирую, чтобы получить сообщения в этом примере, и некоторые из обратных вызовов отображаются как «неопределенные» на странице? Означает ли это, что сообщение не имеет значения, когда я его получаю? Если да, то как я могу не выписывать пустые значения - неопределенные?

Спасибо!

ОБНОВИТЬ:

Если я использую этот код, он читает ленту, но только если я вошел в Facebook? Я начинаю путаться, так как думаю, что приведенный выше код должен работать: я сначала запрашиваю токен доступа в первом вызове, а когда я получаю токен доступа, то использую его во втором вызове, что я делаю неправильно?

FB.api('/my userid or pageid/feed?access_token=the acces token that I get from the Graph API Explorer', {limit:5} , function(response){
       if (response && response.data && response.data.length){
            alert(response.message);
            var ul = document.getElementById('feed');
          for (var j=0; j<response.data.length; j++){
            var feed = response.data[j],
            li = document.createElement('li'),
             a = document.createElement('a');
            a.innerHTML = feed.message;
            a.href = feed.link;
            li.appendChild(a);
            ul.appendChild(li);
          }
        }
      });
  1. Я получаю пару неопределенных ответов, как я могу не написать их на странице?
  2. Как я могу заставить приведенный выше код работать, даже если пользователь, посещающий веб-страницу, не вошел в систему на Facebook?
  3. Я делаю другие звонки, которые получают фотографии альбома без проблем с отображением их на веб-странице, я не понимаю, почему это отличается?
  4. Если я хочу настроить это для клиента (когда все будет готово), какие шаги мне нужно предпринять? Немного запутался... :-)
  5. Я хотел бы получить сообщение, изображение, лайки и т. д. вместе со звонком и отобразить его, как на стене новостей, какие-либо предложения здесь?

Хорошо, наконец-то у меня все заработало :-) Я получил правильный токен доступа и теперь могу отображать каналы. Я получил правильный токен здесь: https://graph.facebook.com/oauth/access_token?client_id=myapp_id&client_secret=myapp_secret&grant_type=client_credentials Теперь я могу использовать приведенный ниже код как для получения фидов пользователей, так и фидов страниц, просто изменив page_id!

var page_id = '<%=facebookPageId%>';
var pageaccessToken='xxxxxxxxxxxxxxxxxxxxxxxxxx';
FB.api('/' + page_id + '/feed?access_token='+ pageaccessToken, {limit:5} , function(response){
       if (response && response.data && response.data.length){

            var ul = document.getElementById('pagefeed');
          for (var j=0; j<response.data.length; j++){
            var feed = response.data[j],
            li = document.createElement('li'),
             a = document.createElement('a');
            a.innerHTML = feed.message;
            a.href = feed.link;
            li.appendChild(a);
            ul.appendChild(li);
          }
        }
      });

Хорошо, теперь это работает, но я получаю в ответ undefined? Что вызывает это, потому что это пустое значение, которое я получаю в ответе? Что сделать, чтобы он не отображался на странице?


person Claes Gustavsson    schedule 12.03.2012    source источник
comment
У вас есть разрешение read_stream?   -  person Nitzan Tomer    schedule 12.03.2012


Ответы (1)


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

Начнем с того, что вам не нужны какие-либо специальные разрешения или токен доступа к странице для запроса ленты страниц, она общедоступна и все, что вам нужно (процитировано из документации): "любой действительный токен доступа или пользовательский токен доступа". Это означает, что если пользователь авторизовал ваше приложение, вы затем приобрели для него токен доступа и можете получать любую страницу. Например, попробуйте фид страниц южного парка в Graph API Explorer. .

Другая проблема заключается в том, что запрашивать у пользователя разрешение «manage_pages», а затем запрашивать у API графа маркер доступа вашего собственного приложения, не получится. Когда пользователь предоставляет вашему приложению управление своими страницами, вы получаете именно это, разрешения на свои страницы и, например, такой запрос: /southpark?feilds=access_token не даст вам токен, поскольку вы не являетесь администратором этой страницы (даже если вы предоставите приложению разрешение «manage_pages»).

Последнее, что нужно сделать, это использовать window.onload, который в вашей ситуации просто не решает проблему. Вы не хотите выполнять этот код при загрузке окна, но когда загружается и инициализируется facebook sdk. Вот почему facebook говорит вам использовать событие fbAsyncInit. Код, который у вас был до window.onload, является правильной формой. Что именно вы имеете в виду, когда говорите «это не сработало»? Вы получили какие-либо ошибки? Его не казнили?


Редактировать

Насколько я понимаю, вы хотите отобразить содержимое канала facebook Page в Ваш сайт.

Как я уже говорил вам, все, что вам нужно для получения фида страницы, — это токен активного доступа («любой действительный токен доступа или пользовательский токен доступа»).

Если вы будете следовать документу Аутентификация, в разделе "Вход в приложение" вы увидите, что вы можете токен доступа для вашего приложения facebook. С помощью этого токена вы сможете получить ленту ЛЮБОЙ СТРАНИЦЫ на стороне сервера.

person Nitzan Tomer    schedule 12.03.2012
comment
Привет Ницан и спасибо. Я хочу иметь возможность отображать стену одного из моих клиентов на своей веб-странице, а также отображать другие вещи, такие как фотоальбом, друзей и т. д. Если я хочу отображать что-либо еще, кроме общедоступных материалов клиентов, мне нужен токен доступа. Как она говорит: developers.facebook.com/docs/reference/api получить дополнительную информацию о пользователе, вы должны сначала получить его разрешение. На высоком уровне вам нужно получить токен доступа для пользователя Facebook. var page_id = 'ID моей страницы в Facebook'; это действительно идентификатор страницы клиентов, а не мой - опечатка. Хорошо, не буду использовать window.onload - person Claes Gustavsson; 14.03.2012
comment
Подождите, вы имеете в виду профиль пользователя facebook? Вы написали, что получаете всю ленту с моей страницы в Facebook, что означает: Страница, а не Пользователь. Так какой же это? - person Nitzan Tomer; 14.03.2012
comment
Хорошо, теперь я поместил весь код в window.fbAsyncInit, и он не работает, не отображает информацию о канале и не вызывает ошибок. Похоже, что он не выполнен. - person Claes Gustavsson; 14.03.2012
comment
хорошо, в этом случае я хочу получать каналы со СТРАНИЦЫ, но позже я также хочу получать каналы от обычного пользователя. - person Claes Gustavsson; 14.03.2012
comment
Мне удается получить следующее и отобразить его на веб-странице: имя страницы, описание страницы, фотографии из альбома страницы, название альбомов страницы, но не фид. - person Claes Gustavsson; 14.03.2012
comment
Это разные запросы, так как ваше приложение может получить фид Страницы только токен доступа пользователя, вам не нужны какие-либо дополнительные разрешения, но для того, чтобы получить фид Пользователь, вам необходимо получить разрешение read_stream. Можете ли вы отредактировать свой вопрос с кодом? - person Nitzan Tomer; 14.03.2012
comment
Хорошо, возможно, я пытался сделать это сложнее, чем есть :-) Сейчас я обновил код, и он читает сообщение из ленты! Но только если я вошел в Facebook? Поскольку мне нужен токен доступа, я думал, что получу его при первом вызове и использую во втором, но это не сработало. Итак, чтобы я понял, когда я собираюсь настроить это для клиента, это то, что я должен сделать, я немного запутался :-). 1. Создайте приложение, чтобы я получил идентификатор приложения. 2. Перейдите в Graph API Explorer и получите оттуда токен доступа. 3. использовать приведенный выше код? Я что-то пропустил? - person Claes Gustavsson; 15.03.2012
comment
Нет. У вас есть приложение fb, затем пользователь входит в ваше приложение и авторизует его, из-за этого вы получаете токен доступа от facebook (НЕ НУЖНО СДЕЛАТЬ ЗАПРОС НА ЭТО). Затем вы используете этот токен для всех ваших запросов (FB JS SDK делает это за вас, вам не нужно делать это самостоятельно), а затем вы просто делаете графические запросы (например, /southpark/feed) для вошедшего в систему пользователя. Если вы хотите также запросить _/me/feed, просто запросите разрешение read_stream. - person Nitzan Tomer; 15.03.2012
comment
Извините, Ницан, но я, наверное, путаю вещи, до этого я сделал несколько функций для загрузки на Facebook, и поэтому я запутался! Поэтому, если я хочу отображать каналы на веб-странице и посетителю не нужно входить в систему Facebook. Что мне делать, шаг за шагом? У меня есть идентификатор приложения, идентификатор пользователя и идентификатор страницы. - person Claes Gustavsson; 15.03.2012
comment
Вы не можете получить ленту пользователя, если он не вошел в Facebook. Выданный вам токен является недолговечным токеном, после истечения срока его действия вы больше не сможете его использовать. Если вы используете процесс аутентификации на стороне сервера, то полученные вами токены должны жить в течение месяца. - person Nitzan Tomer; 15.03.2012
comment
Я пытаюсь сделать это: у меня есть СТРАНИЦА facebook, и я создал приложение facebook. И я хочу отображать свои каналы Facebook PAGE на моей веб-странице. Поэтому, если я сначала войду в facebook со своим PAGEID, а затем запрошу токен доступа со своей СТРАНИЦЫ, у меня будет действительный токен доступа, который я могу использовать для получения канала. - person Claes Gustavsson; 15.03.2012