【问题标题】:Upload photo via graph API - multipart/form-data通过图形 API 上传照片 - multipart/form-data
【发布时间】:2015-07-17 15:04:20
【问题描述】:

我正在尝试使用 Graph 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();

?>

谢谢

【问题讨论】:

  • 你可以试试 'picture' => '@' 。 $picture,但删除文件:///

标签: php facebook facebook-graph-api file-upload


【解决方案1】:

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

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

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

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

如果您想从电脑上传图片并发布到 Facebook,请使用multipart/form-data

为了清楚起见,请阅读此文档:Facebook Graph API

【讨论】:

    【解决方案2】:

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

    $fb-&gt;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);
    

    【讨论】:

      猜你喜欢
      • 2022-07-29
      • 2015-10-11
      • 2016-12-14
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2019-04-05
      • 2018-03-28
      • 2011-03-22
      相关资源
      最近更新 更多