Problems by uploading Photo to album by Facebook API - PHP

匆匆过客 提交于 2019-12-02 00:09:24

After testing few things on Graph API Explorer, Here's a working PHP Version:

<?php
# Path to facebook's PHP SDK.
require_once("facebook.php");

# Facebook application config.
$config = array(
    'appId'      => 'YOUR_APP_ID',
    'secret'     => 'YOUR_APP_SECRET',
    'fileUpload' => true # Optional and can be set later as well (Using setFileUploadSupport() method).
);

# Create a new facebook object.
$facebook = new Facebook($config);

# Current user ID.
$user_id = $facebook->getUser();

# Check to see if we have user ID.
if($user_id) {

  # If we have a user ID, it probably means we have a logged in user.
  # If not, we'll get an exception, which we handle below.
  try {

    # Get the current user access token:
    $access_token = $facebook->getAccessToken();

    # Create an album:
    $album_details = array(
            'access_token' => $access_token,
            'name'         => 'Album Name',
            'message'      => 'Your album message goes here',
    );

    $create_album = $facebook->api('/me/albums', 'POST', $album_details);

    # Get album ID of the album you've just created:
    $album_id = $create_album['id'];

    # Output album ID:
    echo 'Album ID: ' . $album_id;

    # Upload photo to the album we've created above:
    $image_absolute_url = 'http://domain.com/image.jpg';

    $photo_details = array();
    $photo_details['access_token']  = $access_token;
    $photo_details['url']           = $image_absolute_url;                        # Use this to upload image using an Absolute URL.
    $photo_details['message']       = 'Your picture message/caption goes here';

    //$image_relative_url             = 'my_image.jpg';
    //$photo_details['source']        = '@' . realpath($image_relative_url);      # Use this to upload image from using a Relative URL. (Currently commented out).

    $upload_photo = $facebook->api('/' . $album_id . '/photos', 'POST', $photo_details);

    # Output photo ID:
    echo '<br>Photo ID: ' . $upload_photo['id'];

  } catch(FacebookApiException $e) {
    // If the user is logged out, you can have a 
    // user ID even though the access token is invalid.
    // In this case, we'll get an exception, so we'll
    // just ask the user to login again here.
    $login_url = $facebook->getLoginUrl( array('scope' => 'publish_stream, user_photos')); 
    echo 'Please <a href="' . $login_url . '">login.</a>';
    error_log($e->getType());
    error_log($e->getMessage());
  }   
} else {

  # No user, print a link for the user to login and give the required permissions to perform tasks.
  $params = array(
      'scope' => 'publish_stream, user_photos', # These permissions are required in order to upload image to user's profile.
  );

  $login_url = $facebook->getLoginUrl($params);
  echo 'Please <a href="' . $login_url . '">login.</a>';

    }
?>

I have added comments so you could understand what it does by reading the code.

This works with both absolute url and relative url, I have commented out code for uploading image using relative url as you have mentioned in your comments you can't read real path of the image.

EDIT: Note: The user has to give extended permissions to your facebook application to upload images to their profile, Those permissions are publish_stream and user_photos.

Let me know if this helped you and if it works :)

    $user = $this->facebook->getUser();
        $this->facebook->setFileUploadSupport(true);
        $user_profile = $this->facebook->api('/me');
        $album_details = array(
            'message' => 'Hello everybody this is me ' . $user_profile['name'],
            'name' => 'I am so slim because I dont have money to eat....:('
        );
        $create_album = $this->facebook->api('/me/albums', 'post', $album_details);

// Upload a picture
        $photo_details = array(
            'message' => 'I am so slim because I dont have money to eat....:('
        );
        $photo_details['image'] = '@' . realpath('./a.jpg');
        $upload_photo = $this->facebook->api('/' . $create_album['id'] . '/photos', 'post', $photo_details);

Please use $facebook on $this->facebook

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!