我正在使用Facebook's Batch Requests发布到多个Feed,我需要将正确的响应链接到批处理中的每个请求。由于我没有找到关于文档的确切信息,返回数组的成员是否与请求的顺序相同?
换句话说,如果我在返回数组的第三个成员中出错,这是否意味着错误是指我在批处理中发送的第三个请求?
我可以使用id来获取成功的请求,但错误消息看似一般,并且不会将任何数据链接到生成它们的请求(除非我遗漏了某些内容)。
答案 0 :(得分:8)
是的,这是正确的。
我的策略是在加载批量请求时创建跟踪数组。此数组将我的关联数组的键与我发布批次的数字顺序相关联。当我循环结果时,我使用计数器逐步执行跟踪数组并拉出正确的关联数组索引。然后我用它来更新关联数组和批处理操作的那一步的结果。
如果批处理支持'name'参数并且每个响应返回该参数,那将是很好的。但是,只有在使用名称创建批处理依赖项时,这才会起作用: https://developers.facebook.com/docs/reference/api/batch/
加载批次:
foreach ($campaigns as $title => $campaign) {
if (count($batch) == 20) {
$batches[] = $batch;
$batch = array();
}
$titles[] = $title; #TRACKING array;
$body = http_build_query($campaign);
$body = urldecode($body);
$batch[] = array(
'method' => 'POST',
'relative_url' => "/act_{$act}/adcampaigns",
'body' => $body
);
}
处理批次:
if ($batch) {
$batches[] = $batch;
$counter = 0;
foreach ($batches as $batch) {
$params = array(
'access_token' => $access_token,
'batch' => json_encode($batch)
);
$responses = $facebook->api('/', 'POST', $params);
foreach ($responses as $response) {
$response = json_decode($response['body'], 1);
$campaign_id = $response['id'];
$title = $titles[$counter]; #RETRIEVING THE INDEX FROM THE TRACKING ARRAY
$campaigns[$title]['campaign_id'] = $campaign_id;
$counter++; #INCREMENTING THE COUNTER
}
}
}