如何在Facebook应用程序中显示事件?我在我的Facebook帐户中添加了一个事件,但该事件未显示在我的应用程序中。
答案 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');
}