使用Facebook Graph API的批处理调用&;PHP

使用Facebook Graph API的批处理调用&;PHP,php,batch-file,facebook-graph-api,Php,Batch File,Facebook Graph Api,使用Facebook提供的PHP库的2.1.2版,根据Graph API设计我的第一个应用程序。试图最大限度地提高性能,等等,开箱即用,希望将几个调用一起批处理为一个调用,但在文档中找不到任何内容。。。我肯定我错过了一些简单的东西,但我很难受 我想将这些调用(只是一个示例)转换为单个批处理调用: $me = $facebook->api('/me', $params); $groups = $facebook->api('/me/groups', $params); 脸谱网

使用Facebook提供的PHP库的2.1.2版,根据Graph API设计我的第一个应用程序。试图最大限度地提高性能,等等,开箱即用,希望将几个调用一起批处理为一个调用,但在文档中找不到任何内容。。。我肯定我错过了一些简单的东西,但我很难受

我想将这些调用(只是一个示例)转换为单个批处理调用:

$me     = $facebook->api('/me', $params);
$groups = $facebook->api('/me/groups', $params);
脸谱网建议使用这个; 通过在(嵌套)查询中组合您的请求

他们自己的例子:

$friends_locations = $facebook->api_client->fql_query(
    'SELECT hometown_location from user where uid in ' .
    '(SELECT uid2 from friend where uid1=' . $user_id . ')');

如果您的请求彼此不依赖,您可以使用

我在我的请求中添加了一个空检查:

$friends_locations = $facebook->api_client->fql_query('SELECT name,birthday_date, pic_square FROM user WHERE uid in (SELECT uid2 from friend where uid1='. $user_id .') and birthday_date > 0');

只需更新新的graph Batch API:您还可以按如下方式执行:

// Save your method calls into an array
$queries = array(
    array('method' => 'GET', 'relative_url' => '/me'),
    array('method' => 'GET', 'relative_url' => '/me/groups')
);
// POST your queries to the batch endpoint on the graph.
$batchResponse = $facebook->api('?batch='.json_encode($queries), 'POST');

// Return values are indexed in order of the original array, content is in ['body'] as a JSON
// string. Decode for use as a PHP array.

$user_profile = json_decode($batchResponse[0]['body'], true);
$user_groups = json_decode($batchResponse[1]['body'], true);

这就可以了。

对于批处理API,您可以使用

:


我给出了fql查询的批调用示例。它可能会帮助某人

//$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获取整个查询结果的json数组


而且这也节省了很多时间。这3个查询单独进行总共需要9秒。使用multiquery需要7秒钟。批处理请求需要3.6秒。

关于使用新的Graph API进行FQL查询,您有什么想法吗?这看起来像旧的RESTAPI。。。当前图形API友好的PHPSDK(v2.1.2)似乎没有任何明显的FQL查询方法;FQL用于支持Graph API无法支持的请求,因此使用Graph API生成FQL似乎没有意义?“Facebook查询语言或FQL使您能够使用SQL风格的界面来查询Graph API公开的数据。它提供了一些Graph API中不可用的高级功能,包括将多个查询批处理到一个调用中。“您可以通过指定类似于
array('method'=>'FQL.query','query'=>$FQL)的内容在当前PHP SDK中使用FQL)
作为
$facebook->api
的一个参数。这对我帮助很大。谢谢你的发帖!谢谢!但要小心:“我们目前将批处理请求的数量限制在50个。“对--它将批处理中的请求限制为50个,而不是应用程序中总共50个批处理请求。此外,如果你想获得创造性,你可以批处理请求。你会得到一个非常慢的响应,所以我只在具有持久身份验证并且需要最终响应来更新数据的应用程序中这样做。或者,一个cron任务。或者任何大规模的行动。我从来没有遇到过批量限制的问题,我用这个端点做过一些淫秽的事情,会让你们所有人都厌恶地哭泣。@Buzzedword我已经找了一个小时了,谢谢!!他们应该把你的例子放在Facebook PHP SDK文档中!你介意把代码或说明贴在这里吗?如果网站关闭,我们这里就没有信息了。
 $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');