php - español - galeria facebook en mi web
PHP: sube una foto alojada en la web al álbum de Facebook a través de Graph API (3)
Creo que el problema está aquí:
$args[basename($file)] = ''@'' . realpath(file_get_contents($file));
ya que desea publicar una imagen desde otra fuente (¿no?), debe guardarla temporalmente en su propio host.
También tuve que hacer algo como esto, y como tuve que procesar la imagen, utilicé la siguiente manera:
$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'');
el resto se ve bien aunque
Estoy intentando cargar archivos alojados en www (por ejemplo, http://www.google.se/intl/en_com/images/srpr/logo1w.png ) en un álbum de Facebook.
Crear un álbum funciona bien, pero parece que no estoy cargando ninguna foto. Estoy usando facebook php-sdk ( http://github.com/facebook/php-sdk/ ) y los ejemplos que ya probé son:
Subir foto a álbum con Graph API de Facebook
¿Cómo puedo subir fotos al álbum usando Facebook Graph API?
Supongo que las cargas de CURL quizás solo puedan administrar los archivos almacenados localmente y no los alojados en la web.
Aquí está mi código:
/*
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));
... donde attachment-> guid contiene la url de la foto.
Estoy bastante atrapado en este momento ...
Supongo que las cargas de CURL quizás solo puedan administrar los archivos almacenados localmente y no los alojados en la web.
No, ese no es el caso.
Pero debe proporcionar la URL HTTP completa y pública a la imagen, sin un @
al frente, y debe usar la url
nombre del parámetro para este valor.
https://developers.facebook.com/docs/reference/api/photo/ :
También puedes publicar una foto proporcionando un
url
param con la URL de la foto.
Sugeriré usar el SDK php de Facebook , será más fácil y el código funcionará con futuras actualizaciones de las API:
Usando 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"));
Usando cURL directamente:
Si realmente quiere usar cURL, su código es casi correcto, pero el error está en la matriz $ args:
$args = array(
''message'' => ''Photo from application'',
''source'' => file_get_contents($file)
);
Dado que la clave para los datos de la foto es la source
, consulte el documento de Facebook
Nota sobre el @ en cURL:
Observe también que @
en cUrl significa que el parámetro se reemplazará con los bytes reales del archivo que sigue al @
, por lo que no es necesario si ya ha ingresado el parámetro source
los bytes reales.