使用FB.api在Javascript中查询事件和朋友事件

时间:2013-12-01 05:23:40

标签: javascript facebook-graph-api facebook-fql

我正在编写一个小应用程序,在将用户登录到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)分析器错误:意外的查询结束。”; type:OAuthException

这两个查询都可以在Facebooks Graph API控制台中运行,并在直接输入浏览器时返回数据作为GET请求(http://graph.facebook.com/fql?q=)。

关于我做错了什么的想法?

1 个答案:

答案 0 :(得分:0)

您不需要使用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/