PHP - загрузите размещенную в Интернете фотографию в альбом Facebook через Graph API - PullRequest
2 голосов
/ 10 июля 2010

Я пытаюсь загрузить размещенные на хостинге www (например, http://www.google.se/intl/en_com/images/srpr/logo1w.png) файлы в альбом facebook.

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

Загрузить фотографию в альбом с API Facebook Graph

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

Я предполагаю, что загрузка 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));

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

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

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

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

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

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

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

$im = @imagecreatefrompng('http://www.google.se/intl/en_com/images/srpr/logo1w.png');
imagejpeg($im, 'imgs/temp/temp.jpg', 85);

$args['image'] = '@' . realpath('imgs/temp/temp.jpg');

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

0 голосов
/ 03 мая 2013

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

Нет, дело не в этом.

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

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

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

0 голосов
/ 03 мая 2013

Я предлагаю использовать Facebook 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 Doc


Примечание на @ в cURL:

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

...