Facebook создать приложение для страницы, чтобы загрузить фотографии в фотоальбом страницы - PullRequest
4 голосов
/ 21 августа 2011

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

Меня попросили создать страницу Facebook с приложением, которое позволит пользователям загружать фотографии на одну из страниц.альбомы.

Мне удалось создать страницу, назовем ее MyPage.Я также создал приложение MyApp и добавил приложение в профиль страницы.Теперь, когда вы просматриваете профиль MyPage, слева (вкладки), вы уже найдете MyApp.

MyApp, указывающий на страницу php в моей учетной записи хостинга.Он имеет форму с полем файла:

<form action="<?=$PHP_SELF;?>" enctype="multipart/form-data" method="post">
    <input name="MAX_FILE_SIZE" type="hidden" value="10000000" />
    <input id="fileSelect" name="fileSelect" type="file" />
    <input name="submit" type="submit" value="Upload" />
</form>

и следующий код для обработки загруженного файла и предположительно помещен в альбом MyPage:

if(count($_FILES)){
    $name = ereg_replace(' ', '_', basename($_FILES['fileSelect']['name'])); 
    $uploadFile = "uploads/" . $name; 
    if (move_uploaded_file($_FILES['fileSelect']['tmp_name'], $uploadFile)) { 
    $facebook->setFileUploadSupport(true);

    $args = array('message' => 'Photo Caption');
    $args['image'] = '@' . realpath($uploadFile);

    $data = $facebook->api('/THE_ALBUM_ID/photos', 'post', $args);

    //get rid of the original on the main server 
    unlink($uploadFile);
    }
}

Однако, когдакнопка «Загрузить» отправлена, я получаю эту ошибку, прямо в iframe MyPage для MyApp:

Fatal error: Uncaught OAuthException: (#120) Invalid album id thrown in /COMPLETE_PATH/facebook-php-sdk/src/base_facebook.php on line 1033

Даже если идентификатор альбома действительно правильный, и отображается, когда я использую GraphAPI Explorer, или graph.facebook.com/THE_ALBUM_ID

Кстати, я поставил это поверх скрипта:

require 'facebook-php-sdk/src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'THE_APP_ID',
  'secret' => 'THE_APP_SECRET',
));

Чего мне не хватает?Любая помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 09 мая 2012

Единственный способ загрузить фотографии на страницу через API Facebook - это сделать это как страницу. Для этого вам нужно сначала пройти аутентификацию на странице. Для этого вам необходимо:

  1. Аутентифицируйтесь с пользователем, которому принадлежит страница с разрешением manage_pages.
  2. Запросить страницы с

    /me/accounts?access_token=YOUR_ACCESS_TOKEN

  3. Найдите access_token соответствующей страницы.

  4. Используйте это access_token для загрузки фотографий.

Если вам нужны ПОЛЬЗОВАТЕЛИ для загрузки фотографий на страницу, вы можете получить долгоживущий токен у пользователя, которому принадлежит страница, и сохранить его, чтобы использовать этот токен вместо токенов пользователей для загрузки фотографий. Загруженная фотография не будет отображаться как загруженная пользователем, но будет отображаться загруженной страницей.

0 голосов
/ 22 августа 2011

Вы можете попытаться использовать CURL и перейти непосредственно к графику API вместо использования SDK.Ниже работает для меня.У меня есть функция, которую я передаю в переменную с именем image, которая представляет собой массив токена, файла (полный путь к файлу) и идентификатор альбома, а затем использую следующий код.

$args = array( 
   'access_token' => $image['token'], 
   'message' => 'Photo Caption', 
   'no_story' => 1
);
$args['image'] = '@' . $image['file'];
$target_url = "https://graph.facebook.com/".$image['album_id']."/photos";

$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL,$target_url);  
curl_setopt($ch, CURLOPT_POST, 1);      
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);     
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);    
curl_exec($ch); 
curl_close($ch);

Вы будетенеобходимо убедиться, что у вас есть разрешения manage_pages и upload_photos, предоставленные токену, который вы передаете в вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...