0
 foreach($friends_array as $user) {
    $argstag = array('to' => $user);
    $argstag['x'] = $locations_x[$i];
    $argstag['y'] = $locations_y[$i];
    $datatag = $facebook->api('/' . $photo_id . '/tags', 'post', $argstag);
    $i++;
 }

不是在循环中执行此操作(多个 api 请求),有没有办法在单个 api 请求中执行此操作?

4

2 回答 2

1

下面的代码对我有用,前提是数组 $friends 的朋友少于 50 个:

$tags = array();
 foreach ($friends as $friend)
         {
            $tag = array();
            $tag['tag_uid'] = $friend;
            $tag['x'] = rand() % 100;
            $tag['y'] = rand() % 100;
            $tags[] = $tag;
         }
          $argstag = array(
            'tags' => $tags
          );
          $facebook->api("$photoId/tags","POST", $argstag);
于 2012-10-16T07:18:43.857 回答
0

如果您同时进行大量操作,请考虑使用批处理请求 API。它允许您同时执行多个任务(最多 50 个)。

这是一个关于理论上如何使用它的示例:

$batches = array();
$i = $b = 0;
foreach($friends_array as $user) {
 $argstag = array('to' => $user);
 $argstag['x'] = $locations_x[$i];
 $argstag['y'] = $locations_y[$i];

 // If we've reached the batch limit, create a new batch request.
 if ($i == 50) {
    $b++;
    $i = 0;
 }

 // Single batch request.
 $batches["$b"][] = array(
    'method' => 'POST',
    'relative_url' => '/' . $photo_id . '/tags',
    'body' => 'to=' . $user . '&x=' . $locations_x[$i] . '&y=' . $locations_y[$i]
 );

 $i++;
}

if (!empty($batches)) {
  foreach ($batches AS $key => $batch) {
    $b = json_encode($batch);
    $res = $facebook->api('?batch=' . urlencode($b), 'POST');
    // Facebook populates $res with the response.
  }
}

这未经测试,但希望这会有所帮助。它可能不是您想要的,但值得注意的是,如果您有大量请求需要发送到 Facebook 的服务器。

于 2012-10-16T01:02:04.710 回答