PHP. Загрузите веб-фотографию в альбом facebook через Graph API.

Я пытаюсь загрузить www hosting (например, http://img.ruphp.com/php/logo1w.png ) файлы на альбом facebook.

Создание альбома отлично работает, но я, кажется, не загружаю никаких фотографий. Я использую facebook php-sdk ( http://github.com/facebook/php-sdk/ ), и примеры, которые я уже пробовал:

Загрузить фотографию в альбом с помощью API-интерфейсов Facebook

Как загрузить фотографии в альбом с помощью API-интерфейса Facebook Graph

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

Вот мой код:

/* Try 1: $data = array(); $data['message'] = $attachment->post_title; $data['file'] = $attachment->guid; try { $photo = $facebook->api('/' . $album['id'] . '/photos?access_token=' . $session['access_token'], 'post', $data); } catch (FacebookApiException $e) { error_log($e); } */ // Try 2: //upload photo $file = $attachment->guid; $args = array( 'message' => 'Photo from application', ); $args[basename($file)] = '@' . realpath(file_get_contents($file)); $ch = curl_init(); $url = 'https://graph.facebook.com/' . $album['id'] . '/photos?access_token=' . $session['access_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 photo id print_r(json_decode($data,true)); 

… где attachment-> guid содержит URL-адрес фотографии.

Я почти застрял прямо сейчас …

я думаю, проблема здесь:

 $args[basename($file)] = '@' . realpath(file_get_contents($file)); 

так как вы хотите опубликовать изображение из другого источника (правильно?), вы должны временно его сохранить на своем хосте.

Мне также нужно было сделать что-то подобное, и поскольку мне пришлось обработать изображение, я использовал следующий способ:

 $im = @imagecreatefrompng('http://img.ruphp.com/php/logo1w.png'); imagejpeg($im, 'imgs/temp/temp.jpg', 85); $args['image'] = '@' . realpath('imgs/temp/temp.jpg'); 

остальное выглядит прекрасно, хотя

Я предлагаю использовать PHP php SDK , это будет проще, и код будет работать с будущими обновлениями API:


Использование Graph API php sdk:

 $fbk = new Facebook(/* conf */); $fbk->setFileUploadSupport(true); //If you are executing this in a script, and not in a web page with the user logged in: $fbk->setAccessToken(/* access token from other sources */); //To add to an album: $fbk->api("/$albumId/photos", "POST", array('source' => '@'. realpath($myPhoto), 'message' => "Nice photo")); //To upload a photo directly (the album will be created automatically): $fbk->api("/me/photos", "POST", array('source' => '@'. realpath($myPhoto), 'message' => "Nice photo")); 

Использование cURL напрямую:

Если вы действительно хотите использовать cURL, ваш код почти прав, но ошибка в массиве $ args:

 $args = array( 'message' => 'Photo from application', 'source' => file_get_contents($file) ); 

Поскольку ключ для фотоданных является source , см. Документ Facebook


Обратите внимание на @ in cURL:

Также обратите внимание, что @ in cUrl означает, что параметр будет заменен фактическими байтами файла, который следует за @ , поэтому он не требуется, если вы уже установили source параметр в фактические байты.

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

Нет, это не так.

Но вам нужно предоставить полный, общедоступный URL-адрес HTTP для изображения без @ впереди – и вам нужно использовать url имени параметра для этого значения.

https://developers.facebook.com/docs/reference/api/photo/ :

Вы также можете опубликовать фотографию, указав URL-адрес URL-адреса фотографии.