使用javascript api在我的网页上显示我的Facebook提要?

时间:2012-03-12 12:27:08

标签: facebook facebook-graph-api feed facebook-page

我试图从我的facebook页面获取javascript api的所有Feed。 有人有一个有效的例子吗?

我已经尝试了但是我无法做到正确,我可以从专辑中获取照片,但我无法获得这些信息而且我不知道我做错了什么。

任何输入都非常感激。谢谢!

我有这段代码:


修改

好的,我在init代码中有代码,如下所示,它不起作用,它没有执行代码,我没有错误:

<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); }); 在init代码中而不是其他代码?

  2. 我仍然需要一些结构帮助在页面上写回调,所以它看起来像在Facebook上一样好。 我喜欢写出“消息,图片,链接,名字”,还有别的东西?

  3. 在我测试获取此示例中的消息时,某些回调在页面上显示为“未定义”?这是否意味着当我得到消息时消息没有值? 如果是这样,我怎么能不写出emty值 - 未定义的值?

  4. 谢谢!

    更新:

    如果我使用此代码,那么它会读取Feed,但仅当我登录到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. 我想通过电话获得消息,图片,喜欢等 并将其显示在饲料墙上,这里有任何建议吗?
    6. 好的,最后我得到了它的工作:-) 我有正确的访问令牌,现在我可以显示提要。 我在这里得到了正确的令牌: 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);
                }
              }
            });
      

      好的,现在它可以工作了,但我在响应中得到了未定义的内容? 造成这种情况的原因是,因为它是我在响应中得到的空值? 我该怎么做才能显示在页面上?

1 个答案:

答案 0 :(得分:1)

我不明白你要做的是什么,我有种感觉,虽然你走错了路。

让我们从您不需要任何特殊权限或页面访问令牌来查询页面提要这一事实开始,它是公开的,因此您只需要(quoted from the docs):“任何有效的access_token或者user access_token“。 这意味着,如果用户授权您的应用程序,您就可以为他获取访问令牌,并可以获取任何页面提要。 例如,尝试使用Graph API Explorer中的southpark页面Feed。

另一个问题是要求用户提供“manage_pages”权限,然后向图表api询问您自己的应用的访问令牌是行不通的。当用户授予您的应用以管理其获取的网页时,他的页面的权限,以及此请求例如:/southpark?feilds=access_token将无法获得令牌,因为您不是此页面的管理员(即使您使用“manage_pages”权限授予应用程序)。

最后一件事是使用 window.onload ,在您的情况下,这不能解决问题。 您不希望在加载窗口时执行该代码,但是当加载facebook sdk并初始化时。这就是facebook告诉你使用 fbAsyncInit 事件的原因。 您在 window.onload 之前的代码是正确的形式,当您说“它不起作用”时,您的意思是什么?你有错误吗?它没有被执行?


修改

根据我的理解,您希望在自己的网站上显示facebook Page Feed的内容。

正如我已经告诉过你的那样,获取页面供稿所需的只是一个活动访问令牌(“任何有效的access_token或用户access_token”)。

如果您按照Authentication文档,应用程序登录部分,您会看到您可以为您的Facebook应用程序发出访问令牌。使用该令牌,您可以在服务器端获得所需的任何页面源。