【问题标题】:Upload image to facebook fan page using API使用 API 将图像上传到 Facebook 粉丝页面
【发布时间】:2010-09-23 12:38:23
【问题描述】:

我正在尝试使用 Facebook Graph API 通过我的应用程序将图像上传到我的粉丝页面的相册。虽然我提供了作为上传图片的参数的 albumID,但它是在我自己的个人资料中名为 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' )
    ));

请告诉我如何将图片上传到粉丝页面而不是我自己的个人资料相册。

【问题讨论】:

    标签: php facebook facebook-graph-api


    【解决方案1】:

    这是在您的 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>
    

    您可以观看complete tutorial here

    【讨论】:

    • 恐怕这个代码示例实际上并不适用于 Arvind。虽然它会返回“上传的”照片 ID,但当您尝试访问照片时,它会显示“内容当前不可用”。
    • access_token 在两小时后过期(developers.facebook.com/tools/access_token
    【解决方案2】:

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

    然后您可以尝试使用这些带有页面访问令牌的链接来发布照片:

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

    【讨论】:

    • 非常感谢您的回答。根据我从您的链接中读取的内容,此权限允许我访问用户的粉丝页面。我需要实现的是将内容上传到一个由我管理的粉丝页面。
    • @serg 兄弟你能不能给我一些例子。如何在客户 facebook 公司页面上发布单个或多个图像?并告诉我如果客户有多个 Facebook 页面,我该如何管理?
    【解决方案3】:

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

    • 您的应用无权上传到该相册。如果您使用页面访问令牌请求 /me/albums,它将列出与该页面关联的相册。这是每个专辑的 can_upload 字段,该字段为真或假(特定于您使用的访问令牌)。

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

    【讨论】:

    • 大卫,这是我能找到的关于这个主题的最佳见解之一(与许多其他人一样,我正在努力解决......)。我按照您的步骤查找“can_upload”字段,对于所有专辑,包括“Wall Photos”,它都显示为“false”。粉丝可以通过墙上常用的照片/视频标签将照片上传到页面墙上。所有此类照片都会上传到“墙照片”。但是,can_upload 字段显示为“假”,我假设通过图形 api (pageId/photos?access_token=...) 发布的多部分/表单无法正常工作。如何使用 can_upload=true 创建相册?
    • Facebook 说只有你的应用创建的相册才会有 can_upload = true,但我发现这并非完全正确。让它工作的最简单方法是在没有辅助字段的情况下发布您的照片。默认情况下,Facebook 将创建一个名为 AppName's Photo's 的相册,如果它不存在,并在那里添加照片。另外,我建议您使用 access_token 请求纯“/me”,以确保您确实使用的是页面令牌而不是您自己的用户访问令牌。
    • 非常感谢大卫。 (不过,所有这些都不允许您将照片作为您自己发布到页面或用户墙。除非我误解了,否则上述要点是围绕能够将照片作为“页面”上传到页面,对吧? )。
    • 您理解正确。我指的是将照片上传到您拥有的相册。它可能是页面上传到其相册,或者您上传到自己的相册。将照片张贴到别人的墙上是另一种情况。我不知道该怎么做。我刚刚直接在facebook上测试了一下,好像照片到了一个叫“Photos Of [TargetPage]”的相册里。但我无法找到这张专辑的链接,而且它在页面提要上显得很奇怪(没有图片的缩略图,只有一条带有链接的照片发布的消息)。
    【解决方案4】:

    我遇到了同样的难题,当我尝试将照片分享到页面时,我将其发布为用户而不是页面。当我尝试将其发布到相册中时,照片发布在我的个人资料中。 但是感谢thefreeman 我解决了这个问题 正如弗里曼所说, 您必须先取得 manage_pages 权限 然后获取提到的页面访问令牌here 然后在您的应用或网站中使用此令牌而不是用户访问令牌 最后,将照片张贴在页面墙上“我/照片” 或将其发布到页面中的特定相册中,使用“{album-id}/photos”

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多