user3697768
user3697768

Reputation: 359

Post Picture Facebook - Graph API - PHP

I am trying to create a page post link for my page in Facebook via Graph API, but first I need to upload a picture so I can use it in the post.

Can someone help me to post/upload this picture that are in my computer in Facebook, and then get its link to use it to create my post?

This is the PHP code that I am using to create the page post link. It is missing the picture, that I need to upload first from my computer and than use its URL.

<?php


session_start();

require_once( 'Facebook/FacebookHttpable.php' );
require_once( 'Facebook/FacebookCurl.php' );
require_once( 'Facebook/FacebookCurlHttpClient.php' );
require_once( 'Facebook/FacebookSession.php' );
require_once( 'Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'Facebook/FacebookRequest.php' );
require_once( 'Facebook/FacebookResponse.php' );
require_once( 'Facebook/FacebookSDKException.php' );
require_once( 'Facebook/FacebookRequestException.php' );
require_once( 'Facebook/FacebookClientException.php' );
require_once( 'Facebook/FacebookOtherException.php' );
require_once( 'Facebook/FacebookAuthorizationException.php' );
require_once( 'Facebook/FacebookPermissionException.php' );
require_once( 'Facebook/FacebookServerException.php' );
require_once( 'Facebook/GraphObject.php' );
require_once( 'Facebook/GraphSessionInfo.php' );
require_once( 'Facebook/GraphUser.php' );



use Facebook\FacebookHttpable;
use Facebook\FacebookCurl;
use Facebook\FacebookCurlHttpClient;
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookClientException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\FacebookPermissionException;
use Facebook\FacebookServerException;
use Facebook\GraphObject;
use Facebook\GraphSessionInfo;
use Facebook\GraphUser;

FacebookSession::setDefaultApplication('app','password');

$session = new FacebookSession('token');

$message = 'Test';
$link = "http://www.example.com.br";
$description = 'Description';
$name = 'Name';
$caption = 'Caption';
// $picture = Here I need to put the URL from the picture posted on Facebook

    $request = new FacebookRequest(
      $session,
      'POST',
      '/page_id/feed',
      array (
        'message' => $message,
        'link' => $link,
        'description' => $description,
        'published' => 'false',
        'name' => $name,
        'caption' => $caption,
        //'picture' => $picture, 
        )
    );
    $response = $request->execute();
    $graphObject = $response->getGraphObject();

?>

Thanks

Upvotes: 2

Views: 5127

Answers (1)

Sahil Mittal
Sahil Mittal

Reputation: 20753

Step 1:

You can upload the photo to the facebook with the API /photos (this will upload a photo to your album)-

API: \POST /me/photos

Parameters:

'source' => //The photo, encoded as form data,
'no_story' => true, // no story will be generated on uploading the photo
'message' => //optional

To get the image raw data-

main.php

<html>
<body>
<form enctype="multipart/form-data" action="upload.php" method="post">
    <p><label for="source">Photo</label><input type="file" name="source" /></p>
    <p><input type="submit" value="Upload" /></p>
</form>
</body>
</html>

upload.php

if (!empty($_FILES)) {
   $uploaddir = './uploads/'; // Upload folder
   $uploadfile = $uploaddir . basename($_FILES['source']['name']);
   if (move_uploaded_file($_FILES['source']['tmp_name'], $uploadfile)) {
       $attachment =  array(
           'message'  => "hi",
           'source' => "@" . realpath($uploadfile),
           'no_story' => true
       );
       $api_response = new FacebookRequest($session,'POST','/me/photos',$attachment);
       $result = json_decode($api_response, TRUE);
       $id = $result->id;

   }    
}

We'll use this $id in the next step.


Step 2:

Make the /GET request to /{id}?fields=picture.

You'll get the picture url in the response- $response->{'picture'}


Step 3:

Use this picture url as the picture parameter with the /feed API.

Upvotes: 2

Related Questions