Publi

Escribiendo en muros desde nuestra aplicación de Facebook

fb_website3 Uno de los usos más extendidos de las aplicaciones de Facebook es el de escribir en el propio muro o en el muro de nuestros amigos. Vamos a hacer un ejemplo de esto utilizando la Graph API de Facebook, a través de la biblioteca oficial que ellos nos dejan en GitHub. Para empezar a crear la aplicación os recomiendo leer este post anterior donde se dice paso a paso cómo se debe crear y cómo empezar a escribir código.

Pedir permiso para publicar

Antes de nada, debemos pedir permiso para publicar en el muro del usuario, para pedir permiso, lo podemos hacer en el mismo momento que ejecutamos el método getLoginUrl() pasando como parámetro un array cuyo único elemento será ‘scope’ y su valor serán los permisos requeridos separados por comas. Por ejemplo:

1
 $facebook->getLoginUrl(array('scope' => 'publish_stream'));

El permiso que debemos pedir para poder publicar en los muros de Facebook es stream_publish. Por otra parte, puede que ya hayamos identificado la aplicación con anterioridad, por lo que al estar dentro del sistema no hacemos llamada a getLoginUrl(), para ello debemos comprobar los permisos de que disponemos y eso lo hacemos con una llamada a la API a /usuario/permissions:

1
 print_r($facebook->api('/me/permissions'));

Lo que nos devolverá un array con los permisos que dispone la aplicación, el array tendrá un elemento [‘data’] que será otro array, cuyo elemento [0] contendrá otro array con los permisos:

Array ( [data] => Array ( [0] => Array ( [installed] => 1, [publish_stream] =>1 ) ) )

fb_website2

Publicar un mensaje en mi muro

Para publicar un mensaje en mi muro, debemos hacer una llamada a /usuario/feed y enviar por post la información referente al mensaje deseado:

1
 $facebook->api('/me/feed', 'post', array('message' => $mensaje));

Código fuente demo

En este código fuente, he integrado excepciones para controlar los posibles errores (No identificado, No tengo permisos, Facebook me ha devuelto un array incorrecto), en este caso, los errores de identificación son salvables, pero los demás no. Para probar este código, debes cambiar la $api_key y la $api_sec:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php

$api_key = 'xxxxxxxxxxxxx';
$api_sec = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

require_once('facebook.php');

// Definimos códigos de error
define(NOT_INSTALLED,      1);
define(NO_PUBLISH_STREAM,  2);
define(MALFORMED_ARRAY,   90);

$facebook = new Facebook(array(  
                   'appId'  => $api_key,
                   'secret' => $api_sec,
                   'cookie' => true ,
                 ));

try
{
 
  $sesion = $facebook->getUser();
  if (!$sesion)
    throw new Exception('Aplicación no instalada', NOT_INSTALLED);

  echo "Estamos identificados en Facebook<br/>";
  echo "Usuario: ".$sesion."<br/>";

  // Obtenemos los permisos del usuario
  $permissions = $facebook->api('/'.$sesion.'/permissions');
  if (!isset($permissions['data'][0]))
    throw new Exception('Facebook ha devuelto un array mal formado', MALFORMED_ARRAY);

  if (!isset($permissions['data'][0]['publish_stream']))
    throw new Exception('No tengo permiso publish_stream', NO_PUBLISH_STREAM);

  $mensaje='Probando la publicación de mensajes en Facebook...';
  print_r( $facebook->api('/189639191053576/feed', 'post', array('message' => $mensaje)));

} catch (Exception $e)
{
  switch ($e->getCode())
    {
    case NOT_INSTALLED:
      $login_url = $facebook->getLoginUrl();
      header('Location: '.$login_url);
      die();
      break;
    case NO_PUBLISH_STREAM:
      $login_url = $facebook->getLoginUrl(array('scope'=>'publish_stream'));
      header('Location: '.$login_url);
      die();
      break;

    case MALFORMED_ARRAY:
      echo $e->getMessage();
      break;

    default:
      echo "Ocurrió un error no identificado";
    }
}
?>

Publicando en otros muros y páginas

Para publicar en el muro de otros usuarios, simplemente tenemos que sustituir la dirección de la llamada a la API donde publicamos de /me/feed a /usuario/feed donde usuario es el texto que aparece al acceder en la dirección de la página principal de Facebook de alguno de nuestros amigos (también puede ser su ID de usuario, pero ya es difícil de obtener).

Para publicar en páginas debemos sustituir el /usuario/feed por /id_de_pagina/feed donde el ID de la página es el número que aparece en la dirección de la página en cuestión, si por ejemplo, la URL de la página de Facebook de este blog es:https://www.facebook.com/pages/Poesía-Binaria/189639191053576 ; la id de la página es la que está en negrita.

Sólo teniendo el permiso publish_stream ya podemos publicar con el nombre de usuario que tenemos actualmente en cualquier lado dentro de Facebook.

También podría interesarte...

There are 31 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. Guido /
    Usando Google Chrome Google Chrome 18.0.1025.152 en Windows Windows 7

    Primero quiero agradecer este tutorial, la explicación es muy clara y muy detallada lo que se me hizo muy muy fácil entender.
    Pero todo esto no hizo que no aparezcan errores.

    Hice todo lo detallado en los tutoriales, aparecieron las ventanas de permitir de facebook etc etc y en el paso final me aparece lo siguiente:

    Estamos identificados en Facebook
    Usuario: 13626xxxxx
    Ocurrio un error no identificado

    (he copiado tal cual el demo de esta web, cambie tu ID -189639191053576- por /me asi me auto publico en mi muero ) y no puedo probe probe y no lo puedo hacer funcionar.

    Espero tu ayuda pronto,
    Guido de Buenos Aires Argentina

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 11.0 en Ubuntu Linux Ubuntu Linux

      Muchas gracias !

  3. Guido /
    Usando Google Chrome Google Chrome 18.0.1025.162 en Windows Windows 7

    sigue sin funcionarme !! 🙁

  4. Guido /
    Usando Google Chrome Google Chrome 18.0.1025.162 en Windows Windows 7

    el error que me sale es Uncaught OAuthException: (#100) Sorry, this post contains a blocked URL

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 11.0 en Ubuntu Linux Ubuntu Linux

      Estas intentando postear un enlace? Prueba hacerlo sin enlace a ver si funciona. Según parece intentas publicar algo que contiene una URL bloqueada.

  5. Guido /
    Usando Google Chrome Google Chrome 18.0.1025.162 en Windows Windows 7

    no, estoy publicando exactamente el mismo codigo que el ejemplo que pusiste

  6. Gaspar Fernández / Post Author
    Usando Mozilla Firefox Mozilla Firefox 11.0 en Ubuntu Linux Ubuntu Linux

    @Guido
    ¿Diste de alta la aplicación? Tal vez no te conozca Facebook. Por otra parte, puedes intentarlo desde otro dominio, el error de “this post contains a blocked URL” me mosquea un poco, parece algo referente a permisos.
    Saludos

  7. Guido /
    Usando Google Chrome Google Chrome 18.0.1025.162 en Windows Windows 7

    Lo pruebo desde otro dominio y te aviso !! Ayer tratando de solucionarlo me quede hasta las 5 am !!

  8. Gaspar Fernández / Post Author
    Usando Mozilla Firefox Mozilla Firefox 11.0 en Ubuntu Linux Ubuntu Linux

    @Guido
    Ok! Tiene que pasar algo raro, en el grupo de Facebook de la web hay muchas publicaciones de prueba por este post.
    No olvides cambiar la URL en la aplicación de Facebook para que no te eche para atrás.

  9. Mike M /
    Usando Google Chrome Google Chrome 19.0.1084.46 en Windows Windows Vista

    Intenté el código como lo tienes, cambié las ID’s, coloque el me, etc…
    Me aparece:
    Estamos identificados en Facebook
    Usuario: 512344744
    Ocurri� un error no identificado

    Estoy usando un hosting gratuito. Será ese el problema??

    Saludos y gracias

  10. Mike M /
    Usando Google Chrome Google Chrome 19.0.1084.46 en Windows Windows Vista

    Ya lo intenté en un hosting de pruebas ya pagado. Aparece lo mismo. Y si coloco el me/feed aparece:

    Estamos identificados en Facebook
    Usuario: 1000030XXXXXXXX
    Array ( [id] => 1000030XXXXXXXX_2320746XXXXXXXX )

  11. Mike M /
    Usando Google Chrome Google Chrome 19.0.1084.46 en Windows Windows Vista

    Yey… Todo parece indicar que ya funcionó.
    Ahora lo que me queda de duda es cómo hacer para que se publique en el muro del usuario que entró en la app. Y no en mi app.

    Hay modo de adjuntar la id del usuario en alguna variable??

    En “print_r( $facebook->api(‘/me/feed’, ‘post’, array(‘message’ => $mensaje)));”

    se debe cambiar el “me” por alguna variable?? cuál??

    Saludos

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 12.0 en Ubuntu Linux Ubuntu Linux

      Para sacar el ID de usuario, lo tienes en la variable $session ($sesion = $facebook->getUser();), también puedes meter esa variable en lugar de “me”, eso es sólo un alias que te dejan utilizar.

      Ya solucionaste todo? Siento haber tardado tanto en contestar :S

  12. Lautaro /
    Usando Google Chrome Google Chrome 22.0.1229.79 en Windows Windows 7

    Excelente muchas gracias en breve lo estaré probando!

    1. admin / Post Author
      Usando Mozilla Firefox Mozilla Firefox 16.0 en Ubuntu Linux Ubuntu Linux

      Muchas gracias!

  13. AldoWi /
    Usando Google Chrome Google Chrome 22.0.1229.94 en Windows Windows 7

    Muy buen post me ayuda bastante..
    Tengo una consulta, si quisiera agregar alguna Imagen a la publicacion?

  14. admin / Post Author
    Usando Mozilla Firefox Mozilla Firefox 16.0 en Ubuntu Linux Ubuntu Linux

    @AldoWi
    En el mismo array donde esta ‘message’ pones ‘image’ => ‘url’

    Creo recordar que era así

  15. Alan /
    Usando Google Chrome Google Chrome 23.0.1271.64 en Linux Linux

    Que es esto? no entendi :/

    1. admin / Post Author
      Usando Mozilla Firefox Mozilla Firefox 16.0 en Ubuntu Linux Ubuntu Linux

      Es una guía para publicar mensajes en muros de Facebook desde nuestras apps.

  16. Mister /
    Usando Mozilla Firefox Mozilla Firefox 17.0 en Windows Windows 7

    Hola!

    Me ha quedado claro como publicar en mi muro personal, pero no consigo publicar nada en una pagina creada por mi. Como obtengo los permisos necesarios para que la app pueda publicar en el muro de una página en vez de a mi muro personal?

    Muchas gracias.

    1. admin / Post Author
      Usando Mozilla Firefox Mozilla Firefox 17.0 en Ubuntu Linux Ubuntu Linux

      En este otro artículo está todo detallado: https://poesiabinaria.net/2012/01/publicando-en-facebook-como-pagina-para-mantener-a-nuestros-fans/

      Muchas gracias por tu comentario !

  17. giulio /
    Usando Google Chrome Google Chrome 31.0.1650.57 en Windows Windows 7

    Como podria hacer para publicar en varios grupos simultáneamente¿?

    1. admin / Post Author
      Usando Mozilla Firefox Mozilla Firefox 24.0 en Ubuntu Linux Ubuntu Linux

      Lo que puedes hacer es publicar dentro de un bucle recorriendo las ids de los grupos. Eso sí, tendrás que tener permiso para hacerlo en todos ellos.

  18. Juan /
    Usando Google Chrome Google Chrome 38.0.2125.104 en Windows Windows 7

    Aun con las nuevas APP de Facebook se puede publicar el muro de los USUARIOS que esten asociados a mi Aplicación ??

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 32.0 en Linux Linux

      Debería poderse publicar, de todas formas es algo que tengo que renovar aquí en el blog, porque han cambiado algunas cosas y se ha quedado el post un poco antiguo 🙁

  19. patty /
    Usando Google Chrome Google Chrome 39.0.2171.71 en Windows Windows 7

    hola, es muy interesante tu post, pero solo me puedo autopublicarme, y lo que indicas para poder publicar en otras páginas o usuarios no me funciona, no se si podrias sugerirme algunas paginas para obtener infromación y lograr publicar a lo que quiero.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 33.0 en Linux Linux

      Hola patty. Pues ahora mismo no sé si seguirá funcionando ya que no eres la primera persona que lo menciona. En su día sí que funcionaba, pero las políticas de Facebook cambian y nunca se sabe… No tengo más referencias nuevas de esto más allá de la API de Facebook.

  20. patty /
    Usando Google Chrome Google Chrome 39.0.2171.71 en Windows Windows 7

    Si es lo que pensé, me imagino que por sus actualizaciones en la graph api, pues seguiré buscando, muchas gracias por responder. 😀

  21. carlos /
    Usando Google Chrome Google Chrome 43.0.2357.130 en Linux Linux

    actualizen

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 39.0 en Ubuntu Linux Ubuntu Linux

      Llevo mucho tiempo con ganas de actualizar… :S En cuanto tenga un proyecto que lo necesite, actualizo

Leave a Reply