使用Facebook的图形API上传照片到相册

43

我正在尝试熟悉Facebook的新Graph API,目前我可以轻松获取和写入一些数据。

但我遇到了一个问题,就是如何上传图片到相册的文件夹,我找不到足够好的文档。

根据http://developers.facebook.com/docs/api#publishing,您需要提供message参数,但我不确定如何构建它。

我阅读过的旧资源有:

如果有人能够提供更多信息或帮助我使用Facebook Graph API上传照片到相册,请回复!

3个回答

49

以下是使用PHP Facebook Graph API上传照片的各种方法。这些示例假定您已经实例化了$facebook对象并拥有有效的会话。

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

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

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

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

2 - 上传到目标相册

这个例子将会把照片上传到一个特定的相册。

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

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

2
不要忘记添加:$facebook->setFileUploadSupport(true); - AbeEstrada
1
@Abe 是的,没错。你也可以在Facebook构造函数中指定它:$facebook = new Facebook(array(
'appId' => 'ID',
'secret' => 'SECRET',
'fileUpload' => true,
'cookie' => true));
- Brody Robertson
3
专辑 ID 可以不是我的专辑,而是朋友或页面的专辑吗? - Van Du Tran
有没有办法发送“图像/资源句柄”而不是“真实路径”? - Zain Shaikh

23

这是对我有效的代码:

//upload photo
$file= '/path/filename.jpg';
$args = array(
   'message' => 'Photo from application',
);
$args[basename($file)] = '@' . realpath($file);
$ch = curl_init();
$url = 'http://graph.facebook.com/'.$album_id.'/photos?access_token='.$access_token;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$data = curl_exec($ch);
//returns the photo id
print_r(json_decode($data,true));

文档链接:http://developers.facebook.com/docs/reference/api/photo


5
你是怎么知道的?有来自Facebook.com的文献吗? - Billy
我也想知道你是在哪里找到的!除非你自己写的? - Pier-Luc Gendreau
这个对你还有效吗?最近在FB平台上似乎存在照片上传问题。 - marcgg
1
有关使用JavaScript SDK上传照片的任何想法吗? - nishantcm

7

要让图形API与PHP配合工作,您需要执行一些操作。这段代码可以使用。请注意fileUpload => true...

我也从未能够通过JavaScript使其正常工作,所以我正在使用ajax进行操作:

require './facebook.php';

$facebook = new Facebook(array(  
  'appId'  => 'ID',  
  'secret' => 'SECRET',  
  'fileUpload' => true,  
  'cookie' => true // enable optional cookie support  
));  


$facebook->setFileUploadSupport(true);  

# File is relative to the PHP doc  
$file = "@".realpath("../../_images/stuff/greatness.jpg");  

$args = array(  
    'message' => 'Photo Caption',  
    "access_token" => "urtoken",  
    "image" => $file  
);  


$data = $facebook->api('/ALBUMID_GOES_HERE/photos', 'post', $args);
if ($data) print_r("success");


谢谢 - 这就是我在使用PHP SDK时忘记设置setFileUploadSupport为true的原因! - thaddeusmt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接