上传图片到特定的Facebook相册。

5

我可以通过向以下地址发送数据,使用Facebook Graph API 创建相册:


http://graph.facebook.com/ALBUM_ID/albums

它会返回一个id,但不是相册的id。
我通过两种方式确认了它:
1. 前往该相册,得到的aid与我收到的id不同。 2. 发布 “http://graph.facebook.com/{ALBUM_ID_I_RECIEVED}/photos”,但照片从未发布到新创建的相册中,而是发布到默认应用程序相册中。
我需要知道真正的相册ID,以便上传图片到新创建的相册。

+1 for "Hi stackoverflow" - 让我的一天都美好了! - RabidFire
2个回答

9

新的php-sdk运行良好,我刚刚测试过了,以下是我的评论:

1.确保您拥有正确的扩展权限,即Album创建和Photo上传所需的publish_stream权限。

2.使用以下代码创建相册后,您将收到相册ID:

$post_data = array(
    'name'=>"My Test Album",
    'description'=>"My Test Album Desc"
    );
$data['album'] = $this->facebook->api("/me/albums", 'post', $post_data);  

附言:我确认这个ID不是在浏览Facebook时看到的ID。

3.现在我们需要上传带有相册“参考”ID的图像:

$file = FCPATH . "assets/img/small1.jpg";
$post_data = array(
    "message" => "My photo caption",
    "source" => '@' . realpath($file)
);
$album_id = "473425002142";
$data['photo'] = $this->facebook->api("/$album_id/photos", 'post', $post_data);  

附言:常量FCPATH是Codeigniter常量,您可以使用$_SERVER ['DOCUMENT_ROOT']或您熟悉的任何方法。

结果如下:
alt text


什么是 $album_id,你如何获取它? - Sourav
@Sourav:如果你想上传图片到特定的相册,需要指定它,而不是调用“/me/photos”。获取相册ID的方法是通过调用“/me/albums”连接。 - ifaour
$album_id = "473425002142"; 这行代码中,您已经将 album_id 写死了,如何使其动态化?[请发布代码],谢谢。 - Sourav
@Sourav,如何使其动态化完全取决于您。您需要查询“/me/albums”连接,列出检索到的相册,然后选择要传递的相册。 - ifaour

2

我曾经遇到过同样的问题,只不过是与活动相关。Facebook并没有返回实际的事件ID(在你的情况下是相册ID),而是存在一个小偏移量(最大为10)。因此,以下是你需要按照的工作流程才能使其正常工作:

  1. 发布相册。将返回的(虚假的)相册ID fb_aid 保存到数据库中。
  2. 查询当前FB登录用户的所有已发布相册。
  3. 循环遍历返回的相册列表。
  4. 通过测试偏移量是否小于10来确定实际的相册ID。
  5. 将实际的相册ID保存在数据库中。

$fbAlbums = $this->facebook->api(array('method' => 'photos.getalbums'));
$myAlbums = $this->Album->find('all');
for ($i = 0; $i < count($fbAlbums); ++$i) {    
    foreach ($myAlbums as $myAlbum) {
        $aidOffset = abs($fbAlbums[$i]['aid'] - $myAlbum['Album']['fb_aid']);
        if ($aidOffset != 0     // Prevents fixing an already fixed album id
            && $aidOffset < 10  // Checks if this is a FB ID Screw up
           ) {
            $myAlbum['Album']['fb_aid'] = $fbAlbums[$i]['aid'];
            $this->Album->save($myAlbum);
            break; // Little optimization
        }
    }
 }

现在你的数据库已经更新了专辑ID。万岁!开发者: 1. Facebook API: 0.

我知道这不够美观,我知道它存在许多潜在问题。但在Facebook重视修复其API之前,它能够完成工作。


我认为你正在使用旧的Rest API,我不确定它是否有助于Graph API,但即使如此,我也会尝试,因为我卡住了。 - Imran Naqvi
@Imran - 是的,我是。要使用最新的图形 API,你可以直接使用类似这样的代码:$this->facebook->api('/me/albums')); - RabidFire

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