2014-06-11 49 views
0

我正在嘗試使用Graph API在我的頁面中創建頁面發佈鏈接。我能夠創建帖子,但是我在發送圖片時會遇到一些問題。通過圖形API上傳圖片 - multipart/form-data

我試圖使用在我的電腦中的圖片,但我發現(這裏在stackoverflow),我需要使用已經在互聯網上的URL或從計算器上傳照片到Facebook首先,所以我稍後可以使用。

我查看了如何通過Graph API從我的電腦上傳照片,然後在我的文章中使用這個URL作爲圖片,但是我看到我需要使用multipart/form-data來做到這一點。

但我不明白如何使用multipart/form-data(上傳照片並獲取他們的URL)。有沒有人有一個理想如何做到這一點?

這裏的是,我現在使用的PHP代碼:

<?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 = 'file:///C:/Users/VIrgilio/Desktop/Petlove/Facebook%20Ads/Campanhas/Assento/Link/Assento-Novo.png'; //this is where the picture is in my PC 

    $request = new FacebookRequest(
     $session, 
     'POST', 
     '/page_id/feed', 
     array (
     'message' => $message, 
     'link' => $link, 
     'description' => $description, 
     'published' => 'false', 
     'name' => $name, 
     'caption' => $caption, 
//  'picture' => $picture, // the URL from my PC gives me an error, here is where I need to put the URL from the uploaded photo 
     ) 
    ); 
    $response = $request->execute(); 
    $graphObject = $response->getGraphObject(); 

?> 

感謝

+1

你可以嘗試 '圖片'=> '@'。 $圖片,但刪除文件:/// – Fosco

回答

1

您不能從您的計算機中使用的網址。在這個例子中,你必須使用公開的圖像。我的意思是說圖像應該在互聯網上。

例如,在域example.com上託管的圖像具有這樣的真實路徑

http://example.com/wp-content/themes/stack/stack-theme/images/stack-logo.png 

並且您必須以這種方式提供路徑。

如果您想從計算機上傳圖片並將其張貼到Facebook上,然後使用multipart/form-data

爲清楚起見,請閱讀本文檔:Facebook Graph API

0

看一看https://developers.facebook.com/docs/php/FacebookFile/

$fb->fileToUpload($image_path),

完整的示例:

require_once 'facebook-php-sdk-v4-5.0.0/src/Facebook/autoload.php'; 

// create instance of Facebook\Facebook class 
$facebook = new Facebook\Facebook(array(
    'app_id' => $app_id, 
    'app_secret' => $app_secret, 
    'default_graph_version' => 'v2.4', 
    'default_access_token' => $token, 
)); 
$fb = &$facebook; 

// Setup facebook post info 
$data = array(
    'source' => $fb->fileToUpload($image_path), 
    'caption' => $message, 
); 

// Send the request to Graph 
try { 
     $response = $fb->post("/$page_id/photos", $data); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
     // When Graph returns an error 
     echo 'Graph returned an error: ' . $e->getMessage(); 
      exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
     // When validation fails or other local issues 
     echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
      exit; 
} 

var_export($response);