Publicar una foto con el PHP SDK en Facebook

Continuando el trabajo con el PHP SDK de Facebook veremos cómo publicar una foto en el muro de una persona. En este caso se debe hacer lo de siempre, autentificar al usuario con nuestra aplicación y pedir permiso de publicación (publish_stream) como lo vimos anteriormente, la única novedad es el uso del método setFileUploadSupport que le indica al SDK que permita la carga de archivos. Después de tener la foto guardada en el servidor, sea cual sea la forma en que tu aplicación la genere se publica la foto de la siguiente forma:

/*Se habilita la carga de archivos 
con setFileUploadSupport.*/
$facebook->setFileUploadSupport(true);
// Se indica la ruta de la imagen en el servidor.
$img = 'ruta_de_la_imagen.png';
// Haciendo uso de POST se envía la foto usando el método llamado api
$photo = $facebook->api('/me/photos', 'POST',
array( 'source' => '@' . $img,
'message' => 'Mensaje a ser publicado con la foto'
));

Facebook automáticamente crea un album con el nombre de la aplicación, en caso de querer crear un album con otro nombre:

$album=array('name'=>'BrianUR.info', 'description'=>'Tutoriales para crear aplicacion
en Facebook');
$facebook->api('/me/albums','post',$album);

  26 Comentarios

  1. Stryfe™   •  

    quería saber si os teneis alguna información que al subir la imagen obtenga la url de esta, no del álbum, sino de la imagen como tal ya subida…
    De antemano gracias :)’

  2. Bryan   •  

    Hola; Qisiera que porfavor subas todos los archivos de la aplicacion que tienes en el servidor para solo tener que cambiarle los datos ya que no me funciona…Gracias

  3. Camilo Muñoz   •  

    Buenas Amigo, Me podrias ayudar en lo siguiente, Cree una aplicacion en facebook que publique en el muro de la persona, pero me da error y no abre el app en facebook, Mira el codigo. Para ver si ves algun error, Gracias

    api(‘/me/photos’, ‘POST’, array(
    ‘source’ => ‘@’ . $photo,
    ‘message’ => $message,
    )
    );
    echo ‘Photo ID: ‘ . $ret_obj[‘id’] . »;
    } catch(FacebookApiException $e) {

    $login_url = $facebook->getLoginUrl( array(
    ‘scope’ => ‘photo_upload’
    ));
    echo ‘Please login.‘;
    error_log($e->getType());
    error_log($e->getMessage());
    }
    echo ‘getLogoutUrl() . ‘»>logout‘;
    } else {
    $login_url = $facebook->getLoginUrl( array( ‘scope’ => ‘photo_upload’) );
    echo ‘Please login.‘;
    }
    ?>

  4. tulmul   •  

    Ei, soy un programador cateto que quiere colgar una foto en Facebook con PHP, pero al llegar a tu web no entiendo nada. He pensado que quizás la frase del principio que pone «PHP SDK de Facebook» quizás sea un link, y si!, hago clic a ver si me da una pista de que diantres significa tu código y que es eso del «SDK de Facebook», pero lleva a una página 404. Nada, te lo digo por si te llegan más programadores catetos como yo, estaría bien que pusieses «Si eres novato y quieres conocer qué es el SDK de Facebook, mira mi otro artículo» con un enlace bueno… o perderás visitas 😉

    • Brian Urban   •     Autor

      Tienes razón, estaba mal puesto el enlace. En ese mismo enlace se encuentra información más detallada sobre el SDK.

  5. Oscar Diaz   •  

    Hola Brian Urban !…

    Hey…Gracias por sus ejemplos de SDK php para facebook, realmente me han servido.

    Ahora tengo otra consulta.

    Pasa que he creado una aplicación que sube fotos al fan page…..Hasta aqui todo bien, pero es que por alguna razón automáticamente del fan page, se crea una notificacion a los usuarios que en algún momento subieron fotos por medio del app…

    Podría indicarme si es posible evitar este evento, es decir evitar las publicaciones automaticasa en la bio de los participantes del app????

    • Brian Urban   •     Autor

      Posiblemente por seguridad se les avisa a los usuarios porque esa era una forma muy usada de publicar aplicaciones virales.

  6. Dudu   •  

    Buenas, llevo provado de todas las formas posibles, pero no hay manera de que me publique las imagenes desde la
    pagina web hacia el Album de fotos de la aplicacion .

    function publicarImagen($ruta, $mensaje=’Nuevo chiste de Chisteteca.com’)
    {
    $this->fb->setFileUploadSupport(true);
    $params = array(
    ‘access_token’ => self::ACCESS_TOKEN,
    ‘source’ => «$ruta» ,
    ‘message’ => $mensaje
    );
    try {$res = $this->fb->api(‘/’.self::ID_PAGINA.’/photos’, ‘POST’, $params); }
    catch(FacebookApiException $e) {error_log($e);return false;}
    return true;
    }

    He probado con ID_PAGINA, ID_ALBUM (poniendo el ID correspondiente), etc..
    nunca me publica la imagen, en cambio, si la subo como ID_PAGINA/Feed ,
    funcioma perfectamente, salvo q la imagen q sube es minuscula,.

  7. Bow   •  

    todo perfecto el tutorial, solo tengo un problema al querer agregar la imagen al album con nombre personailzado, ya que me publica la imagen en el muro y crea el album con nombre de la aplicación y el album crado queda vacio, como podria agregar la imagen a el album creado ?

  8. Oscar DIaz   •  

    Buen dia

    Bueno, de ante mano le agradezco por esta publicaciones, han sido de gran ayuda. Mi duda es la siguiente:

    Estoy desarrollando una aplicación en donde efectivamente se debe publicar una imagen en el perfil de la aplicación ( no del usuario), el asunto es que…por alguna razón, la imagen siempre termina publicándose en en el perfil del usuario!.

    aquí mi fragmento de codigo:

    // $session[‘access_token’] es el acces token del usuario
    // ADQUIERE EL ACCESTOKEN PARA LA APLICACION

    $urlToken=»https://graph.facebook.com/oauth/access_token?client_id=».self::ID_APP.»&client_secret=».self::SECRETO.»&grant_type=fb_exchange_token&fb_exchange_token=».$session[‘access_token’];

    $res=multiple_threads_request(array($urlToken));

    $params = null;
    parse_str($res, $params);
    $Access_token= $params[‘access_token’];

    $params = array(
    ‘access_token’ => $Access_token,
    ‘source’ => «@$ruta»
    );
    if($mensaje) $params[‘message’] = $mensaje;

    // ID_ALBUM ….Este es el ID del album de la aplicación ! ! !
    try{
    $res = $this->fb->api(‘/’.self::ID_ALBUM.’/photos’, ‘POST’, $params);
    print_r($res);

    } catch (FacebookApiException $e) {
    error_log($e);
    print_r($e);
    }

    Hasta aquí….no veo nada raro, pero teniendo en cuenta que no hace lo que pido, pues algo anda mal, y no se que es.
    Ahora bien, digamos que me rindo y acepto dejar las imágenes publicadas en el perfil del usuario…..Digame, existe alguna forma de rescatar el url de la imagen que se ha subido ???

    Le agradezco cualquier colavoracion al respecto

    • Brian Urban   •     Autor

      En ese caso supongo que está pidiendo el permiso manage_pages junto con el publish_stream requeridos para hacer publicaciones como la página, luego en fb->api(‘/’.self::ID_ALBUM.’/photos’, ‘POST’, $params); debería ir /id_pagina/photos. En caso de publicar en el perfil del usuario se puede leer la url en /id_album/photos

  9. pablo   •  

    el código funciona bien =) pero tengo el problema que publica automáticamente cada vez que se abre la aplicación genera una publicación de la foto en el muro, mi idea es que puedan publicar al presionar un botón. pero no logro solucionar ese problema agradecería algo de ayuda.

    • Brian Urban   •     Autor

      Para solucionar eso entonces debes agregar un condicional en el que ejecute esa parte de código sólo cuando la persona haga click en el botón, ese boton en si podría ser una imagen con un enlace que envie un parametro por GET:

      if($_GET[‘boton’]){
      //Código de publicacion
      }

  10. Luis Garcia   •  

    Hola tengo una duda yo estoy haciendo una app pero tiene una parte flash, el flash genera una imagen y se la envia a un php para publicarla despues que el ha dado click en el boton dentro del flash, podrias revisar si esta bien el php o si de parte del flash debo hacer alguna cosa
    ‘244889125628858’,
    ‘secret’ => ’70a4cc09cb6661f543bb5a1fc701bbd9′,
    ));

    // Obtener el ID del Usuario
    $user = $facebook->getUser();

    // Podemos obtener o no este dato dependiendo de si el usuario se ha identificado en Facebook o no

    if ($user) {
    try {
    // Procedemos a saber si tenemos a un usuario que se ha identificado en Facebook que está autentificado.
    // Si hay algún error se guarda en un archivo de texto (error_log)
    $user_profile = $facebook->api(‘/me’);
    } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    }
    }

    // la url de Login o Logout dependerá del estado actual del usuario, si está autentificado o no en nuestra aplicación
    // Aquí obtenemos los permisos del usuario. Por defecto obtenemos una serie de permisos básicos
    if ($user) {
    $logoutUrl = $facebook->getLogoutUrl();
    } else {
    $loginUrl = $facebook->getLoginUrl(array(‘scope’=> ‘email,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown’));
    }

    if (!$user) {
    echo ‘// ‘;
    exit;
    }

    // Se habilita la carga de archivos con setFileUploadSupport.
    $facebook->setFileUploadSupport(true);
    // Se indica la ruta de la imagen en el servidor.
    $img = ‘http://lafabricaenlinea.com/sbapp/’ . $fic_name . »;
    // Haciendo uso de POST se envía la foto usando el método llamado api
    $photo = $facebook->api(‘/me/photos’, ‘POST’,
    array( ‘source’ => ‘@’ . $img,
    ‘message’ => ‘Mi bebida Favorita en Starbucks’
    ));

    ?>

    • Brian Urban   •     Autor

      Si el Flash genera un archivo que queda guardado en alguna carpeta del servidor el PHP debería llamar dicha imagen y ya, rapidamente veo que estableces una url cambia eso por solo la ruta del fichero lo otro no es necesario.

  11. Edgar Hernandez   •  

    No me Funciono Brother

  12. RAM   •  

    Graciassss, muchas gracias man, andaba buscando estos ejemplo (junto con autenticacion y todos los de facebook, y todos los demas) hace mucho rato, pero nada no habia podido, gracias me sacaste de una… ni te imaginas, gracias.

  13. luis castisallas   •  

    buenas tardes que mas Brayan, una pregunta porque el correo electronico de hotmail. esta bloqueado y como hago para desbloquiralo gracias

  14. Christian   •  

    Hola Brian, tengo una aplicación donde sube imagenes a los usuarios con el mismo codigo que publicas aqui.

    Anteriormente rellenaba el campo mensaje de la foto, y me banearon varias veces. Vi en otras aplicaciones que suben imagenes y que la misma aplicacion hace que te guste la foto que subiste. Eso creo que les evita comentarios negativos y por consiguiente ser baneados.

    Una aplicacion que hace eso es: MAKE YOUR JERSEY: http://apps.facebook.com/cooljersey/ . al subir una camiseta cualquiera, veras que el me gusta de la foto ya esta activado.

    Tenes idea como hacer esto?

  15. Nicolas   •  

    Jajaja listo hermano muchas gracias por tu ayuda ya tengo mas claro el porque me suspenden las aplicaciones

  16. Brian Urban   •     Autor

    Cosas que uno aprende con la experiencia 😛

  17. Nicolas   •  

    @Brian gracias comprendo, pero una cosita como haces en tus aplicaciones para que publiquen solo una ves? y no te suspendan la aplicación?

  18. Brian Urban   •     Autor

    Las publicaciones solo pueden ser hechas por acciones del usuario, como por ejemplo dar click en un botón o el resultado de X cosa, así se haga solo una publicación automáticamente en poco tiempo suspenden la aplicación.

  19. Nicolas   •  

    @Brian te comento un poco como que es lo que hace la aplicación bueno al usuario ingresar a la aplicación esta hace una publicación en su muro y se crea una session para que no se vuelva a publicar esto lo hice para no infringir las reglas pero no se por que pasa esto si puedes guiarme un poco en como hacer para que publique una ves y no infringir las reglas te agradezco espero respuesta 😉

  20. Brian Urban   •     Autor

    @Nicolas: Eso suele suceder cuando haces cosas que van en contra de las reglas de la plataforma de Facebook, como tener publicaciones automáticas las cuales son detectadas por sistemas automatizados o reportadas por los mismos usuarios.

  21. Nicolas   •  

    Buenas noches amigo quisiera que me dieras una idea de por que mis aplicaciones son eliminadas por facebook espero me puedas ayudar y me llega el siguiente mensaje

    Hi,

    Great experiences on Platform allow users to build out their identity and share engaging, relevant content with friends. To ensure users continue to have a positive experience using apps and sites on Facebook, we run automated screens that monitor user feedback and disable apps receiving negative user feedback (including, but not limited to, feed story hides, app uninstalls, and reports).

    Your app xxxxxxxxxxxxxx (ID #xxxxxxxxxxxxx) has been disabled because our automated systems detected that your app is receiving negative user feedback. To help prevent this from happening in the future, we suggest you actively monitor user reports, volume of content published per user, and any spikes in share or install activity (real-time analytics available on Insights: http://www.facebook.com/insights/?sk=ao_xxxxxxxxxxxxx ). You may also be in violation of our Facebook Principles and Policies: http://developers.facebook.com/policy/ .

    If you think we have removed your app erroneously, please read about our appeals process and complete the form to appeal at https://developers.facebook.com/appeal/?app_id=xxxxxxxxxxxxx. We will work quickly to evaluate your case.

    Thank you,
    Platform Policy Team

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *