Разработка FB - Загрузить фото в профиль пользователя

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

  <?php

   include_once 'facebook.php';

       $facebook = new Facebook(array(
       'appId'  => 'ID',
       'secret' => 'SECRET',
       'cookie' => true,
       'domain' => 'DOMAIN',
       'fileUpload' => 'true'
       ));



      $session = $facebook->getSession();

      if (!$session) {

       $loginUrl = $facebook->getLoginUrl(array(
        'canvas' => 1,
        'fbconnect' => 1,
        'display' => 'page',
        'req_perms' => 'user_likes, publish_stream',
        'next' => 'NEXTURL'
   ));

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

    } else{


     try {

       $uid = $facebook->getUser();
       $me = $facebook->api('/me');
       $token = $session['access_token'];//here I get the token from the $session array
       $album_id = 'ALBUM ID';  /// what should I write here?

       //upload your photo
     $file= 'logo.png';
    $args = array(
       'message' => 'Photo from app',
    );
    $args[basename($file)] = '@' . realpath($file);

   $ch = curl_init();
  $url = 'https://graph.facebook.com/'.$album_id.'/photos?access_token='.$token;
   curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
   $data = curl_exec($ch);

  //returns the id of the photo you just uploaded
  print_r(json_decode($data,true));



  } catch(FacebookApiException $e){
  echo "Error:" . print_r($e, true);
  }
  }
  ?>

заранее спасибо


person Luka Javakhishvili    schedule 28.05.2012    source источник
comment
Дайте определение «не работает». Вы видите ошибки, предупреждения, другие выходные данные   -  person Ja͢ck    schedule 28.05.2012
comment
ошибок нет. Сначала пользователь нажимает «Перейти к приложению», затем дает разрешение publish_stream, а затем браузер перенаправляется на php-страницу, которая абсолютно прозрачна/пуста. Подскажите, что мне написать в 1) $album_id; 2) $file= 'logo.png'; ‹-- это правильно? я должен упомянуть здесь URL фотографии? заранее спасибо   -  person Luka Javakhishvili    schedule 28.05.2012


Ответы (3)


Вы должны добавить свойство fileUpload==true к объекту Facebook:

$facebook = new Facebook(array(
    'appId'  => 'ID',
    'secret' => 'SECRET',
    'cookie' => true,
    'domain' => 'DOMAIN',
    'fileUpload' => true
));

ОБНОВИТЬ:

Я всегда использую этот код для загрузки фотографий:

$photo= $facebook->api(array('method'=>'photos.upload',
            'caption'=>SOME_TEXT,
            'file'=>'@'.$file));
person strange-corner    schedule 28.05.2012
comment
Вы имеете в виду, что это работает сейчас? Тогда отметьте вопрос как отвеченный. - person strange-corner; 28.05.2012
comment
Нет, я имею в виду, что он уже добавлен.. Скажите, что я должен написать в 1) $album_id; 2) $file= 'logo.png'; ‹-- это правильно? я должен упомянуть здесь URL фотографии? заранее спасибо - person Luka Javakhishvili; 28.05.2012
comment
Я обновил свой ответ. С этим кодом фотографии попадают в альбом APP_NAME Photos. Я думаю, $file правильный. - person strange-corner; 28.05.2012
comment
Неустранимая ошибка: Uncaught CurlException: 26: не удалось открыть файл, брошенный в /home/tychetec/public_html/app/facebook.php в строке 622, теперь он показывает эту ошибку - person Luka Javakhishvili; 28.05.2012
comment
я снова отредактировал. вы заменили мою переменную $img именем вашей переменной $file. Сообщение об ошибке выглядит так. - person strange-corner; 28.05.2012
comment
Массив ( [ошибка] => Массив ( [сообщение] => (# 240) target_id ссылается на неактивного пользователя [тип] => OAuthException [код] => 240 )) - person Luka Javakhishvili; 28.05.2012
comment
target_id означает идентификатор альбома? - person Luka Javakhishvili; 28.05.2012
comment
Я не знаю, что указать в $album_id = ''; - person Luka Javakhishvili; 28.05.2012
comment
Я думаю, target_id означает идентификатор пользователя. Возможно, ваша сессия истекла. - person strange-corner; 28.05.2012
comment
Мой друг, он создал альбом для загрузки фотографий и загрузил его туда с текстом SOME_TEXT, спасибо!!! - person Luka Javakhishvili; 28.05.2012

Вы можете попробовать это:

$args = array('message' => $mess,
  );
  $args['image'] = '@' . realpath($file.".jpeg");


  $facebook->setFileUploadSupport(true);
     try
     {
        if(!isset($_GET['a']))
            {
            $data = $facebook->api('/me/photos', 'post', $args);
            }
          //  echo "<br/>Image posted. <a href=\"http://www.facebook.com/photo.php?fbid=".$data['id']."\" target=\"_blank\">Click here to view</a>. Thanks for using this application.";
      }
      catch(FacebookApiException $e)
      {
        var_dump($e);
      }

Это прямая выдержка из рабочего кода.

person Akshat Goel    schedule 28.05.2012

попробуй это

$args = array('message' => 'Photo Upload');
$args['image'] = '@' . realpath($FILE_PATH);
$data = $facebook->api("/{$album_id}/photos", 'post', $args);

Примечание: если вы хотите создать новый альбом с таким же именем, как и имя приложения, и загрузить его туда, вам нужно использовать

$facebook->api("/me/photos", 'post', $args);
person Raquibul Islam    schedule 28.05.2012