Я пытаюсь загрузить 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-адреса фотографии.