tools galeria español ejemplos developers consumir php api facebook upload photo

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.