【问题标题】:Batch request with fql using javascript使用 javascript 使用 fql 进行批量请求
【发布时间】:2012-06-19 22:48:35
【问题描述】:

以下使用同一应用检索朋友的批处理请求不起作用:

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 文档,*relative_url* 是

(...) 一个 relative_url(在 graph.facebook.com 之后的 URL 部分)

here获取。

所以我把第一段代码改成:

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'
    }
]};

批处理上第一个块的 relative_url 在 facebook 的 Open Graph API Tool 中工作,但在 JS 中,http 代码为 500,消息正文为:

{
    "error": {
        "message": "Graph batch API does not allow REST API method fql",
        "type": "FacebookApiException",
        "code": 3
    }
}

但在 api 批处理请求文档中允许 fql 查询。文档已过时?我应该打开一个错误吗?

P.S:没有批量请求的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())

【问题讨论】:

    标签: javascript facebook-fql facebook-javascript-sdk


    【解决方案1】:

    不要使用method/fql; Facebook 的 FQL 端点现在只是 fql

    ...
    "name": "getFriends",
    "method": "GET",
    "relative_url": "fql?q=SELECT...",
    ...
    

    【讨论】:

      【解决方案2】:

      它现在正在工作。我只是在批处理对象中添加access_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 表达式。我无法为第一个请求的每个用户发出第二个请求。所以我改变了让它在图形 api 请求末尾添加朋友 ID 的方式。我认为我首先想到的是每个朋友的请求,使用批处理请求是不可能的。

      然后我做了批处理的调用:

      FB.api('/', 'POST', searchArgs,
          function(response) {
              var friends = response[0].body;
              console.log(friends);
              var activities = response[1].body;
              console.log(activities);
          }
      );
      

      现在只是整理检索到的帖子。

      []的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-04
        相关资源
        最近更新 更多