簡體   English   中英

Facebook API SDK 4.0-將照片發布到Facebook

[英]Facebook API sdk 4.0 - post a photo onto facebook

我正在嘗試創建一個應用程序,用戶可以在其中瀏覽照片並將照片從其計算機提交到其Facebook。 為此,他們將首先必須將其照片上傳到服務器,然后使用Facebook請求將其發布到Facebook。 我正在使用multipart / form-data。

到目前為止,這是我為此准備的,假設我有一個有效的會話,即我的api請求:

$request = new Facebook{
$session,
'POST',
'/me/photos',
array (
    'source' => '{image-data}',
    )
    );
    $response = $request->execute();
    $graphObject = $response->getGraphObject();
    /* handle the result*/

我不確定用什么替換圖像數據。

對於上傳的照片,我的代碼如下:

   if(isset($_POST['submit'])){

$file_type = $_FILES['file']['type']; //returns the file type

$allowed = array("image/jpeg", "image/gif", "image/png", "image/jpg"); //specifies allowed file types
if(!in_array($file_type, $allowed)) {
        $error_message = 'Only jpeg, jpg, gif, and png files are allowed. <br> 
        Please click back and try again.';
        echo $error_message;

        exit();
    }

$name       = $_FILES['file']['name'];  //original path of the uploaded file
$temp_name  = $_FILES['file']['tmp_name'];  //contains the path to the temporary file that resides on the server
if(isset($name)){
    if(!empty($name)){      
        $location = 'uploads/'; //save photo to the folder: uploads
        if(move_uploaded_file($temp_name, $location.$name)){
            echo 'Photo was successfully uploaded.';
        }
    }       
}  else {
    echo 'Photo was unsuccessfully uploaded, click back and try again.';
 }
 }

我是Facebook api的新手,也是編碼的新手。 任何幫助或建議,將不勝感激。 謝謝。

整個代碼:

     <?php

  require_once( 'Facebook/HttpClients/FacebookHttpable.php' );
  require_once( 'Facebook/HttpClients/FacebookCurl.php' );
  require_once( 'Facebook/HttpClients/FacebookCurlHttpClient.php' );

  require_once( 'Facebook/Entities/AccessToken.php' );
  require_once( 'Facebook/Entities/SignedRequest.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/FacebookServerException.php' );
  require_once( 'Facebook/FacebookOtherException.php' );
  require_once( 'Facebook/FacebookAuthorizationException.php' );
  require_once( 'Facebook/GraphObject.php' );
  require_once( 'Facebook/GraphSessionInfo.php' );


  use Facebook\HttpClients\FacebookHttpable;
  use Facebook\HttpClients\FacebookCurl;
  use Facebook\HttpClients\FacebookCurlHttpClient;

  use Facebook\Entities\AccessToken;
  use Facebook\Entities\SignedRequest;
  use Facebook\FacebookSession;
  use Facebook\FacebookRedirectLoginHelper;
  use Facebook\FacebookRequest;
  use Facebook\FacebookResponse;
  use Facebook\FacebookSDKException;
  use Facebook\FacebookRequestException;
  use Facebook\FacebookServerException;
  use Facebook\FacebookOtherException;
  use Facebook\FacebookAuthorizationException;
  use Facebook\GraphObject;
  use Facebook\GraphSessionInfo;


 // start session
 session_start();

// init app with app id and secret
FacebookSession::setDefaultApplication( 'xxxxxxxxxx','xxxxxxxxxxxxx' );

// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper( 'https://apps.facebook.com/myapp' );

// see if a existing session exists
if ( isset( $_SESSION ) && isset( $_SESSION['fb_token'] ) ) {
    // create new session from saved access_token
    $session = new FacebookSession( $_SESSION['fb_token'] );

// validate the access_token to make sure it's still valid
try {
    if ( !$session->validate() ) {
    $session = null;
    }
} catch ( Exception $e ) {
// catch any exceptions
$session = null;
    }
}     

if ( !isset( $session ) || $session === null ) {
    // no session exists

try {
$session = $helper->getSessionFromRedirect();
    } catch( FacebookRequestException $ex ) {
    // When Facebook returns an error
    // handle this better in production code
        print_r( $ex );
            } catch( Exception $ex ) {
// When validation fails or other local issues
// handle this better in production code
    print_r( $ex );
}

}

// see if we have a session
if ( isset( $session ) ) {

// save the session
$_SESSION['fb_token'] = $session->getToken();
// create a session using saved token or the new one we generated at login
$session = new FacebookSession( $session->getToken() );

// graph api request for user data
$request = new FacebookRequest( $session, 'GET', '/me' );
$response = $request->execute();
// get response
$graphObject = $response->getGraphObject()->asArray();



// print logout url using session and redirect_uri (destroy the session)
echo '<a href="' . $helper->getLogoutUrl( $session, 'http://localhost/app/index.php', session_destroy() ) .    '">Logout</a>';

} else {
  // show login url
  echo '<a href="' . $helper->getLoginUrl( array( 'email', 'user_friends', 'publish_actions' ) ) . '">Login</a>';

}


 ?>

  <html>
     <head>
        <title> My App</title>
    </head>

    <body>
    <div>


    <form method="post" enctype="multipart/form-data">
    Please select a photo to upload <input type="file" name="file" id="file"><br><br>
    <input type="submit" value="Upload" name="submit">

    </form>
    </div>

   </body>
 </html>
 <?php
    if(isset($_POST['submit'])){

    $file_type = $_FILES['file']['type']; //returns the file type

    $allowed = array("image/jpeg", "image/gif", "image/png", "image/jpg"); //specifies allowed file types
    if(!in_array($file_type, $allowed)) {
        $error_message = 'Only jpeg, jpg, gif, and png files are allowed. <br> 
        Please click back and try again.';
        echo $error_message;

        exit();
    }

     $name       = $_FILES['file']['name'];  //original path of the uploaded file
     $temp_name  = $_FILES['file']['tmp_name'];  //contains the path to the temporary file that resides on the server
     if(isset($name)){
     if(!empty($name)){      
        $location = 'uploads/'; //save photo to the folder: uploads
        if(move_uploaded_file($temp_name, $location.$name)){
            echo 'Photo was successfully uploaded.';
        }
    }       
 }  else {
    echo 'Photo was unsuccessfully uploaded, click back and try again.';
 }

$session = new FacebookSession( $_SESSION['fb_token']);
$request = new FacebookRequest(
 $session,
 'POST',
 '/me/photos',
 array (
    'source' => file_get_contents($location.$name),
 )
 );

  $response = $request->execute();
  $graphObject = $response->getGraphObject();
    print_r($response);
  }

    $token = $_GET['code'];
    echo $token;


     ?>

好的,您的代碼有兩個主要問題。

首先

從您的代碼中刪除session_destroy() 這就是刪除會話的原因。 然后,您可以刪除$session = new FacebookSession( $_SESSION['fb_token']); 從您的代碼。 您只需要這樣做一次!

更改:

echo '<a href="' . $helper->getLogoutUrl( $session, 'http://localhost/app/index.php', session_destroy() ) .    '">Logout</a>';

echo '<a href="' . $helper->getLogoutUrl( $session, 'http://localhost/app/index.php' ) .    '">Logout</a>';

第二

@附加到您的source ,您將發現圖像正確上傳。 例如:

$request = new FacebookRequest(
  $session,
  'POST',
  '/me/photos',
  array (
    'source' => new CURLFile( $location.$name ),
  )
);

CURLFile僅適用於PHP 5.5+。 對於早期版本的PHP,請將源設置為:

'source' => '@' . $location.$name

假設用戶已正確上傳圖像和$location.$name是路徑:

 $request = new FacebookRequest(
     $session,
     'POST',
     '/me/photos',
     array (
        'source' => file_get_contents($location.$name),
     )
  );

 $response = $request->execute();
 $graphObject = $response->getGraphObject();

另一個可能性是通過URL:

 $request = new FacebookRequest(
   $session,
   'POST',
   '/me/photos',
   array (
     'url' => $the_url_to_the_image,
   )
 );

 $response = $request->execute();
 $graphObject = $response->getGraphObject();

上載之后由您執行的API調用由用戶完成,但這僅是合乎邏輯的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM