如何使用Facebook Graph API将照片上传到相册

时间:2010-06-03 08:46:20

标签: php facebook

以下是代码:

$file= 'bbbb.jpg';
$data = array(
            basename($file) => "@".realpath($file),
            "caption" => "Uploaded using graph api",
            "aid" => '13595',
            "access_token" => $accessToken,
            'method' => 'photos.upload'
);
$sds =$facebook->api($data);

这是错误

  

未捕获的CurlException:26:创建formpost数据失败

怎么办?

3 个答案:

答案 0 :(得分:12)

以下是使用Graph API上传照片的各种方法。这些示例假设您已实例化$ facebook对象并为当前用户提供有效会话。

1 - 当前用户的默认应用程序相册

此示例将照片上传到当前用户的默认应用程序相册。如果相册尚不存在,则会创建。

$args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);

$data = $facebook->api('/me/photos', 'post', $args);
print_r($data);

2 - 目标专辑

此示例会将照片上传到特定相册。

$args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);

$data = $facebook->api('/'. $ALBUM_ID . '/photos', 'post', $args);
print_r($data);

3 - 具有访问令牌的目标相册

此示例会将照片上传到需要访问令牌的特定相册。

 $args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);

$data = $facebook->api('/'. $ALBUM_ID . '/photos?access_token='. $ACCESS_TOKEN, 'post', $args);
print_r($data);

答案 1 :(得分:3)

你的$ data数组应该有“message”而不是“caption”, 另外,删除“援助”,“方法”和“access_token”
你的$ data必须有文件数据和“message”,就是它。

$sds =$facebook->api('/me/13595/photos', 'POST', $data);

而不是13595只使用带有专辑辅助的变量

另外,如果需要,最好将access_token附加到api uri,如下所示:

$sds =$facebook->api('/me/13595/photos?access_token='.$access_token, 'POST', $data);

另外,如果php sdk不适合你,我已经成功使用了cURL,如果你的php安装支持它。在这种情况下,请参阅Upload Photo To Album with Facebook's Graph API

处的cURL示例

答案 2 :(得分:2)

最新版本的Facebook PHP SDK无法使用上述示例,而无需对代码进行以下更新。

class Facebook {
...
*Line #539*
protected function makeRequest($url, $params, $ch=null) {
if (!$ch) {
  $ch = curl_init();
}

if( isset($params['doMultiPart']) ) {
    $doMultiPart= true;
    unset($params['doMultiPart']);
} else {
    $doMultiPart= false;
}

$opts = self::$CURL_OPTS;
$opts[CURLOPT_POSTFIELDS] = $doMultiPart ? $params : http_build_query($params, null, '&');
...

基本上问题是PHP SDK使用“curl_setopt_array”,如果你传递一个url编码的字符串作为选项值,它将传递数据为 application / x-www-form-urlencoded < / em> 当你真正想要的是 multipart / form-data ;要做到这一点,我们只需切换到传递选项数组,如果我们在params数组中有一个 doMultiPart 参数。

这是一个快速 hack 我把它放在一起工作,可能需要检查代码以确保它不会破坏你正在做的其他事情。否则就享受吧。