如何在Facebook应用程序中显示事件?

时间:2011-04-20 02:35:10

标签: facebook

如何在Facebook应用程序中显示事件?我在我的Facebook帐户中添加了一个事件,但该事件未显示在我的应用程序中。

1 个答案:

答案 0 :(得分:1)

可以通过Facebook Graph API获取事件,并且所有数据都将作为JSON对象返回。

要检索它们,您必须发送有效的访问令牌。

有多种方法可以检索数据 - 您可以使用不同的语言(PHP或Javascript最常见)和不同的技术(FQL语句,预定义方法等)。

我使用Javascript完成了这个:

通过在页面底部添加此代码来初始化Javascript SDK:

<script>
  window.fbAsyncInit = function() {
    FB.init({appId: 'your app id', status: true, cookie: true,
             xfbml: true});
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>

构造所需的url和回调以处理返回的数据: 我使用FB.getLoginStatus返回由FB.init创建的会话对象 - 这包含必要的访问令牌。 然后,您必须指定将使用返回的数据调用的函数,即。 processResult()。您可以使用JSONP将数据直接返回到JSON对象。

getEvents: function(){

        FB.getLoginStatus(function(response){
            if (response.session){              
                var graphURL = 'https://graph.facebook.com/me/events?access_token=' +
                response.session.access_token + '&callback=processResult&limit=10'; 
                var script = document.createElement('script');
                script.src = graphURL;
                document.body.appendChild(script);
            }
        });

}

此调用返回的对象如下所示,并包含可用于在需要时分页结果的URL。

     processResult(
    {"data": [{"name": "Test event in Group nnn",
        "start_time": "2011-08-01T05:30:00",
        "end_time": "2011-08-01T06:30:00",
        "location": "Location",
        "id": "194845583864369",
        "rsvp_status": "attending"},],
        "paging": {
        "previous": "https://graph.facebook.com/me/events?access_token=183551578351719\u00257C2.uakDQKBYcQSBrkEGdQj_QA__.3600.1303293600.1-522406451\u00257CvK4NtMrjkKJOVrUvRw2zB3b9w7w&callback=Drupal.EventBook.processResult&limit=10&since=1312176600",
        "next": "https://graph.facebook.com/me/events?access_token=183551578351719\u00257C2.uakDQKBYcQSBrkEGdQj_QA__.3600.1303293600.1-522406451\u00257CvK4NtMrjkKJOVrUvRw2zB3b9w7w&callback=Drupal.EventBook.processResult&limit=10&until=1312176600"
            }
});

作为回调脚本的一个例子,这里我只是用来在jQuery UI对话框中显示我所有事件的名称:

processResult: function(events) {
    if (events.paging == undefined) {
     html = "No more results";
    }
    else {
      html = "<div>";
      graphURL = events.paging.next;
      for (var event in events.data) {
        html += '<p>' + events.data[event].name + '</p>';   
      }
      html +="</div>";
    }
   dialogbox = jQuery('#eb_dialog').html(html)
    .dialog({
        autoOpen: false,
        title: 'List Event(s)',
        modal:true,
        width:600,
        resizable:false,
        buttons: {'Open Event':
        function() {openSelectedEvents();
            },'Cancel':function() {jQuery(this).dialog('close');}},
    });
dialogbox.dialog('open');
}