我正在编写一个小应用程序,在将用户登录到Facebook后,运行查询并在控制台中显示结果,我遇到了问题:
首先,我做登录的事情:
FB.Event.subscribe('auth.authResponseChange', function(response) {
if (response.status === 'connected') {
var accesstoken=response;
getSomeEvents(accesstoken);
} else if (response.status === 'not_authorized') {
FB.login(function(response){
}, {scope: 'email,user_likes, user_events, friends_events'});
} else {
FB.login(function(response){
}, {scope: 'email,user_likes, user_events, friends_events'});
}
});
};
然后,我尝试使用Graph API查询FB。下面,我简化了查询,使我的问题更清楚
function getSomeEvents(accesstoken){
var query2=encodeURI("SELECT name, eid, venue, location FROM event WHERE eid=364689750343572 & access_token="+accesstoken.authResponse.accessToken);
//Method 1: Querying with the graph API
FB.api('/fql?q='+query2, function(events) {
console.log('In Method 1 - Updated Graph API - event-name is ' + events.name + '.');
});
}
chrome调试器告诉我:"您的语句是不可索引的。WHERE子句必须包含可索引列。这些列在从…链接的表中用*标记。"
然而,EID可根据以下内容进行索引:https://developers.facebook.com/docs/reference/fql/event
此外,如果我将查询替换为我实际尝试做的事情:
var query2=encodeURI("SELECT name, eid, venue, location FROM event WHERE eid in ( SELECT eid FROM event_member WHERE uid in (SELECT uid2 FROM friend WHERE uid1 = me()) ) limit 100 & access_token="+accesstoken.authResponse.accessToken);
我在chrome调试器中得到:"(#601)Parser错误:查询意外结束。";类型:OAuthException
这两个查询都在Facebooks Graph API控制台中工作,并在作为GET-requests直接输入浏览器时返回数据(http://graph.facebook.com/fql?q=)。
关于我做错了什么有什么想法吗?
您不需要accesstoken来获取事件的详细信息。
我不知道你为什么会遇到这个问题,我想这是一个编码错误。无论如何,这是有效的:
var query2="SELECT name, eid, venue, location FROM event WHERE eid=364689750343572";
FB.api('/fql',{ q: query2}, function(response) {
console.log(response.data)
console.log('In Method 2 - Updated Graph API - event-name is ' + response.data[0].name + '.');
});
}
请记住,结果是在response.data下返回的,这些结果是一个数组。
PS您可以在不使用FQL:的情况下直接获取事件信息
FB.api('/364689750343572/', function(response) {
console.log('In Method 1 - Updated Graph API - event-name is ' + response.name + '.');
});
}
来源:https://developers.facebook.com/docs/reference/javascript/FB.api/