通过图形API - multipart/form-data上传照片


Upload photo via graph API - multipart/form-data

我正在尝试使用图形API在我的页面中创建页面帖子链接。我可以创建这个帖子,但是我在发送图片时遇到了一些问题。

我试图使用我电脑里的图片,但我发现(在这里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();
?>

谢谢

您不能在计算机上使用url。在本例中,您必须使用公开可用的图像。我的意思是说图像应该在互联网上。

例如,托管在example.com域名上的图像有这样的真实路径

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

你必须以这种方式提供路径

如果你想从你的电脑上传图片并发布到Facebook上,那么使用multipart/form-data

阅读此文档以了解:Facebook Graph API

看看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);