2011-03-02 3 views
1

новичок в php, пожалуйста, простите мои глупые вопросы.Facebook: php upload photo and post on wall

Я создаю свое первое приложение fb. Он позволяет пользователю просматривать свой локальный диск и выбирать фотографию. Как только он будет отправлен, он перенаправляется на следующую страницу и сначала обрабатывает сохранение на моем сервере, а затем отправляет его на стену пользователя.

Приложение не работает действительно так много. Часть, в которой пользователь просматривает и приложение, хранящее фотографию на моем сервере, работает, но она не может захватить фотографию с моего сервера и разместить ее на стене пользователя.

config.php:

<?php 
require_once 'facebook.php'; 

$app_id = ""; 
$app_key = ""; 
$app_secret = ""; 
$canvas_url = ""; 

$facebook = new Facebook(array(
'appId' => $app_id, 
'secret' => $app_secret, 
'cookie' => true 
)); 

$session = $facebook->getSession(); 

if (!$session) { 

     $url = $facebook->getLoginUrl(array(
     'canvas' => 1, 
     'fbconnect' => 0, 
     'req_perms' => 'publish_stream, user_photos, read_stream, read_friendlists' 
     )); 

     echo "<script type='text/javascript'>top.location.href = '$url';</script>"; 

    }//end if session user 
else 
{ 

     try { 

     $uid = $facebook->getUser(); 
     $me = $facebook->api('/me'); 

     $updated = date("l, F j, Y", strtotime($me['updated_time'])); 

     echo "Hello " . $me['name'] . "<br />"; 
     echo "You last updated your profile on " . $updated . "<br />" ; 
     echo "<img src='https://graph.facebook.com/".$uid."/picture'/>"; 
     }//end try getUser 
     catch (FacebookApiException $e) { 

     echo "Error:" . print_r($e, true); 

     }//end catch getUser 
}//end else user 

index.php содержит форму:

<form enctype="multipart/form-data" action="uploader.php" method="POST"> 
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> 
Choose a file to upload: <input name="uploadedfile" type="file" /><br /> 
<input type="submit" value="Upload File" /> 
</form> 

uploader.php запустить процесс

$target_path = "uploads/"; 
     $target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

     if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
      echo "The file ". basename($_FILES['uploadedfile']['name']). 
      " has been uploaded" . "<br />"; 
     } else{ 
      echo "There was an error uploading the file, please try again!" . "<br />"; 
     } 
     try { 
    $post_id = $facebook->api("/".$uid."/feed", "post", array("picture"=>$target_path)); 
    if(isset($post_id)) 
     echo "A new post to your wall has been posted with id: $post_id"; 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    } 

Я пытался много различных способов, которые я мог бы найти онлайн, но он не работает. Я попытался добавить $ facebook-> setFileUploadSupport (true); но получают ошибки.

Пожалуйста, советую мне, как я мог бы получить загрузку фотографии на стену пользователя. Большое спасибо

+0

Не facebook уже позволяют это делать? – Benubird

+0

Я хочу создать приложение, где они смогут загружать фото через него. Затем фото будет отправлено на стены, а также отправлено на мой сервер. Я хватаю эти фотографии, а затем показываю их как коллаж. – meAtStackOverflow

ответ

1

Я думаю это должно работать:

$target_folder = "uploads/"; 
$target_path = $target_folder . basename($_FILES['uploadedfile']['name']); 
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
    echo "The file ". basename($_FILES['uploadedfile']['name']). 
    " has been uploaded" . "<br />"; 

    $file_path = $target_folder . $_FILES['uploadedfile']['name']; 
    $arr = array(); 
    $arr["image"] = '@' . realpath($file_path); 
    try { 
     $post_id = $facebook->api("/".$uid."/feed", "post", $arr); 
     if(isset($post_id)) 
     echo "A new post to your wall has been posted with id: $post_id"; 
    } catch (FacebookApiException $e) { 
     error_log($e); 
    } 
} else{ 
    echo "There was an error uploading the file, please try again!" . "<br />"; 
} 
+0

спасибо за помощь, я попытался реализовать свой метод, но он все еще не работает. – meAtStackOverflow

+0

Благодарим вас за помощь! – meAtStackOverflow

+0

@meAtStackOverflow: Добро пожаловать! разделить то, что не работает с вашей стороны, чтобы другие пользователи учились на вашем опыте? – ifaour

2

Здравствуйте, братан этот код работает для меня точно. что этот код вы сделаете, он разместит сообщение в вашем альбоме или в альбоме приложения.

 
if(isset($_POST['upload'])) 
{ 
    if (isset($_FILES["file"]) && $_FILES["file"]["error"]==0) 
    { 
     $file='images/'.$_FILES["file"]['name']; 
     if(move_uploaded_file($_FILES["file"]["tmp_name"],$file)) 
     { 
      $facebook->setFileUploadSupport(true); 
      $post_data = array(
      'name'=>$_POST['album'], 
      'description'=>$_POST['album'] 
      ); 
      $data['album'] = $facebook->api("/me/albums", 'post', $post_data); 
      //$file = $file_name; 
      $post_data = array(
      "message" => $_POST['message'], 
      "source" => '@' . realpath($file) 
      ); 
      $album_id = $data['album']['id']; 
      $data['photo'] = $facebook->api("/$album_id/photos", 'post', $post_data); 
     } 
    } 
    /**/ 

} 

При загрузке любой фотографии из приложения facebook создает альбом в вашем профиле, названном вашим приложением. Но этот код выведет изображение в ваш альбом.

$_POST['album']
- это название альбома, которое я вводил в текстовое поле. Затем я просто разместил форму и загрузил фотографию. Я надеюсь, что это поможет вам

+0

спасибо за помощь. Я считаю, что что-то не так с моими настройками. Не очень уверен, почему мой не может работать. Но действительно спасибо за помощь. – meAtStackOverflow

0
$session = $facebook->getSession(); 
use getUser(); 
+1

Пожалуйста, добавьте некоторые детали, чтобы сделать ваш ответ более полезным. – akjoshi

1

Заменить getSession() с getUser() , потому что старые версии PHP не определяют функцию getSession().

0

Использовать этот код и она будет прекрасно работать для вас, как Facebook Документация Здесь How-To: Use the Graph API to Upload Photos to a user’s profile говорит

<?php 

     $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>'; 
     } 
?> 

Пример ответа

{ 
    "id": "1001207389476" 
}