1

我正在创建一个FaceBook应用程序,用户在其中选择多个图像,应用程序会从它们生成一个图像(PHP)。我给生成的图像 asemi-random name - $storage_url = $rack_directory . "rack_" . mt_rand() . mt_rand() . ".png"; (e.g. rack_2128639756968968165.png)并临时存储它。

我希望用户能够Facebook直接从页面而不是downloading然后将生成的图像上传到他们的个人资料uploading

在查看此站点以及其他站点中的答案时,看起来我可以使用它:

   $app_id = "YOUR_APP_ID";
   $app_secret = "YOUR_APP_SECRET";
   $post_login_url = "YOUR_POST-LOGIN_URL";
   $album_name = 'YOUR_ALBUM_NAME';
   $album_description = 'YOUR_ALBUM_DESCRIPTION';

   $code = $_REQUEST["code"];

   //Obtain the access_token with publish_stream permission 
   if(empty($code))
     {
       $dialog_url= "http://www.facebook.com/dialog/oauth?"
       . "client_id=" . $app_id 
       . "&redirect_uri=" . urlencode($post_login_url)
       . "&scope=publish_stream";
       echo("<script>top.location.href='" . $dialog_url . 
       "'</script>");
   } 
   else {
     $token_url= "https://graph.facebook.com/oauth/"
     . "access_token?"
     . "client_id=" .  $app_id 
     . "&redirect_uri=" . urlencode( $post_login_url)
     . "&client_secret=" . $app_secret
     . "&code=" . $code;
     $response = file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);
     $access_token = $params['access_token'];

     // Create a new album
     $graph_url = "https://graph.facebook.com/me/albums?"
     . "access_token=". $access_token;

     $postdata = http_build_query(
     array(
      'name' => $album_name,
      'message' => $album_description
        )
      );
     $opts = array('http' =>
     array(
      'method'=> 'POST',
      'header'=>
        'Content-type: application/x-www-form-urlencoded',
      'content' => $postdata
      )
     );
     $context  = stream_context_create($opts);
     $result = json_decode(file_get_contents($graph_url, false, 
       $context));

     // Get the new album ID
     $album_id = $result->id;

     //Show photo upload form and post to the Graph URL
     $graph_url = "https://graph.facebook.com/". $album_id
       . "/photos?access_token=" . $access_token;
     echo '<html><body>';
     echo '<form enctype="multipart/form-data" action="'
     .$graph_url. ' "method="POST">';
     echo 'Adding photo to album: ' . $album_name .'<br/><br/>';
     echo 'Please choose a photo: ';
     echo '<input name="source" type="file"><br/><br/>';
     echo 'Say something about this photo: ';
     echo '<input name="message" type="text"
        value=""><br/><br/>';
     echo '<input type="submit" value="Upload" /><br/>';
     echo '</form>';
     echo '</body></html>';
  }

...生成一个独特的相册并上传图片...但是 - 我不想显示一个让用户浏览并上传的表单(在他们右键/控制单击并保存页面中的图像之后)。只需获取页面上显示的现有生成图像并提交即可。

有没有我可以使用的功能来完成这个过程并且唯一的表单要求是提交和上传?

谢谢。

4

1 回答 1

1

您需要的是 Facebook SDK:https://developers.facebook.com/docs/reference/php/

这使得所有这些“图形”调用变得更加简单。

从该页面粘贴:

// Load the facebook SDK
require_once("facebook.php");

$config = array();
$config['appId'] = 'YOUR_APP_ID';
$config['secret'] = 'YOUR_APP_SECRET';
$config['fileUpload'] = false; // optional

$facebook = new Facebook($config);

try { 
   $uid = $facebook->getUser();
catch (FacebookApiException $e) { 
   // Not logged on - you should log them on. Various methods, but redirect to $facebook->getLoginURL() is simplest. Docs: https://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/
} 

用户登录后,您也可以通过 SDK 上传:

// Now upload the file
try { 
    $facebook->setFileUploadSupport('http://MyDomain.com/'); 
    $response = $facebook->api( 
      '/me/photos/', 
      'post', 
      array( 
        'message' => 'Image Cpation', 
        'source' => '@/path/to/image' // @-sign must be the first character 
      ) 
    ); 
  } 
  catch (FacebookApiException $e) { 
    error_log('Could not post image to Facebook.'); 
  } 

您可以使用专辑 ID 代替“我”直接上传到特定专辑。但是,通过 SDK 进行工作将比使用图形调用手动尝试所有帮助更多!

抱歉,这不是一个完整的“这里是代码”答案(还有一些工作要做),但这应该可以帮助您在不提示用户的情况下上传。

于 2012-09-07T04:58:10.860 回答