使用API上传图片到Facebook粉丝页面

9

我正在尝试通过Facebook Graph API将图片上传到我的粉丝专页的相册。虽然我提供了相册ID作为上传图片的参数,但它却被上传到了名为“APPLICATION_NAME Photos”的相册中,该相册位于我的个人资料中。粉丝专页的相册仍然是空的。我还尝试使用我的粉丝专页的pageID而不是albumID进行发送,但结果是相同的。我用于上传的代码如下:

$fb_pfoto = $facebook->api('/' . $albumID . '/photos','POST', array(
       'access_token' => $session['access_token'],
       'message'      => 'Caption',
       'source'       => '@' . realpath( '/path/to/image.jpg' )
    ));

请给我一些想法,如何将图片上传到粉丝页面而不是我的个人资料相册。
4个回答

12

这是上传照片到你的Facebook粉丝页的脚本:

<html>
<head>
<title>WebSpeaks.in | Upload images to Facebook</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
require_once 'library/facebook.php';
$facebook = new Facebook(array(
 'appId'  => $app_id,,
 'secret' => $app_secret,
 'fileUpload' => true
));


//It can be found at https://developers.facebook.com/tools/access_token/
$access_token = '<Your access token>';

$params = array('access_token' => $access_token);

//The id of the fanpage
$fanpage = '330299184793';

//The id of the album
$album_id ='10150418901414794';

//Replace arvind07 with your Facebook ID
$accounts = $facebook->api('/arvind07/accounts', 'GET', $params);

foreach($accounts['data'] as $account) {
 if( $account['id'] == $fanpage || $account['name'] == $fanpage ){
  $fanpage_token = $account['access_token'];
 }
}


$valid_files = array('image/jpeg', 'image/png', 'image/gif');

if(isset($_FILES) && !empty($_FILES)){
 if( !in_array($_FILES['pic']['type'], $valid_files ) ){
  echo 'Only jpg, png and gif image types are supported!';
 }else{
  #Upload photo here
  $img = realpath($_FILES["pic"]["tmp_name"]);

  $args = array(
   'message' => 'This photo was uploaded via WebSpeaks.in',
   'image' => '@' . $img,
   'aid' => $album_id,
   'no_story' => 1,
   'access_token' => $fanpage_token
  );

  $photo = $facebook->api($album_id . '/photos', 'post', $args);
  if( is_array( $photo ) && !empty( $photo['id'] ) ){
   echo '<p><a target="_blank" href="http://www.facebook.com/photo.php?fbid='.$photo['id'].'">Click here to watch this photo on Facebook.</a></p>';
  }
 }
}

?>
 <!-- Form for uploading the photo -->
 <div class="main">
  <p>Select a photo to upload on Facebook Fan Page</p>
  <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
  <p>Select the image: <input type="file" name="pic" /></p>
  <p><input class="post_but" type="submit" value="Upload to my album" /></p>
  </form>
 </div>
</body>
</html>
你可以在这里观看完整的教程。

1
很抱歉,Arvind,这段代码示例实际上并不能正常工作。虽然它会返回“已上传”的照片ID,但当尝试访问该照片时,会显示“内容当前不可用”。 - Dean
access_token 两小时后过期(https://developers.facebook.com/tools/access_token/) - billy

9

不知道这是否有帮助,但也许您需要请求“manage_pages”扩展权限,然后使用返回的页面访问令牌发布图片。您可以在此处简要了解此过程:here

然后,您可以尝试使用页面访问令牌发布照片的链接:

/me/photos
/<page_id>/photos
/<album_id>/photos

非常感谢您的回答。根据我从您提供的链接中所了解到的,这个权限允许我访问用户的粉丝页面。我的目标是将内容上传到一个由我管理的单一粉丝页面。 - o15a3d4l11s2
@serg 兄弟,你能给我提供一些例子吗?我该如何在客户的 Facebook 公司页面上发布单张或多张图片?还有,请告诉我如果客户有多个 Facebook 页面,我该如何管理? - Kunwar Siddharth Singh

4

我最好的猜测是以下两种可能性之一:

  • 你的应用程序没有上传到该相册的权限。如果您使用页面访问令牌请求/me/albums,则会列出与该页面相关联的相册。每个相册都有一个can_upload字段,该字段为true或false(特定于您正在使用的访问令牌)。

    或者

  • 您正在使用与您个人帐户关联的访问令牌,而不是属于该相册所属的页面。以下是有关如何作为页面进行身份验证而不是拥有该页面的用户的信息:http://developers.facebook.com/docs/authentication/pages/


David,这是我在这个主题上找到的最好见解之一(就像许多其他主题一样,我也在挣扎...)。 我按照您的步骤查找“ can_upload”字段,发现所有相册都显示为“ false”,包括“墙上照片”。 粉丝能够通过墙上的常规照片/视频选项卡上传照片到页面墙上。 所有此类照片都上传到“墙上照片”。 然而,“ can_upload”字段显示为“ false”,我认为通过图形API(pageId / photos?access_token = ...)进行的多部分/表单发布将不起作用。 如何创建可以上传的相册? - user1055761
Facebook 表示,只有由您的应用程序创建的相册才会具有 can_upload = true 属性,但我发现这并不总是正确的。让它工作的最简单方法是在不使用 aid 字段的情况下发布照片。如果不存在,Facebook 默认会创建一个名为“AppName's Photo”的相册,并将该照片添加到其中。此外,我建议使用 access_token 请求纯粹的“/me”,以确保您确实使用页面令牌而不是自己的用户访问令牌。 - thefreeman
非常感谢David。然而,所有这些并不允许您将照片作为自己发布到页面或用户墙上。除非我误解了,上面的要点是关于能够将照片上传到页面作为“页面”,对吗? - user1055761
你理解得很正确。我指的是上传照片到你自己的相册。它可以是页面上传到其相册,或者你上传到自己的相册。在别人的墙上发布照片是另一种情况。我不知道怎么做。我在Facebook上直接进行了测试,似乎照片被放入了一个名为“[TargetPage]的照片”相册中。我无法找到此相册的链接,并且在页面的动态中出现了奇怪的情况(图像没有缩略图,只有一条带有链接的发布照片的消息)。 - thefreeman

1
我曾经遇到了同样的问题,当我尝试分享一张照片到页面时,我作为用户发布了它而不是作为页面。当我尝试将其发布在相册中时,该照片被发布在我的个人资料中。 但多亏了thefreeman,我解决了这个问题。 正如thefreeman所说, 你必须先获得manage_pages权限, 然后像这里here所述一样获取页面访问令牌 然后在你的应用程序或网站中使用此令牌代替用户访问令牌 最后,要在页面墙上发布照片“me/photos” 或将其发布到页面中的特定相册中,请使用“{album-id}/photos”

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