2014-06-11 50 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);