2011-09-15 88 views
4

我使用Facebook's Batch Requests发布到多个提要,并且需要将正确的响应链接到批处理中的每个请求。由于我没有发现有关文档的确切信息,所以返回数组的成员是否与请求的顺序相同?通过Facebook批量请求链接对请求的响应

换句话说,如果我在返回的数组的第三个成员中发生错误,这是否意味着错误是指我在批处理中发送的第三个请求?

我可以使用id作为成功的请求,但错误消息看起来很普遍,并且不会将任何数据链接到生成它们的请求(除非我错过了某些内容)。

回答

7

是的,这是正确的。

我的策略是在加载批处理请求时创建一个跟踪数组。此数组将我的关联数组的关键字与我发布批次的数字顺序关联起来。当我遍历结果时,我使用一个计数器来遍历跟踪数组并提取适当的关联数组索引。然后,我使用它来更新关联数组和该批处理操作的结果。

如果批处理支持'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 
     } 
    } 
}