如何在图形api中进行fql查询的批量请求?

时间:2012-03-09 10:12:02

标签: facebook facebook-graph-api facebook-fql facebook-php-sdk facebook-batch-request

我在单个函数中有4-5个fql查询。每个人需要2-4秒才能执行。执行整个功能总共需要14-15秒。用户需要等待很长时间。所以我想减少处理时间。 (PHP中没有很好的支持多线程概念。)

我在图api中听说过批量请求的概念。我已经google了很多但是不明白如何在图api中使用批处理请求进行fql查询。

  • 任何人都可以用fql查询的批量请求的例子给出解释吗?
  • 查询处理时间会减少多少?
  • 还有其他方法可以减少许多fql查询的时间吗?

3 个答案:

答案 0 :(得分:7)

<强>更新

https://graph.facebook.com/?batch=[{"method":"GET","relative_url":"me"},{"method":"GET","relative_url":"me/friends?limit=50"}]&access_token=ACCESS_TOKEN&method=post

更多信息: http://developers.facebook.com/blog/post/2011/03/17/batch-requests-in-graph-api/

答案 1 :(得分:4)

// $ current_user = facebook id

 $query1="SELECT uid, name FROM user WHERE is_app_user=1 AND uid IN (SELECT uid2 FROM friend WHERE uid1 = $current_user)";
 $query2="SELECT uid, name, work_history FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = $current_user )";
 $query3="SELECT uid, name, work, education FROM user WHERE uid = $current_user";
 $queries = array(
           array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query1)),
           array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query2)),
           array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query3))
            );

            $objs = $facebook->api('/?batch='.json_encode($queries), 'POST');

$ objs获取整个thre查询结果的json数组。

这节省了很多时间。这3个查询总共需要9秒。使用multiquery需要7秒。批量请求需要3.6秒。

答案 2 :(得分:2)

不是单独调用每个FQL查询,为什么不使用FQL Multiquery?

http://developers.facebook.com/docs/reference/rest/fql.multiquery/

<强>更新 否则,如果你不想使用multiquery,我认为你正在寻找的是here。我找不到更多关于FQL和Batch的信息。

curl \
     -F 'access_token=…' \
     -F 'batch=[{ "method": "POST", \
    "relative_url": "method/fql.query?query=select+name+from+user+where+uid=4", \
     }]
https://graph.facebook.com