使用javascript的fql批处理请求
以下使用同一应用程序检索好友的批处理请求不起作用:使用javascript的fql批处理请求,javascript,facebook-fql,facebook-javascript-sdk,Javascript,Facebook Fql,Facebook Javascript Sdk,以下使用同一应用程序检索好友的批处理请求不起作用: var search = {batch: [ { 'name' : 'getFriends', 'relative_url': 'method/fql.query?query=SELECT+uid,+first_name,+name,+pic_square,+pic_small+FROM+user+WHERE+is_app_user=1+and+uid+IN+(SELECT+uid2+FROM+friend+WH
var search = {batch: [
{
'name' : 'getFriends',
'relative_url': 'method/fql.query?query=SELECT+uid,+first_name,+name,+pic_square,+pic_small+FROM+user+WHERE+is_app_user=1+and+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1=' + userId + ')'
},
{
'method': 'get',
'relative_url': '{result=getFriends:$.data[*].uid}/news.reads/article',
}
]};
下面的代码执行批处理请求:
FB.api('/', 'post', search, function(response) {
console.log(response);
});
但是第一次搜索返回null。这个问题怎么了
根据facebook批量请求文档,*相对url*为
(…)一个相对url(在graph.facebook.com之后的url部分)
从…得到
因此,我将第一段代码更改为:
var search = {batch: [
{
'name' : 'getFriends',
'method' : 'GET',
'relative_url': 'method/fql?q=SELECT uid, first_name, name, pic_square, pic_small FROM user WHERE is_app_user=1 and uid IN (SELECT uid2 FROM friend WHERE uid1=me())'
},
{
'method': 'GET',
'relative_url': '{result=getAmigos:$.data[*].uid}/news.reads/article'
}
]};
批处理中第一个块的相对url在facebook的Open Graph API工具中工作,但在JS中,http代码是500,消息正文是:
{
"error": {
"message": "Graph batch API does not allow REST API method fql",
"type": "FacebookApiException",
"code": 3
}
}
但是在api批处理请求文档中允许fql查询。文件过时了吗?我应该打开一个bug吗
注意:没有批处理请求的fql是
SELECT uid, first_name, name, pic_square, pic_small
FROM user WHERE is_app_user=1
and uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
不要使用
方法/fql
;Facebook的FQL端点现在只是FQL
...
"name": "getFriends",
"method": "GET",
"relative_url": "fql?q=SELECT...",
...
它正在工作。我只是在批处理对象中添加了
access\u token
参数。像这样:
var searchArgs = {
access_token: FB.getAuthResponse().access_token,
batch: []
};
searchArgs.batch.push({
'method': 'GET',
'name': 'amigosapp',
'relative_url': 'method/fql.query?query=SELECT+uid,+first_name,+name,+pic_square,+pic_small+FROM+user+WHERE+is_app_user=1+and+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1=me())&limit=20',
'omit_response_on_success': false
});
searchArgs.batch.push({
'method': 'GET',
'relative_url': 'news.reads/article?date_format=U&ids={result=amigosapp:$.[*].uid}'
});
另一个技巧是以不同的方式使用jsonpath表达式。我无法为第一个请求的每个用户发出第二个请求。因此,我改变了获取它的方式,在graph api请求的末尾添加好友ID。我认为我第一次想到的是每个朋友一个请求,使用批处理请求是不可能的
然后我做了批量调用:
FB.api('/', 'POST', searchArgs,
function(response) {
var friends = response[0].body;
console.log(friends);
var activities = response[1].body;
console.log(activities);
}
);
现在只需组织检索到的帖子
[]的