PHP SDK: Publicar en el muro

En ocasiones necesitamos publicar en el muro de los usuarios de nuestras aplicaciones vía server side. En estos casos yo utilizo el PHP SDK de Facebook para hacerlo.

Os pongo un ejemplo a continuación de como lo hago:

<?php
require 'fb-lib/facebook.php'; // Mi ruta de la librería de Facebook 
$facebook = new Facebook(array(
    'appId'  => FACEBOOK_APP_ID,
    'secret' => FACEBOOK_SECRET_KEY,
    'cookie' => true,
    'domain' => 'tudominio.com',
    'req_perms' => 'publish_stream'
));

$session = $facebook->getSession();

if (!$session) {

    $url = $facebook->getLoginUrl(array(
               'canvas' => 1,
               'fbconnect' => 0,
 	       'req_perms' => 'publish_stream'
           ));

    echo "";

}else{

    try {

        $uid = $facebook->getUser();
        $me = $facebook->api('/me');

    } catch (FacebookApiException $e) {

        echo "Error:" . print_r($e, true);

    }	

	// Mensaje en los muros de los amigos

    try {

	$urlDestino = 'http://apps.facebook.com/[el nombre de tu canvas]';
	$nombre = $me["name"] .' ha publicado este mensaje';

	$message = "";
	$attachment = array(
		'name' => $nombre,
		'href' => $urlDestino,
		'description' => 'Descripción larga del mensaje',
		'properties' => array(
			  'Gabriel Cuesta' => array(
			  'text' => 'Visita nuestra web',
			  'href' => 'http://www.gabrielcuesta.com'
				  )
			),

		'media' => array(
				 array(
				   'type' => 'image',
				   'src' => 'http://www.grupo-skala.com/facebook/tuarboldenavidad/img/arbol_publicacion_muro.jpg',
				   'href' => $urlDestino
				   )
			 ),

	);

	$attachment = json_encode($attachment); 

	$valor = $idDestinatario;	// id del destinatario, debes cambiar este valor

	$param = array(
	   'method' => 'stream.publish',
	   'callback' =>  '',
	   'message' => $message,
	   'attachment' => $attachment,
	   'action_links' => '',
	   'target_id' => $valor,
	   'uid' => $uid,
	   'privacy' => ''
	);

	$result = $facebook->api($param);

     }catch(Exception $o) {

	echo("Error");

     }	

}

?> 

Ok

Intentar no abusar de este tipo de publicaciones ya que si Facebook considera que estáis haciendo spam puede borraros la aplicación.

14 comentarios sobre “PHP SDK: Publicar en el muro

  • el 14 Diciembre, 2010 a las 4:58 pm
    Permalink

    como se puede cambiar la imagen de perfil con PHP SDK.

    gracias.

    Respuesta
  • el 16 Diciembre, 2010 a las 1:33 pm
    Permalink

    Hola Gabriel, ante todo enhorabuena por el blog!

    He intentado usar tu codigo para una aplicación propia, pero al ejecutarlo me da el siguiente error:
    “ERROR: Exception: 200: The user hasn’t authorized the application to perform this action”.
    No se como hacer para que un usuario autorice a la aplicación a poder escribir en su muro. He leido documentación sobre la SDK de PHP y de Javascript, pero no consigo enterarme.

    Lo que quiero es que mi aplicación escriba en el muro de usuarios que tienen instalada la aplicación o en usuarios a los que quiero invitar a instalarse la aplicación.

    Agradecería muchisimo tu ayuda!!
    Muchas gracias!

    Respuesta
  • el 19 Diciembre, 2010 a las 4:54 pm
    Permalink

    Hola Gabriel.

    Antes que nada felicitarte por tu extraordinaria pagina y tu interes por las aplicaciones de facebook. Mi problema es parecido al que plantea Alvaro aqui arriba, lo que yo quiero es que el usuario al ingresar de permisos para publicar en su muro automaticamente.. tal y como lo hacen ya muchas aplicaciones que he visto circulando por facebook, a las cuales entras das llos permisos y ya han publicado en tu muro automaticamente, y apartir de ahi publican cada vez que te conectas a la aplicacion..

    Seria genial que hicieras un tutorial de eso o si tienes alguna plantilla que ya contenga los codigos o metodos para eso, te estariamos infinitamente agradecidos.

    Te dejo aki un par de links de dos aplicaciones que son precisamente lo que yo quiero hacer.

    http://apps.facebook.com/theranasaltarina/

    http://apps.facebook.com/apensarjuego/

    Espero puedas ayudarme ya que la verdad, programador no soy aun 😀 , pero llevo varias semanas con esto.

    Muchas gracias.

    Jazhiel

    Respuesta
  • el 2 Febrero, 2011 a las 8:34 pm
    Permalink

    Hola,
    Muchas gracias por la buena información que escribes.

    Respuesta
  • el 15 Febrero, 2011 a las 7:40 pm
    Permalink

    Excelente información, gracias por compartir tus conociemientos.
    Saludos.

    Jorge

    Respuesta
  • el 22 Marzo, 2011 a las 3:42 am
    Permalink

    Hola una pregunta, como puedo enviar ese mensaje a todos o algunos de mis amigos ???

    ‘target_id’ => $valor,

    Respuesta
  • el 22 Marzo, 2011 a las 7:45 am
    Permalink

    Creando un bucle con por ejemplo un for o un foreach y dándole a $valor cada vez el valor de una id distinta.

    Respuesta
  • el 22 Marzo, 2011 a las 1:24 pm
    Permalink

    hay un error en }catch(Exception $o) { debe ser }catch(Exception $e) { 🙂

    Respuesta
  • el 29 Marzo, 2011 a las 6:37 pm
    Permalink

    Pues a mi me da error precisamente en la línea del catch:

    Parse error: syntax error, unexpected T_CATCH in ……

    }catch(Exception $e) {

    Qué puede ser?

    Respuesta
  • el 9 Julio, 2011 a las 6:55 am
    Permalink

    Cuantas publicaciones puedo hacer por envio?

    si tengo 300 amigos…. a todos ellos se les publica en el facebook? o hay un limite??

    por favor.. necesito saber esto urgente… no he encontrado informacion en internet sobre este tema

    Respuesta
  • el 10 Julio, 2011 a las 8:51 pm
    Permalink

    Hola Roger,

    En principio sí, pero si haces 300 publicaciones de una tacada el filtro antispam de Facebook te detectará y te baneará la aplicación.

    Saludos,
    Gabriel

    Respuesta
  • el 22 Agosto, 2011 a las 9:06 pm
    Permalink

    En la seccion:

    $urlDestino = ‘http://apps.facebook.com/[nombre de tu canvas]’;

    A que te refieres con “nombre de tu canvas”, donde lo puedo dar de alta, ya que en developers.facebook.com di de alta un canvas pero es una direccion (ej: http://www.pagina.com/algo.php?id=* asi di de alta mi url canvas)

    Saludos!

    Respuesta
  • el 23 Agosto, 2011 a las 7:15 pm
    Permalink

    Gabriel, felicidades por el blog, llevo una semana rompiendome la cabeza con esto del facebook, no consigo publicar en mi muro desde php, primero tu codigo me marca error:

    Fatal error: Call to undefined method Facebook::getSession() in C:xampphtdocsHouseAppindex.php on line 10

    entonce slo cmabie por getuser() pero entonces me marco Error.

    debe ser el del print del catch.

    te dejo mi codigo…

    ‘221478371236320’,
    ‘secret’ => ‘1185ee140046e0ee137b0a3d515ec87f’,
    ‘cookie’ => true,
    ‘domain’ => ‘http://localhost/HouseApp’,
    ‘req_perms’ => ‘publish_stream’
    ));

    $session = $facebook->getUser();

    if (!$session) {

    $url = $facebook->getLoginUrl(array(
    ‘canvas’ => 1,
    ‘fbconnect’ => 0,
    ‘req_perms’ => ‘publish_stream’
    ));

    echo “”;

    }else{

    try {

    $uid = $facebook->getUser();
    $me = $facebook->api(‘/me’);

    } catch (FacebookApiException $e) {

    echo “Error:” . print_r($e, true);

    }

    // Mensaje en los muros de los amigos

    try {

    $urlDestino = ‘http://apps.facebook.com/MatrixApp’;
    $nombre = $me[“name”] .’ ha publicado este mensaje’;

    $message = “”;
    $attachment = array(
    ‘name’ => $nombre,
    ‘href’ => $urlDestino,
    ‘description’ => ‘Descripción larga del mensaje’,
    ‘properties’ => array(
    ‘Gabriel Cuesta’ => array(
    ‘text’ => ‘Visita nuestra web’,
    ‘href’ => ‘http://www.gabrielcuesta.com’
    )
    ),

    ‘media’ => array(
    array(
    ‘type’ => ‘image’,
    ‘src’ => ‘http://www.grupo-skala.com/facebook/tuarboldenavidad/img/arbol_publicacion_muro.jpg’,
    ‘href’ => $urlDestino
    )
    ),

    );

    $attachment = json_encode($attachment);

    $valor = $idDestinatario; // id del destinatario, debes cambiar este valor

    $param = array(
    ‘method’ => ‘stream.publish’,
    ‘callback’ => ”,
    ‘message’ => $message,
    ‘attachment’ => $attachment,
    ‘action_links’ => ”,
    ‘target_id’ => $valor,
    ‘uid’ => $uid,
    ‘privacy’ => ”
    );

    $result = $facebook->api($param);

    }catch(Exception $o) {

    echo(“Error”);

    }

    }

    ?>

    ojala me puedas ayudar con esto.. saludos

    Respuesta
  • el 6 Septiembre, 2011 a las 11:21 pm
    Permalink

    hola excelente material lo estube aplicando pero cuando quiero publicar me da el error 100 ….. does not resolve to a valid user ID pese a que los dos usuarios estan registrados en facebook y ambas cuentas ya diron permisos paar escribir en los muros

    te agradeceria mucho la ayuda

    Respuesta

Deja un comentario

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

Sígueme