2011-09-15 11 views
4

私はFacebook's Batch Requestsを複数のフィードに投稿しており、バッチ内のリクエストごとに正しい応答をリンクする必要があります。ドキュメンテーションに関する決定的な情報が見つからなかったので、返された配列のメンバーはリクエストと同じ順序で表示されますか?Facebookバッチリクエストでリクエストへの応答を

つまり、返された配列の3番目のメンバーにエラーが発生した場合、そのエラーがバッチで送信した3番目のリクエストを参照していることを示していますか?

私は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 
     } 
    } 
} 
しかし、それはあなたがバッチの依存関係を作成するために名前を使用している場合に動作するように見えます