4

Facebookのバッチリクエストを使用して複数のフィードに投稿していますが、バッチ内のすべてのリクエストに正しい応答をリンクする必要があります。ドキュメントに明確な情報が見つからなかったので、返された配列のメンバーはリクエストと同じ順序で表示されますか?

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

成功したリクエストにはIDを使用できますが、エラーメッセージは一般的なようであり、それらを生成したリクエストにリンクされたデータは表示されません(何かが不足している場合を除く)。

4

1 に答える 1

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
        }
    }
}
于 2011-11-09T18:06:22.547 に答える