FQL错误803突然出现

时间:2012-12-27 23:07:16

标签: facebook facebook-fql

我的代码中有一个fql查询,直到上周(或那里)工作完美,然后突然停止工作。

我现在收到一个奇怪的#803错误以及消息“你请求的一些别名不存在:”这是特殊的(我相信是一个完全红色的鲱鱼),因为我现在尝试删除所有我以前的别名,只用“名字”替换它们。

完全在我的绳索上试图找出Facebook在过去几周内改变了什么导致了这一点。如果有人有任何见解,我会非常感激听到它。

我在这里发布我的代码,但我不期待对代码本身的任何评论,看它是如何在几个月内完美地工作直到过去两周左右的某个时间点。

代码的具体用途是为用户获取身份验证令牌,然后检索/ me请求中不可用的更详细信息。

//I call this first to get the token

               function checkStatus() {     
            try{

                FB.getLoginStatus( function( loginResponse ){
                    if( loginResponse.status == "connected" ){
                        authToken = loginResponse.authResponse.accessToken;//this comes back as expected
                        expiresIn = loginResponse.authResponse.expiresIn;//this comes back as expected
                        getUserInfo();
                    } else {
                        registerApp();//this gets called if the user hasn't approved the app yet... this continues to work as expected
                    }
                } );

            }
            catch(e){
                alert("ERROR" + e);
            }
        }



//so the above method calls this


                function getUserInfo(){
            FB.api( "/me", function( meResponse ){   

                meResponse.authToken = authToken;
                meResponse.expiresIn = expiresIn;           
                console.log("meResponse = " + JSON.stringify(meResponse));
//this contains all the correct expected data

                FB.api(escape("/fql&q=SELECT name FROM user WHERE uid = '"+ meResponse.id +"'"),//here I've eliminated ALL extra aliases (though none of them were a problem before
                    function( response ){
                        console.log("RESP = " + JSON.stringify(response)); //this comes back with the following error:
//{"error":{"message":"(#803) Some of the aliases you requested do not exist: fql&q=SELECT name FROM user WHERE uid = 'xxxxxxxxx'","type":"OAuthException","code":803}}

                    }
                 )              
            } );

        }

1 个答案:

答案 0 :(得分:0)

所以...看起来FB似乎完全改变了fql如何被调用的语法,我没有看到任何对我上面的旧方式的引用(完全有效)。

新方法是传入一个如下所示的JSON对象:

{method:'fql.query',                            query: "SELECT uid,name,email,first_name,last_name,birthday_date,pic_big FROM user WHERE uid = '"+ meResponse.id +"'"}

并且响应NO LONGER作为一个名为 data 的数组返回,现在是返回对象顶层的原始未命名数组...所以在我上面的例子中,我现在只看响应[0]而不是response.data [0]。

我在他们的任何文档中都没有提到任何这些变化......也许我只是在失去理智,但看起来他们只是完全修改了他们的API而没有任何警告。

也许我错过了一些东西(我通常都是)。

以防万一其他人需要帮助...这是新工作代码的一个例子......

FB.api(
                    {method:'fql.query',   
                        query: "SELECT uid,name,email,first_name,last_name,birthday_date,pic_big FROM user WHERE uid = '"+ meResponse.id +"'"},
                function( response ){
                    console.log("RESP = " + JSON.stringify(response));
                    //all the data for this specific user is now in response[0], obviously if your search criteria contains more users, they'll be in the subsequent indexed items under the response array.                                            
                }
             )