Php 如何使用Facebook Graph API将照片上载到相册
代码如下:Php 如何使用Facebook Graph API将照片上载到相册,php,facebook,Php,Facebook,代码如下: $file= 'bbbb.jpg'; $data = array( basename($file) => "@".realpath($file), "caption" => "Uploaded using graph api", "aid" => '13595', "access_token" => $accessToken, 'method
$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数据失败
怎么办?您的$data数组应该有“message”而不是“caption”, 另外,删除“帮助”、“方法”和“访问令牌”
您的$data必须包含文件数据和“message”,即它
$sds =$facebook->api('/me/13595/photos', 'POST', $data);
其中,不使用13595,只需将变量与相册辅助一起使用即可
此外,如果需要,访问令牌最好附加到api uri,如下所示:
$sds =$facebook->api('/me/13595/photos?access_token='.$access_token, 'POST', $data);
另外,如果PHPSDK不适合您,那么如果您的php安装支持,我已经成功地使用了cURL。在这种情况下,请参见位于的cURL示例,这里有一些使用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);
如果没有以下代码更新,最新版本的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编码字符串作为选项值传递给它,那么当您真正想要的是多部分/表单数据时,它将以应用程序/x-www-form-urlencoded的形式传递数据;为此,如果params数组中有一个doMultiPart的参数,我们只需切换到传入选项数组
这是一个快速的破解我把它放在一起让它工作起来,可能需要检查代码以确保它不会破坏你正在做的任何事情。否则请欣赏。此错误似乎与您尝试上载的文件的权限有关,您确定运行PHP脚本的用户具有该文件的权限吗?