批量上传多张照片到多个用户帐户

时间:2012-08-15 11:17:16

标签: facebook-graph-api batch-processing

我有一个如下所示的数组:

$userImages = array(
    '100000000000001' => array(
        '..../image01.jpg',
        '..../image02.jpg',
        '..../image03.jpg',
    ),
    '100000000000002' => array(
        '..../image04.jpg',
        '..../image05.jpg',
        '..../image06.jpg',
    ),
);

包含FB用户ID作为键,然后包含要上传到每个用户帐户的图像数组。

我的上传代码如下:

/** @var FacebookSessionPersistence $facebook */
$facebook = $this->container->get('fos_facebook.api');
$facebook->setFileUploadSupport(true);

$count = 1;

foreach ($userImages as $userId => $images) {
    $batch = array();
    $params = array();
    foreach ($images as $image) {
        $request = array(
            'method' => 'post',
            'relative_url' => "{$userId}/photos",
            'attached_files' => "file{$count}",
            'access_token' => $this->getUserAccessToken($userId)
        );
        $batch[] = json_encode($request);
        $params["file{$count}"] = '@' . realpath($image);
        $count++;
    }
}
$params['batch'] = '[' . implode(',', $batch) . ']';

$result = $facebook->api('/', 'post', $params);
return $result;

我已经在 access_token 下为每个图片添加了用户访问权限,但是当调用$ facebook-api()时,我从Facebook获得以下回复:

enter image description here

有谁知道原因,我收到这些错误?我是否在错误的位置添加了用户访问令牌?

3 个答案:

答案 0 :(得分:2)

必须将access_token添加到根目录中的$ params关联数组中,而不是添加到每个图像项目中!

答案 1 :(得分:1)

您的逻辑很好,但您需要将访问令牌放入正文中以满足每个请求。

例如:

...
$request = array(
  'method' => 'post',
  'relative_url' => "{$userId}/photos",
  'attached_files' => "file{$count}",
  'body' => "access_token={$this->getUserAccessToken($userId)}",
);
...

答案 2 :(得分:0)

  

有谁知道原因,我收到这些错误?我是否在错误的位置添加了用户访问令牌?

您是否已确定,实际添加了访问令牌,而不仅仅是null值?

错误消息并未表示您使用了错误的过期的用户访问令牌,但它表示用户访问令牌是必需的。

所以我猜,因为你并没有真正将实际令牌放入你的单独批处理请求部分,然后会发生你的应用程序访问令牌的回退,因此特定的错误消息。