domingo, 23 de diciembre de 2012

Como publicar en facebook como página mediante su API con PHP


Como publicar en facebook como página mediante su API con PHP

Existen muchos códigos de ejemplo por internet de como publicar en facebook mediante PHP, lo que si que no es fácil encontrar es como hacerlo en una página de la que eres administrador con el perfil de esa misma página; eso vengo a explicar en este tutorial.

Este es un ejemplo de como funciona:

Para realizar este ejercicio debes tener unos conocimientos mínimos de programación y un hosting.

Comenzamos:

Lo primero que tienes que hacer es crear una aplicación en facebook, eso lo haces en este enlace https://developers.facebook.com/apps

Le damos un nombre a la aplicación y una url por si esta fuese a interactuar con usuarios.

App Facebook

Pasamos el Captcha y llegamos al panel de configuración de la aplicación, como ya tenemos el ID de la aplicación y el ID secreto para poder utilizar la aplicación necesitamos un token y configurar los permisos que requerirá la aplicación al usuario y los permisos que le damos a la aplicación para publicar.
En rojo se destacan los IDs de nuestra aplicación, ahora pinchamos a la izquierda para configurar los permisos, donde pone Use Graph API Explorer

App Facebook

Pinchamos en GET ACCESS TOKEN y configuramos.
Los permisos al usuario nos dan lo mismo, es que va a ver la aplicación de nosotros.

Lo que si es importante es en la pestaña de la derecha dar permiso para manejar páginas (manage_pages) y para publicar en los muros (publish_stream).

appface3

Pinchamos en coger el token y nos aparece una ventana emergente en la que nos avisa de que hará la aplicación y nos pregunta si aceptamos (la aplicación nos pedirá lo que nosotros le digamos que nos pida).

App Facebook

Acto seguido nos pedirá permiso para administrar nuestras páginas, como le hemos indicado nosotros en la pestaña de la derecha manage_page.

App Facebook

Una vez hecho esto el navegador nos devuelve a la página de configuración donde habíamos solicitado el token y nos facilita uno.

appface6

Ya tenemos la parte de facebook realizada, ahora toca crear el código.
Para ello nos descargamos la biblioteca facebook-PHP-SDK de https://github.com/facebook/facebook-php-sdk abrimos el comprimido y utilizamos solamente la carpeta src.
En el comprimido hay ejemplos, pero a nosotros con esto nos sirve.
Esa carpeta src la subimos a nuestro hosting y la dejaremos al lado de donde pretendamos ejecutar nuestro código.

Creamos un archivo index.php y le pegamos el siguiente código:


<?php

require_once 'src/facebook.php'; //Esto llama a la carpeta con el parse que nos descargamos antes

$app_id     = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Sustituimos las X por el ID de nuestra aplicación
$app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxx'; // Sustituimos las X por el Secret de nuestra aplicación
$token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // ponemos nuestro token

$facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => false
));
$req =  array(
    'access_token' => $token,
    'message' => 'Mensaje de prueba con mi aplicación');

$res = $facebook->api('/me/feed', 'POST', $req);

?>

Si ahora ejecutamos este archivo index.php en nuestro servidor publicaremos en nuestro muro de facebook el mensaje a través de nuestra aplicación.

Siguiente paso:

Modificamos la línea


$res = $facebook->api('/me/feed', 'POST', $req);

Y cambiamos el me por el ID de una página publicaremos el mensaje en esa página

$res = $facebook->api('/ID_DE_TU_PÁGINA/feed', 'POST', $req);

Con esto publicas el mensaje en la página indicada

Publicamos ahora un enlace

Para publicar un enlace añadimos los parámetros del título, el link, el comentario inferior y la imagen en miniatura que sale a la izquierda.


$req =  array(
    'access_token' => $token,
    'message' => 'Mensaje de prueba con enlace',
    'name' => 'Tutorial de aplicación para facebook',
    'link' => 'http://el-internauta-de-leon.blogspot.com.es/2012/12/como-publicar-en-facebook-como-pagina.html',
    'description' => 'Tutorial de minipunk para aplicación en facebook',
    'picture' => 'https://si0.twimg.com/profile_images/1615997950/avatar-minipunk.jpg');

$res = $facebook->api('/me/feed', 'POST', $req);

Esto hará que al ejecutarse el archivo se publique ese enlace en nuestro muro.

Bien, el problema es que si ahora sustituimos en /me/feed por el /ID_DE_PÁGINA/feed publicaremos en la página, pero como usuario, no como página y lo publicado aparecerá donde aparece lo que publica cualquier otro usuario.

Para poder publicar como página el token que utilizamos no es el adecuado, ya que nos lo facilitó a nuestro usuario, tenemos que conseguir el token de cada página que administramos, y es precisamente eso lo que me ha costado mucho averiguar, no hay mucha información al respecto publicada, motivo de más para publicarlo hoy en este blog.

Para conseguir los token de las páginas que administramos debemos utilizar el token que tenemos y añadirlo a la siguiente URL
https://graph.facebook.com/me/accounts?access_token=NUESTRO TOKEN

Nuestro token lo veíamos en la imagen anterior

appface6

Al colocar esa URL en el navegador, sumándole nuestro token, facebook nos devuelve un archivo .json como el de la siguiente imagen en el cual nos indica el token de cada página y el ID de la misma (además de categoria, permisos y alguna otra información).

token de páginas de facebook

Ahora en nuestro código modificamos el $token = por el de la página en la que queremos publicar y en la línea



$res = $facebook->api('/me/feed', 'POST', $req);

cambiaremos el me/feed y colocaremos el ID de la misma página que el token.

A partir de aquí ya se puede crear un formulario que envíe los parámetros, una frase aleatoria y ejecutarlo mediante el CRON de nuestro servidor, utilizar las variables de un feed de un blog o lo que se nos ocurra.

Cualquier duda puedes dejar un comentario, trataré de responder en la medida de lo posible.


Por otro lado si ves una pregunta en los comentarios y conoces la respuesta todos te estaremos muy agradecidos si publicas lo que sabes.

229 comentarios :

  1. Hola, excelente tutorial!
    Pero tengo una pregunta, a como lo entiendo esta aplicación solo puede ser usada por el creador, dado que se tiene que modificar el token, correcto?

    Para que se pueda utilizar con cualquier usuario necesito algun script generador de token?

    Saludos!

    ResponderEliminar
    Respuestas
    1. En principio está pensada para utilizar por su creador, para usarla cualquier usuario hay que recuperar los tokens y guardarlos en una base de datos para que el script los pueda leer y diferenciar.

      Eliminar
  2. Muchas gracias, lo utilicé y me funciona, el problema es que los tokens expiran en 1 hora apróximadamente, por lo que no puedo crear un proceso automático en mi sitio que cada vez que se suba un contenido se publique a facebook. Sabes algo de como hacer que los tokens sean permanentes? O confirmar si a tí te funciona, lo cual podría ser que tuviera un error en mi aplicación.

    Saludos desde Colombia.

    ResponderEliminar
    Respuestas
    1. Lo acabo de solucionar, llevaba 2 días buscando la forma y no lo encontraba hasta que envié el comentario anterior. Los tokens se crean inicialmente con un tiempo de vida de 1 hora, pero pueden ser extendidos indefinidamente visitando una url: https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN.

      Fuente: https://developers.facebook.com/roadmap/offline-access-removal/#page_access_token

      Eliminar
    2. Muchas gracias por el aporte Carlos.
      Me has ahorrado tener que dar muchas respuestas :)
      En ocasiones valen más los comentarios de un post que el post en si :-)

      Eliminar
    3. Este comentario ha sido eliminado por el autor.

      Eliminar
    4. Hola, tengo una duda, cuando cree el token, si le pongo en debug me dice que caduca en 2 meses! :S como le hago para que nunca caduque? saben?

      Eliminar
    5. access_token=xxxxxx&expires=5182230

      me entrega un token asi lo copio completo y no me deja publicar en mi fanspage! :'(

      Eliminar
  3. Muchas gracias por el tutorial


    Carlos podrías escribir el escript o detallar lo que hiciste para generar el token de larga vida, tengo ese mismo problema.

    Grax.

    Saludos.

    ResponderEliminar
    Respuestas
    1. Te ha puesto ahi la url, no necesitas un script
      Pones en el navegador https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EL_TOKEN_QUE_YA_TIENES y pulsas enter, verás cuantos aparecen ;)

      Eliminar
    2. Cual es el Token que debo poner para que no caduque, el de mi user o el de la pagina fans??

      Eliminar
  4. Hola excelente post! me ayudo a entender mucho!
    Pero te tengo 2 preguntitas, una vez que generas el token como puso Carlos, ya no expira mas verdad? y hay que hacerlo con todos los token de todas las paginas o solo de usuario?

    La otra preguntita, es como se te ocurre hacer para enviar a todas las paginas que tengo al mismo tiempo, son como 190 y no quiero tener que hacer archivo por archivo... :(

    desde ya gracias!

    Saludos!

    ResponderEliminar
  5. Mira el comentario más arriba de Carlos ;)
    Tendrías que hacerlo con un echo '
    '; después del "'/me/feed', 'POST', " y sustituris el /me/feed por una variable con el toke de cada página ;)

    ResponderEliminar
    Respuestas
    1. ah ahi lo solucione :D, muchas gracias!!

      pero tengo otro problemita, no se porque pero solo yo soy el unico que puede ver las cosas que posteo en mi pagina de facebook con la aplicacion :S
      el resto no puede ver, y ya me fije y las propiedades las tengo como publico para lo qe hace la applicacion :S

      y en el codigo lo tengo asi

      $app_id,
      'secret' => $app_secret,
      'cookie' => false
      ));
      $req = array(
      'access_token' => $token,
      'message' => 'Tocarle las tetas? El culo? A la mina te la ganaste cuando te deja tocarle ...',
      'name' => 'Tocarle las tetas? El culo? A la mina te la ganaste cuando te deja tocarle ...',
      'link' => 'http://fraseslikes.com.ar/megusta.php?id=5777',
      'description’=> 'Clickea en la frase para verla completa!!',
      'picture' => 'http://fraseslikes.com.ar/images/megusta.png');

      $res = $facebook->api('/22136xxxx67992/feed', 'POST', $req);


      ?>

      espero que me puedas ayudar!

      gracias!

      Eliminar
    2. Eso lo haces en la configuración de la visibilidad del perfil o de la página, en el apartado de quien puede ver tus publicaciones, aparecerán las aplicaciones que utilizas y aparecerá la tuya ;)

      Eliminar
    3. jeje gracias, era porque tenia la aplicaccion en sandbox mode :P

      Eliminar
  6. Cual es el Token que debo poner para que no caduque, el de mi user o el de la pagina fans??

    ResponderEliminar
  7. me salvastes la vida amigo,gracias !!
    llevaba mucho tiempo intendando hacer esto pero no lo conseguia hasta ahora

    ResponderEliminar
  8. La verdad que muy bueno tu post, me anduvo todo bien, lastima que cuando quise implementar lo del token indefinido al que hace referencia Carlos no me funciono. En realidad hice :
    https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EL_TOKEN_QUE_YA_TIENES
    usando el primer token (el de usuario, no el de pagina) y me retorno un nuevo token, prove con este ultimo, pero me arrojo el siguiente error:
    Fatal error: Uncaught OAuthException: Malformed access token .... on line 1254
    Ya no se que mas probar, no puedo obtener el token indefinido o de larga vida.
    Si alguien tiene alguna sugerencia bienvenida sera.

    ResponderEliminar
  9. Lo que te dice ahí es que tienes un error en el token.
    O has puesto el token de pagina para publicar en tu muro o has dejado espacios entre las comillas al pegar el tojen nuevo... trata de repetir los pasos ;)

    ResponderEliminar
  10. Excelente tuto!!!

    Al querer extender token me tira...

    {
    "error": {
    "message": "An unknown error has occurred.",
    "type": "OAuthException",
    "code": 1
    }
    }

    Xq???

    ResponderEliminar
  11. Max, cuando creas la aplicación y obtienes los permisos, tienes que decirle que te pida permiso para manejar las páginas y auotizarlo para obtener el token con esos permisos.

    scope es para pedir permisos o hazlo a través de la API GRAPH EXPLORER

    ResponderEliminar
    Respuestas
    1. Gracias Minipunk! el problema era que ponia el token de page en vez del de user.
      Otra question: la extended token es valida por 60 dias... existe alguna forma de que se refresque ese tiempo por así decirlo?

      Eliminar
    2. Max, si, pon en el navegador esto

      https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EL_TOKEN_DE_USUARIO

      Y se queda válido para siempre ;)

      Eliminar
    3. Una pregunta esto sirve para compartir imagenes en movimiento?

      Eliminar
    4. Este comentario ha sido eliminado por el autor.

      Eliminar
  12. Una pregunta esto sirve para compartir imagenes en movimiento?

    ResponderEliminar
    Respuestas
    1. No, facebook no deja subir gifs, quienes lo hacen es engañando a facebook, cambiando la extensión ;)

      Eliminar
  13. Hola, El post esta muy bueno pero tengo un problemita y es que me sale esto

    Fatal error: Uncaught CurlException: 7: couldn't connect to host thrown in /home/u545149033/public_html/a/src/base_facebook.php on line 977

    y no se que hacer si alguien me lo soluciona me ayudaria mucho :D
    Gracias...

    ResponderEliminar
    Respuestas
    1. No es problema del código, es de tu servidor, mira aquí http://stackoverflow.com/questions/9950315/facebook-api-call-returns-curlexception-7

      Eliminar
  14. Hola Minipunk, muchas gracias por el tutorial. Una cosa, al poner en el navegador la linea para hacer el token permanente me devuelve otro token. ¿Tengo que usar ese devuelto o el de usuario inicial? Muchas gracias!

    ResponderEliminar
    Respuestas
    1. El nuevo en los dos apartados, en la llamada y en el $res = $facebook-> ;)

      Eliminar
  15. Muchas gracias, despues de estar probando varios codigo blabla seguir explicaciones blabla y demas, tiooooooooo funcionaa!!!! un compañero de curro quiere matar a mi novia y casarse conmigo.

    un saludo

    ResponderEliminar
  16. Gracia por tu manual, por ponerlo tan fácil y comprensible. He conseguido publicar en mi muro, pero a la hora de obtener las id y el token de mis paginas, el json que me devuelve solo obtengo el encabezado
    {
    "data": [

    ]
    }

    he probado con el token que caduca a los 60 minutos, con el tocken duradero, pero nada no hya manera.
    ¿Tengo que dar mas permisos al generar el Token?

    Gracias y un saludo

    ResponderEliminar
    Respuestas
    1. Para saber si te devuelve error u otra cosa pon una línea así:

      var_dump($res);

      Esto te imprime en pantalla todo lo que te devuelve, en caso de falta de permisos te lo pone, y si es otra cosa ahí lo verás ;)

      Eliminar
    2. Gracias, por tu pronta respuesta. Al final era que al generar i token no active la opción en permisos extendidos de administrar paginas.

      Gracias por todo

      Eliminar
  17. Muy bueno el tuto!
    La consulta mia es la siguiente:
    Si bien pude publicar en la pagina como si estuviera logueado a la pagina,
    ¿Alguien sabe como hacer que esa publicación generada ya aparezca como destacada?
    Gracias de antemano!

    ResponderEliminar
    Respuestas
    1. No me suena que esa función la tenga siquiera la aplicación de ellos para smartphone...
      En su apartado de http://developers.facebook.com/docs/opengraph/getting-started/ tienes la documentación de todo lo que se puede hacer y lo que no, pero vamos que son tantos apartados que uno se acaba perdiendo.

      Eliminar
  18. Estoy teniendo problemas con los acentos y carácteres raros. En el vídeo he visto que te salían correctamente... cual es la clave???

    ResponderEliminar
    Respuestas
    1. Solución encontrada... estaba usando el TinyMCE, hay que ajustarle la propiedad:

      tinyMCE.init({
      entity_encoding : "raw",

      y antes de enviarlo al muro hay que usar la función PHP strip_tags para que nos quite las etiquetas HTML que le ha metido el propio TinyMCE

      Eliminar
    2. Anda pues no sabía eso, yo suelo codificar el archivo como utf-8 y ya me suele funcionar.
      Gracias por el aporte.

      Eliminar
  19. buen tutorial. hice todos los pasos y al ejecutar index.php me aparece:
    Fatal error: Uncaught OAuthException: (#368) The action attempted has been deemed abusive or is otherwise disallowed thrown in /home/a5010170/public_html/src/base_facebook.php on line 1254

    ResponderEliminar
    Respuestas
    1. A mi me aparece lo mismo, no puedo solucionar ese error, voy cambiando de muchos hosting

      Eliminar
  20. El token a de corresponder con el /me o /ID_DE_PÁGINA según se trate

    ResponderEliminar
    Respuestas
    1. Me arroja este error que hago: ya revise el Token y el ID de pagina y estan correctos: Fatal error: Uncaught OAuthException: (#200) The user hasn't authorized the application to perform this action thrown in /home/sigrid/public_html/src/base_facebook.php on line 1254

      Eliminar
    2. Tienes que ponerlo en
      $res = $facebook->api('/ID_DE_TU_PÁGINA/feed', 'POST', $req);
      Y debes ser administrador de la página.
      Dice que ese usuario no está autorizado, revisa el código bien y haz que el token no caduque.

      Eliminar
    3. Si soy administrador de la pagina, de hecho somos 2 administradores yo y otro.

      El codigo que tengo es este:
      -----------------------------
      $req = array(
      'access_token' => $token,
      'message' => 'Mensaje de prueba con mi aplicación');
      $res = $facebook->api('/531709766841991/feed', 'POST', $req);

      ----------------------------
      cuando coloco los datos de token e id de usuario bueno los primeros que nos da, si publica en mi muro sin problema, cuando cambio el ME por el ID de mi FanPage no publica marca error, igual que colocando el Token y el ID de la FanPage, es cuando marca ese error 200

      Eliminar
    4. Puedes apoyarme, estoy atorado con ello, ya hice todo el proceso desde abajo y nada...

      Eliminar
  21. Me arroja este error que hago: ya revise el Token y el ID de pagina y estan correctos: Fatal error: Uncaught OAuthException: (#200) The user hasn't authorized the application to perform this action thrown in /home/sigrid/public_html/src/base_facebook.php on line 1254

    ResponderEliminar
    Respuestas
    1. Al crear el token tienes que darle permisos, el de manage_page por lo menos.
      Revisa los pasos que seguro que se te ha pasado alguno por alto.

      Eliminar
    2. Ya tiene todos los permisos, fui paso por paso y nada no me permite... me deja publicar como usuario si en mi muro pero no como pagina en la fanpage...

      ya puse el ID de la PAGINA y su TOKEN Correspondiente en base al archivo JSON, y no me deja, tampoco me deja publicar como usuario dentro del la PAGNIA, solo me deja publicar en mi MURO de USUARIO con su correspondiente TOKEN

      Eliminar
  22. buen tutorial. hice todos los pasos y al ejecutar index.php me aparece:
    Fatal error: Uncaught OAuthException: (#368) The action attempted has been deemed abusive or is otherwise disallowed thrown in /home/a5010170/public_html/src/base_facebook.php on line 1254

    ResponderEliminar
    Respuestas
    1. La acción intentada se ha considerado abusivo o que sea rechazado <-- Te dice eso ¿Que url estabas compartiendo? algunas están baneadas de facebook.

      Eliminar
  23. Ya encontre la Solución al Fatal error: Uncaught OAuthException: (#200) The user hasn't authorized the application to perform this action thrown... solo deben colocar permisos extendidos: publish_stream y listo.

    ResponderEliminar
  24. Minipunk Arias, una pregunta ya puedo publicar con la api pero ahora cuando pongo la URL directa para compartirla dentro de mi muro me apare ce : Uncaught OAuthException: (#200) The user hasn't authorized the application to perform this action thrown in /home/sigrid/public_html/src/base_facebook.php on line 1254 abajo de la URL o desde el boton Like en mi web tambien aparece : Uncaught OAuthException: (#200) The user hasn't authorized the application to perform this action thrown in /home/sigrid/public_html/src/base_facebook.php on line 1254, sabras por que es esto?, ya esta corregida la api, y esto ocurre cuando coloco directamente la url de la web. http://www.sigrid.mx, dentro de un post de mi muro

    ResponderEliminar
    Respuestas
    1. CReo que no tienes todos los permisos que deberías coger al autorizar tu propia aplicación.

      Eliminar
  25. Genial tio! Me has solucionado muchos dolores de cabeza, espero poder devolverte el favor algún día; un saludo y mil gracias!!!

    ResponderEliminar
  26. Tengo un problema, he seguido todos tus pasos y me funciono a la perfección todo y así fue durante unos 3 días, ningun problema, pero ahora intento publicar y me sale el siguiente error:

    Fatal error: Uncaught OAuthException: (#1) An error occured while creating the share thrown in /home/xxx/public_html/publicar/src/base_facebook.php on line 1254

    Lo raro es que tengo un archivo que solo publica mensajes y anda a la perfección, pero el que me crear los link me esta dando problemas :/

    ResponderEliminar
    Respuestas
    1. Yo el link lo paso así -->(string)$xml->channel->item[0]->link;

      El comentario y título del enlace con utf8_decode($xml->channel->item[0]->title);

      Quizás sea por la codificación ;)

      Eliminar
  27. Hola, muy bueno todo me funcionó muy bien, lo que no se y agradecería me puedan ayudar es de crear una publicación de otro tipo en mi página, o sea quiero que sea similar a una publicación manual, agregando un texto y subiendo una foto; una ayuda de como lo puedo hacer, quiero agregar fotos grandes.
    Muchas gracias!

    ResponderEliminar
  28. Minipunk Arias,
    Buenas noches, tengo una duda cree una pagina html en un servidor de interne y de ahi redirecciono a una jsp donde tengo un formulario que captura unos campos para ser enviados a una bd, mi pregunta es como comparto esta app con varias personas
    por que solo me sale a mi, y debo volverla publica.
    Muchas gracias

    ResponderEliminar
    Respuestas
    1. Si no quieres almacenar usuarios haz como yo, publica el código en alguna parte :-))

      Eliminar
  29. Excelente aporte pero tengo una duda o no se puede hacer:
    Yo creo una aplicacion facebook, una vez que la creo mis amigos la aceptan.
    Supón que cinco amigos mios han aceptado esa aplicacion.
    Ahora yo quiero publicar con php en sus muros. ¿eso es posible? o facebook ha eliminado esa posibilidad?
    Imaginate que creo una aplicacion para tiempos de pruebas deportivas y diez amigos corren y se sus tiempos y quiero publicar en sus muros el tiempo que ha hecho cada uno.
    Sacame de dudas por fa
    gracias.

    ResponderEliminar
    Respuestas
    1. Si te fijas en el vídeo puedo publicar en más de una cuenta.
      Tendrás que guardar el token de cada amigo en una base de datos o archivo.txt para poder utilizarlo, pero si, sin problema ;)

      Eliminar
    2. Te lo comento porque he leido no se si tendrá que ver con esto que a partir de Abril de 2013 facebook quita la habilidad de postear en el muro de otras personas.

      Posting on wall of the user´s friends is a deprecated functionality and will not be available anymore very soon, because in 99% of the cases it´s unwanted and spam.

      En caso de que esté equivocado me puedes decir o dar un link de como averiguar el token de un amigo?
      Gracias.

      Eliminar
    3. A ver, eso lo que hace es que TÚ escribes o publicas en su muro, no que escribas por él.

      Si un usuario se loga es ÉL quien publica, no tú ;)

      Eliminar
  30. Cual es el codigo para publicar en varias paginas al mismo tiempo.?

    ResponderEliminar
  31. de ma este error: OAuthException: (#368) The action attempted has been deemed abusive or is otherwise disallowed.

    A alguien más le da ese problema?

    ResponderEliminar
    Respuestas
    1. Habrás infringido los límites de publicación o algo similar :-/

      Eliminar
  32. Mi problema es que la aplicación que quiero hacer no quiero enviármelo a mi mismo ni a una pagina sino a un usuario en concreto y me funciona para mi con /me pero para enviar a otro usuario no sé si hace falta mas permisos pero le pongo el id_user y no me lo envía.

    ResponderEliminar
    Respuestas
    1. En comentarios anteriores comentaban que desde abril facebook no lo permitiría.

      Eliminar
  33. te puedes pasar el codigo del from si no fuera mucha molestia

    ResponderEliminar
  34. Hacia mucho que venia dando vueltas y no podia publicar en la pagina, solo poner un mensaje de texto normal. Me salvaste!!! GRAN POST!

    ResponderEliminar
  35. Cojonudo todo, pero más cojonudo es que respondas a todos ! Milgracias

    ResponderEliminar
    Respuestas
    1. jeje Gracias Pepe Lozano, alguna vez recuerdo haber dejado comentarios con preguntas y ni autor ni visitantes respondieron nunca, no me gustó, procuro evitarlo ;)

      Eliminar
  36. Todo bien pero en la url me figura Expiration Date=5.183.866 si esto esta basado en segundos darian unos dos meses de vigencia para ese Token, es asi no?. Saludos!

    ResponderEliminar
  37. Gran tutorial y gran aporte de los comentarios! Un 10 para todos ;)

    ResponderEliminar
  38. Hola a todos. Gracias por las indicaciones durante todo el post, junto a sus comentarios.

    Mi problema es que, obtengo el Token original del usuario, que administra una página donde publica automáticamente. Lo cierto es que durante la vida del Token original publica como si se hiciera desde la propia fanpage. A continuación, antes de que se caduque lógicamente, solicito el indefinido con el Token del usuario a través de la URL que indicáis arriba y lo guardo para futuras publicaciones. Cuando pasa el tiempo, se expira igualmente que el original.

    No comprendo donde esta mi error.
    Gracias y un saludo.

    ResponderEliminar
    Respuestas
    1. https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EL_TOKEN_DE_USUARIO

      Y se queda válido para siempre ;)

      Eliminar
    2. Muchas gracias. Ahora ya lo conseguí.

      Eliminar
  39. Buenas, muy bueno la verdad el post. Me funciona todo pero unicamente por el periodo que no me caduca el token. Yo necesito poder hacer post en una fan page de manera offline. Es decir cuando se desata un evento publico en la fan page. No necesariamente va a haber un usuario logueado en facebook y no necesariamente ese usuario va a ser administrador. Hay alguna forma de obtener el token actual en forma dinamica mediante los valores que no caducan que son la app id, page id y el secret? De ser asi me darian una mano enorme con algun ejemplo.

    Desde ya muchas gracias.

    ResponderEliminar
    Respuestas
    1. https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EL_TOKEN_DE_USUARIO

      Y se queda válido para siempre ;)

      Eliminar
    2. Hola Minipunk he seguido todos los pasos. Todo perfecto, pero cuando intento hacer que no caduque el token poniendo la url que indicas la respuesta es la siguiente

      access_token=[NUEVO_TOKEN]&expires=5182490

      Me despista el parametro expires, parece indicar que caduca en 60 días. ¿Es fiable ese parámetro? ¿A ti te aparece?

      Muchas gracias, excelente post

      Eliminar
    3. Quita eso de expires o tendrás que renovar los tokens cada cierto tiempo

      Eliminar
  40. Pero esto "access_token=[NUEVO_TOKEN]&expires=5182490" es la repuesta que devuelve la ejecución de la url que indicas.

    ¿Si solo utilizo el valor [NUEVO_TOKEN] será suficiente?

    Muchas gracias y saludos.

    ResponderEliminar
    Respuestas
    1. No, tras hacer eso, haces esto otro:
      https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EL_TOKEN_DE_USUARIO

      Y ya se queda para siempre ;)

      Eliminar
  41. Muchas Gracias por el POST de lo mejor que encontré.

    Gracias!!!

    ResponderEliminar
  42. Minipunk a mi también me pasa lo que al anómimo...

    1- Pongo esta url en el navegador siguiendo los pasos:
    https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN

    2- Però la respuesta que sale en el navegor tiene (como indica el anonimo) estos valores:

    En una pantalla en blanco sale el texto "access_token=[NUEVO_TOKEN]&expires=5182490"

    3- Me despista el valor expires... ¿Sabes que quiere decir?

    ResponderEliminar
    Respuestas
    1. Segun el debug... caducó hace 2 meses?

      identificación de aplicación:xxxxxxx
      Metadata: []
      identificador de usuario: xxxxxx
      Emitido(a): 1370992516 (Hace 17 horas)
      Caduca: 1376176516 (hace aproximadamente 2 meses)
      Válido: True
      Origin: Unknown
      Ámbitos: create_note email manage_pages photo_upload publish_actions publish_stream share_item status_update video_upload

      Eliminar
  43. Buenas tardes! he hecho todo tal cual se indica, y he cambiado al final el id de mi perfil por el de la fanpage, y aunque no me sale error, me sale el archvio en blanco como si lo hiciera, peor e el fanpage no sale nada, y le di todos los permisos necesarios.

    Alguien me podría orientar por favor?, adjunto código:

    require_once 'src/facebook.php';



    $app_id = '1905xxx937';
    $app_secret = '9665a6bxxxxxxx68';
    $token = 'CAACCktaEZA6UBALnmwjaXXXXXXXXX';




    $facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => false

    ));

    $req = array(
    'access_token' => $token,
    'message' => 'Sólo Amor y Art',
    'name' => 'Madre, hija y espíritu.',
    'link' => 'http://facebook.com/mipagina',
    'description' => 'Madre, hija y espíritu.',
    'picture' => '');

    $res = $facebook->api("/".$app_id." /".$token."", "post", $req);

    ResponderEliminar
    Respuestas
    1. Picture lo tienes mal puesto, necesitas colocar la url de una imagen

      Eliminar
  44. Hola tengo mi perfil en facebook y varias paginas.
    Estoy intentando enlazar con la api y temgo ya mi ID y tl ToKEN, pero o no se que es el ID_DE_TU_PÁGINA.



    $res = $facebook->api('/ID_DE_TU_PÁGINA/feed', 'POST', $req);

    Me podeis echar un cable?..

    gracias.

    ResponderEliminar
    Respuestas
    1. Pon en el navegador esto https://graph.facebook.com/me/accounts?access_token=TU_TOKEN y te da los tokens y los IDs de cada página ;)

      Eliminar
    2. Me sale esto:
      {
      "error": {
      "message": "Invalid OAuth access token.",
      "type": "OAuthException",
      "code": 190
      }
      }

      Eliminar
    3. Creo que puede ser un tema de permisos, pero no tengo esto muy claro.

      he puesto https://graph.facebook.com/me/accounts?access_token= MI_TOKEN

      y sale esto:
      {
      "error": {
      "message": "Invalid OAuth access token.",
      "type": "OAuthException",
      "code": 190
      }
      }

      antes he puesto esto

      https://graph.facebook.com/oauth/authorize?type=user_agent&
      client_id=ID_APLICACION&
      redirect_uri=http://www.facebook.com/connect/login_success.html&
      scope=offline_access,manage_pages,publish_stream,create_event

      y me ha dado un mensaje :

      Success
      ADVERTENCIA DE SEGURIDAD: trata la dirección URL si fuera tu contraseña y no la compartas con nadie.

      Eliminar
    4. Perdona si te molesto.

      he puesto esto: https://graph.facebook.com/me/accounts?access_token=MI_token
      y sale una lista json con las paginas qu tengo:


      supongo que el parametro ID (je: 402445606451293), es el que debo usar no?


      "data": [
      {
      "category": "Industrials",
      "name": "Almazaras y Minialmazaras Roque. Molinos, prensas y depositos.",
      "access_token": "31231231231231231231231xxxx",
      "id": "402445606451293",
      "perms": [
      "ADMINISTER",
      "EDIT_PROFILE",
      "CREATE_CONTENT",
      "MODERATE_CONTENT",
      "CREATE_ADS",
      "BASIC_ADMIN"
      ]
      },
      {
      "category": "Health/beauty",
      "name": "Masajista malaga ( Quiromasaje y Osteopatia )",
      "access_token": "6786786786786786787686xxxxxxx",
      "id": "448692135155518",
      "perms": [
      "ADMINISTER",
      "EDIT_PROFILE",
      "CREATE_CONTENT",
      "MODERATE_CONTENT",
      "CREATE_ADS",
      "BASIC_ADMIN"
      ]
      },

      -------------------------------------------------------

      $res = $facebook->api('/ID_DE_TU_PÁGINA/feed', 'POST', $req);
      $res = $facebook->api('/402445606451293/feed', 'POST', $req);

      $app_id = '304973406299708'; // Sustituimos las X por el ID de nuestra aplicación
      $app_secret = '706ec6b09109cba804eed90f5312cf82'; // Sustituimos las X por el Secret de nuestra aplicación
      $token = 'chorizo_de_token....'; // ponemos nuestro token

      $facebook = new Facebook(array(
      'appId' => $app_id,
      'secret' => $app_secret,
      'cookie' => false
      ));
      $req = array(
      'access_token' => $token,
      'message' => 'Mensaje de prueba con mi aplicación');

      $res = $facebook->api('/402445606451293/feed', 'POST', $req);

      Eliminar
  45. Hola Minipunk la verdad muy interesante tu post, estaba buscando esto, te hago una consulta, es necesario tener una pagina web con certificado SSL para asociarla a la app que creamos para poder realizar esto? Soy nuevo en esto y estoy tratando de comprender un poco! Saludos!

    ResponderEliminar
    Respuestas
    1. Hola Hugo, no, no es necesario, eso lo necesitarías en el caso de añadir la aplicación que crees a una pestaña de facebook, en ese caso si, para esto que vemos aquí no ;)

      Eliminar
  46. Hola me sirvio de mucho este post.. y tambien los comentarios para poder obtener un link que dure 60 dias.. pero tengo una pregunta.. en facebook cuando publicas manualmente se puede publicar un dia especifico por ejemplo el dia de mañana a las 3 de la tarde.. esto es posible con el api?

    ResponderEliminar
    Respuestas
    1. Si, algo he visto, si que se puede, pero tendría que buscar un ejemplo, si hago algo te respondo por aquí.

      Eliminar
  47. hola tengo una duda, dice que tengo que ser administrador de la pagina que quiero que publique, pero si solo era un CREADOR DE CONTENIDOS? y ya no estoy en la pagina, pero tengo el ID puedo publicar?

    y otra duda tengo que desde la pagina acepatr los permisos de la aplicacion o no es necesario?

    ResponderEliminar
    Respuestas
    1. Si, tienes que aceptar los permisos o no puedes publicar.
      Respecto a ser creador de contenidos... como tú eres el primer caso esperaremos a ver que tal resultado te da porque los demás no lo sabemos :-))

      Eliminar
  48. Hola a todos.

    La verdad es que es un tutorial muy práctico. Pero ahora hay que dar un paso más en mi caso y necesario publicar una imagen de una fanpage y aun no he conseguido adaptar el código. ¿Alguna referencia para poder hacerlo?

    Gracias y un saludo.

    ResponderEliminar
    Respuestas
    1. Con la imagen en tu mismo hosting:

      require_once 'src/facebook.php';
      $filename = "foto.jpg";
      $text ="Mensaje que es el comentario que va con la foto";
      $app_id = 'TU_ID';
      $app_secret = 'TU_CSECRET';
      $access_token = 'EL_QUE_SEA';
      $facebook = new Facebook(array(
      'appId' => $app_id,
      'secret' => $app_secret,
      'cookie' => true
      ));
      $facebook->setFileUploadSupport(true);
      $req = array(
      'access_token' => $access_token,
      'message'=> $text,
      "source" => '@' . realpath($filename)
      );
      $res = $facebook->api('/ID_DE_TU_PAGINA/photos', 'post', $req);

      Eliminar
  49. Saludos, interesante el post. Venga, aprovecho para preguntarles algo, recien estoy necesitando una app que publique contenido flash en los muros de los usuarios, en los docs de Developers encontré esto: https://developers.facebook.com/docs/howtos/feed-gaming/ Oh, si, en las pruebas funciona perfecto, requiero tal cosa, pero no veo que hacer.

    La aplicación la necesito para embedir player flash de mis clientes de streaming.

    si tienen alguna información que me puedan facilitar, se los agradezco.

    ResponderEliminar
    Respuestas
    1. Eso es diferente, deberías crear una aplicación de pestaña de facebook.

      Eliminar
  50. Hola, excelente blog pero tengo un problema, como tendria que hacer si quiero administrar las fanpage de varios perfiles con esta app??

    gracias

    ResponderEliminar
    Respuestas
    1. con variables, una variable por cada página con su token y su ÏD

      Eliminar
  51. Yuppy!!! lo logré!! mil gracias Minipunk!

    ResponderEliminar
    Respuestas
    1. De nada mujer, para eso lo he publicado, ahora haz que no caduque el token, lee el primer comentario ;)

      Eliminar
  52. Primero que nada felicitarte y agradecerte por tan clara y prolija explicación. Realmente has ayudado a muchos.
    En este momento me funciona sin problemas para publicar en una de mis páginas, pero solamente funciona con el campo 'message', no me deja agregar ni links, ni imágenes ni nada por el estilo. Tienes idea que puede ser?

    ResponderEliminar
    Respuestas
    1. Pues no, si te deja una cosa debería dejarte la otra...
      Quita los token secretos y pega el resto del código en http://pastebin.com/ y déjamelo ver a ver si encuentro un error o algo ;)

      Eliminar
  53. Hola, excelente post...tengo un problema cuando hay que darle permisos para administrar paginas y publicar en el muro...cuando clickeo el boton de "get access token" realiza una pequeña carga y no me abre la ventana q mostras en las capturas de pantalla...alguien sabe porque puede ser?...saludos...

    ResponderEliminar
  54. Mil disculpas...estuve probando 2 dias seguidos sin resultados positivos y despues de publicar mi duda intente nuevamente y salio andando...ja...perdonen las molestias...saludos...

    ResponderEliminar
  55. Hola, excelente tutorial! mil gracias...

    te molesto con un apregunta....
    al querer subir una imagen a la pagina, me sale el siguiente error:

    Fatal error: Uncaught OAuthException: (#200) Subject does not have permission to post photos on this page thrown in C:\xampp\htdocs\administration\src\base_facebook.php on line 1271

    me imagino que debe ser que me faltan permisos, como puedo modificar los extended permision o los que tenga que modificar?

    ResponderEliminar
  56. Hola:

    Excelente tutorial. Ya tengo aotumatizados mis publicaciones en una página de facebook con links, imagenes, videos aparentemente sin problemas.

    Lo que sucede es, que solamente los uauarios que le han dado a "me gusta" ven lo que subo a través de la API. Si lo publico con el perfil de mi página, desde mi cuenta personal , lo ve todo el mundo incluso sin hacer login a facebook.

    Cómo puedo hacer que lo que publico conla API, lo vea TODO EL MUNDO ?

    Muchísimas gracias

    ResponderEliminar
  57. Hola:

    Ya lo he arreglado, hay que desactivar el Sandmode ...

    ResponderEliminar
    Respuestas
    1. Muchas gracias por el aporte AVC :)

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
    3. Donde desactivo eso en mi aplicación o en la cuenta de facebook !

      logro publicar en facebook pero nadie puede ver mis publicaciones .

      Eliminar
  58. Buenas tardes,

    En primer lugar darte las gracia por el tuto. ahora el problema:

    Llevo un par de dias intentando que el token no caduque nunca y me resulta imposible, he seguido los pasos comentados pero nada de nada.

    Les dejo la respuesta al introducir el link con el token de facebook.

    url de la pagina:
    https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=CAAIL1pVZCHpwBAKz4S90Lz1v3NateML0oXR4ZCnxZAZA3YpSZBD2ZCSYIZBz2Hk4u2vr2GqsVv0ePdCJLxHtw72qvbClewvjPf42zZA5tALV7i4ifR0ureAOTM2e6RHDW4CPlZB7JKHPrsedB4ca8isI7pYMZBNLok4H5hO1Vz512aSUY44s6bZB9219qnsQZBd0LKd8MlJKNaIGGQZDZD

    {
    "error": {
    "message": "Error validating application. Invalid application ID.",
    "type": "OAuthException",
    "code": 101
    }
    }

    ResponderEliminar
    Respuestas
    1. Cuando vas a generar o renovar el token fíjate en un despegable en la parte superior a ver con que aplicación estás trabajando, si aún así no te sale, elimina y crea de nuevo la aplicación, le sucedió hace poco a un amigo mio, pero revisa el desplegable que te comento ;)

      Eliminar
  59. Gracias por responder tan rápido, ya encontre el fallo pero ahora lo maximo que me da son dos meses de vida en el token y no se porque al resto le sale ilimitado, :(

    ResponderEliminar
    Respuestas
    1. He leído por ahí que a las aplicaciones nuevas les quieren poner ese límite, incluso a la suya propia para smartphone habrá que renovar el token :-/

      Eliminar
    2. oks, Gracias pero sabes si hay alguna forma de renovar el token automaticamente?

      Gracias por tu trabajo. :D

      Eliminar
    3. No, automático no lo permite, porque para cualquier perfil hay que acceder a una ventana emergente y pulsar el botón que va con javascript por lo que se precisa la presencia manual del usuario :-/

      Eliminar
  60. Hola queria saber si alguno conoce algun codigo php para face para mostrar la lista de amigos y canales gracias

    ResponderEliminar
  61. Hola Minipunk... Gracias por compartir...

    Me gustaría saber si conoces (de existir) alguna manera de compartir imágenes en Facebook desde mi web?? algo así como este tutorial, pero en vez de compartir un post que sea una imagen.

    Muchas gracias.

    ResponderEliminar
  62. hola muy bueno tu post amigo me funciono, solo que tneog un detalle que por mas que he buscado no logro componer ya que si me postea el script en mi fanpage el problema y lo mas raro desde mi punto de vista es q estos enlaces solo los logro ver yo o.O ya corrobore con otra cuenta de face y efectivamente no me salen ninguno de los enlaces podrias ayudarme?

    ResponderEliminar
    Respuestas
    1. jajaja bueno esto es vergonsozo.. XD consejo asegurense que el sandbox mode este desactivado jaja

      Eliminar
    2. En tu perfil tienes un apartado de aplicaciones y en cada aplicación una configuración de privacidad, tienes que poner la tuya pública.

      Eliminar
  63. Alguien sabe por qué sale este aviso:

    ADVERTENCIA DE SEGURIDAD: trata la direccion url como si fuera tu contraseña

    Muchas Gracias

    ResponderEliminar
  64. Muy buenas,
    no encuentro la forma de poder publicar contenido en mi página de facebook desde mi página web, he seguido los pasos del tutorial, pero a la hora de ejecutar el código para publicar nuevo contenido en facebook, me salta el error : Uncaught OAuthException: (#10) Application does not have permission for this action thrown in...
    He comprobado la configuración y permisos de la app de facebook y aparentemente está todo correcto, espero que podáis orientarme, por cierto antes de enviar la publicación a facebook se ha de hacer login en mi página web con el usuario de facebook?

    saludos y gracias!

    ResponderEliminar
    Respuestas
    1. Bueno al fin he conseguido solucionarlo!, un error de sintaxis se había colado en mi código jajaja
      Por cierto Minipunk, gracias por el post!

      Eliminar
  65. Hola alguien sabe como publicar imágenes en el muro de la fan page y que se vean grandes? igual que si le das a publicar: Foto / Vídeo

    Conseguí subir una imagen a un album así:

    $facebook->setFileUploadSupport(true);
    $ruta = 'RUTA DEL ARCHIVO EN EL SERVIDOR';
    $file = '@' . realpath($ruta);
    $attachment = array('source' => $file, 'access_token' => $ACCESS_TOKEN);
    $result = $facebook->api('/'.$album_uid.'/photos', 'POST', $attachment);

    el $album_uid se puede conseguir así:

    $albums = $facebook->api('/'.$PAGE_ID.'/albums');
    foreach ($albums['data'] as $album) {
    if($album['type'] == 'profile'){
    $album_uid = $album['id'];
    }
    }

    Lo demás todo igual, ahora me falta pasar esa foto del album al muro como si publicase una nota normal, alguien sabe como?

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola de nuevo, ya conseguí hacer lo que quería, solo tenia que cambiar de album así:

      if($album['type'] == 'profile'){
      $album_uid = $album['id'];
      }

      por esto:

      if($album['type'] == 'normal'){
      $album_uid = $album['id'];
      }

      otro album

      Saludos

      Eliminar
    2. Muchas gracias por el aporte, lo sumamos :-))

      Eliminar
  66. Hola que tal Minipunk gracias por el tutorial, me funciono sin problemas, pero lo que necesito es que al momento de publicar desde la app se publique con el nombre y la foto del usuario de la cuenta de facebook, es decir que necesito tomar el token del usuario, ya lo logre hacer manualmente es decir obtener el token especifico, pero quiero que esto se haga automáticamente es decir que la app tome el token la ponga como variable y publique en nombre del usuario. No se si me hice entender pero llevo algunos días intentando sin lograrlo y quisiera que me des una ayuda mas porfa :-) gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Necesitas capturar el token y guardarlo en una base de datos... A ver si mañana puedo prepararte un ejemplo :-)

      Eliminar
  67. Excelente Artículo, felicidades.

    Una duda: al usar:
    https://graph.facebook.com/me/accounts?access_token=MI_TOKEN me devuelve un array vacio.

    ResponderEliminar
  68. Hola, Gracias por la info. solo que revise y encontre que Facebook ha desaprobado el offline_access manera, por lo que este método ya no funciona! lo maximo que puede dar es 60 días.de expiracion del token

    ResponderEliminar
  69. hola como estas mira por casualidad sabes si se tiene que tener un vps y no hosting compartido ya ahora pide https porque no logro hacerlo funcionar

    ResponderEliminar
  70. muchisimas gracias!
    me ahorraste un monton de tiempo!!

    Saludos!

    ResponderEliminar
  71. Para los que al tratar de que el TOKEN no expire usando la URL les aparece la pantalla en blanco con el texto "access_token=[NUEVO_TOKEN]&expires=5174125" o cualquier otro valor de expires=#, comento:

    Originalmente es emitido un TOKEN de un tiempo de vida corta, que luego al tratar de ampliar su tiempo de vida mediante la mencionada URL colocandole los datos de la app (ID y SECRET) + el TOKEN lo unico que logran es extenderlo 2 meses solamente.

    El valor de expires es el tiempo de vida de este nuevo TOKEN entregado como respuesta a la URL
    y esta expresado en segundos con lo cual si lo calculan dentro del buscador de google (si es calculadora tambien), "5174125 segundos a meses" les va a decir "1,96753955 meses" que tiene de vida de esa TOKEN

    Si vamos a la fuente, facebook, lo aclara pero en ingles
    https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/#page_access_token

    En concreto lo que dicen es que hagas toda la operacion de la URL para un TOKEN de corta vida y que usen ese nuevo TOKEN, el cual no caducara por el tiempo indicado.
    y cuando expire repitas la operacion pudiendo o no ser el mismo TOKEN.

    Asi que no se vuelvan locos como yo y usen ese TOKEN y en dos meses vemos ;)

    ResponderEliminar
  72. Hola Minipunk, tengo un pequeño problema con mi aplicación siguiendo los pasos que indicas en el tutorial.

    Cuando llega el momento de asignarles los permisos a la aplicación, puedo seleccionarles todos, darles a aceptar y que me asigne un access token.

    Lo curioso es que, cuando vuelvo a decirle que me de la clave de acceso, el public_stream me aparece desactivado.

    Obviamente, cuando hago la prueba de envio para

    /ID_PAGINA/feed,"post", me arroja el siguiente error: The user hasn't authorized the application to perform this action.

    La id de página es la que me devuelve el /accounts?access_token= como comentabas con ese access token que aparece

    Imagino que es por eso, los permisos, pero no se en donde tengo que configurar permisos si en la página cualquiera puede publicar, y no hay restricciones. ¿hay que configurar algo adicional en los permisos del developer?

    ResponderEliminar
    Respuestas
    1. En facebook, antes de coger el token, en la tercera imagen de este post lo ves ;)

      Eliminar
  73. En esa ventana no hago más que pulsarle al publish_stream, darle a aceptar, y cuando vuelvo a entrar para comprobarlo en la misma ventana, me aparece desactivado, con todas las otras opciones que indicas activadas. Y mira que le he dado también a "clear" para darle un reset, y nada.

    Me voy a opciones de la página donde quiero publicar y tiene activado "cualquiera puede publicar" y ese usuario que utilizo es administrador de la página. Todo muy raro.

    ResponderEliminar
    Respuestas
    1. Le sucedió a un amigo, lo que tienes que hacer es crear una aplicación nueva :-/
      Esa, por lo que sea da fallo, seguro que en el desplegable que tienes más arriba te sale como aplicación que estás editando la oficial de facebook, prueba a crear una nueva y seguir estos pasos en la nueva ;)

      Eliminar
  74. Ya tengo el metodo para obtener un token ETERNO!!! y con un simple archivo php ;)
    En la brevedad lo publicare en mi blog (perdon minipunk pero no queda bien como un comentario, ademas de que no utilice tu codigo), que bastante olvidado lo tengo y de paso explico el uso de FQL y demas menesteres como pubicar en varias fanpage e inclusive la publicacion a Twitter!!!
    Para los impacientes que quieran se ponen en contacto conmigo y listo, mientras tanto a esperar
    a, mi blog es http://www.pcdirck.com/blog
    Saludos

    ResponderEliminar
  75. Minipunk buenas tardes, ¿como puedo borrar contenidos de la fanpage via api? Lo estoy intentando con DELETE pero no me deja.

    ResponderEliminar
  76. hola quiero hacer una app para poder publicar en mis grupos simultaneamente, es posible??

    ResponderEliminar
  77. Hola buenas Tardes tengo un pequeño problema

    De antemano Muchas Gracias por el excelente tutorial

    El código funciona perfectamente i publica en la fan page pero, solamente yo puedo ver lo publicado, es decir si otra persona entra a mi fan page no se ve lo que mando desde mi pagina web, pero si publico desde mi fan page si lo ve todo el mundo


    Este es mi codigo

    require_once 'facebook/src/facebook.php'; //Esto llama a la carpeta con el parse que nos descargamos antes

    $app_id = '36xxxxxxxxxxx01'; // Sustituimos las X por el ID de nuestra aplicación
    $app_secret = 'daxxxxxxxxxxxxxxxxxxxxxxxxxx5'; // Sustituimos las X por el Secret de nuestra aplicación
    $token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxmArKYJ0W4LJJBvSqkVu8pWce0FhdaaB5I84ZC5MaYCZB3l39nSwW2QJKwJexKrP3bypKiZCIoers30AuxeIS0ZCq2ngKMjCBn6zAiudEySlRKwjM0mjQ'; // ponemos nuestro token


    $masage = '';
    $name = $row_not['strTitulo'];
    $link = $row_not['str_Enlace_Bit'];
    $description = $row_not['strPar_Corto'];

    if ($row_not['strImagen_01'] != '') {

    $picture = 'http://www.ixxxxxxxx.com/imagenes/noticias/'.$row_not['strImagen_01'];

    } else if ($row_not['strImagen_02'] != '') {

    $picture = 'http://www.xxxxxxxxx.com/imagenes/noticias/'.$row_not['strImagen_02'];

    } else {

    $picture = 'http://www.xxxxxxxxx.com/imagenes/noticias/'.$row_not['strImagen_03'];

    }

    $facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => false
    ));
    $req = array(

    'access_token' => $token,
    'message' => $masage,
    'name' => $name,
    'link' => $link,
    'description' => $description,
    'picture' => $picture,

    );

    $res = $facebook->api('/45xxxxxxxxxx731/feed', 'POST', $req);

    ResponderEliminar
    Respuestas
    1. Creo que ya lo resolviste, por si otra persona lo lee, que entre en https://www.facebook.com/appcenter/my y en la configuración de su propia aplicación gestione la visibilidad de las publicaciones (¿Quien puede ver, mis amigos, solo yo, puúblico, etc...)

      Eliminar
  78. Gracias ya resolví con la publicación anterior del Sandbox Mode

    Muchas gracias por ti tutorial

    ResponderEliminar
  79. hola muchas gracias por el tutorial, una pregunta como hago para que me funcione con el cron pues una vez que me desconecto de facebook ya no me publica nada! :( osea funciona esto para trabajar sin conexión

    ResponderEliminar
    Respuestas
    1. En tu servidor, donde alojas los archivos, en el CPanel tienes un apartado que se llama CRON o TAREAS

      Eliminar
  80. Muchas gracias! me funciono todo perfectamente siguiente tu tutorial :)

    ResponderEliminar
  81. Estimado Minipunk, muuuchas gracias por tan valioso apoyo.
    ¿Será que me puedas ayudar con una duda?... cuando hago eso de que el token nunca caduque...

    https://graph.facebook.com/oauth/access_token?client_id=Mi_ID_Aqui&client_secret=Mi_ID_Secreto_Aqui&grant_type=fb_exchange_token&fb_exchange_token=Mi_Token_Aqui

    Me aparece este error....
    {
    "error": {
    "message": "Error validating access token: Session has expired on 16 de enero de 2014 10:00. The current time is 16 de enero de 2014 14:58.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 463
    }
    }

    ¿Qué crees que pase canijo?

    ResponderEliminar
    Respuestas
    1. Reautoriza primero tu token desde el panel y con el token nuevo haz eso para que no caduque ;)

      Eliminar
    2. Listo, ya quedó estimado Minipunk, pero ahora cuando publica algo y entro con otro usuario que tengo de Facebook NO puedo ver la publicación, ¿qué podría hacer?

      Muchas Gracias

      Eliminar
    3. Ok, para todos aquellos que les pase lo mismo que a mi, les cuento, una vez que logran que se pueda publicar de forma atomática en su muro, algunos NO podrán ver dicha publicación desde otra cuenta, para eso, deben ir a:

      Pestaña de Aplicaciones / Status & Review /
      Do you want to make this app and all its live features available to the general public? / Le dan que SI y así ya todo el mundo podrá ver sus mensajes.

      Muchas gracias Minipunk por este ejemplo, de verdad has ayudado a muchos (incluyéndome)

      Eliminar
    4. Muchas gracias por tu aportación :)

      Eliminar
  82. He conseguido configurar una herramienta que publica por mí en Facebook en los grupos pero Tengo un ploblema con las imágenes me aparecen en un cuadradito pequeño al lado del vínculo. Y me gustaría que apareciera la imágen en grande y debajo el vínculo. Alguien me puede ayudar para saber como hacerlo?

    ResponderEliminar
    Respuestas
    1. En cambio en el móvil si se ven Bien. En Grande la ímagen y el vínculo debajo pero en el ordenador no.

      Eliminar
    2. Otra opción podría ser que publicara un enlace y esperara un segundo antes de ejcutar la acción de publicar para que Facebook mismo cogiese la foto que hay en el vínculo... Pero no se como podría hacerlo

      Eliminar
  83. Hola gracias por el post, no se si me puedes ayudar, e seguido todos los pasos que pusite pero a la hora de ejecutar el index me sale: Fatal error: Uncaught CurlException: 7: Failed to connect to 255.255.255.255: Network is unreachable thrown in /home/vol11_7/vzpla.net/user_14194355/htdocs/facebook/src/base_facebook.php on line 1035

    E tratado de buscar alguna solución y no se si es un problema de mi host, o de mi conexión; ojalá me ayudes y en todo caso si es un problema de host, me podrías recomendar alguno gratis. Gracias

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  84. bueno y para que me sirve esto??

    ResponderEliminar
  85. soy nuevo cuéntame, para que finalidad es esto¡¡¡?? pa escnderme de la novia?? o como¡?

    ResponderEliminar
  86. Hola Minipunk, mira yo quiero que el token de fb nunca expire lo cual por lo que lei que publicaste ingrese a:

    https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN.

    El tema es que cuando me genera el token en la pagina a lo ultimo dice algo como expires y un numero:
    CAAGpnfimE...........ewBAACuzTtRjnyZBvD&expires=5213842

    Este sería el tiempo en el que expiraría dicho token? porque este número que me tira es menor a un año... y lo que quiero es que nunca expire para evitar errores a futuro.

    Gracias....

    ResponderEliminar
  87. una de las cosas que quisiera lograr es cambiar la portada ( cover) de fanpages de facebook pero de modo automatico, imagino que con esto se podria pero de verdad me confundo con tanto codigo.

    ResponderEliminar
  88. Hola exelente tutorial, gracias or publicarlo, una pregunta tengo un problemita: mi necesidad es publicar productos desde una sola pagina a facebook pero me sale este error:
    "Fatal error: Uncaught OAuthException: Error validating access token: The session is invalid because the user logged out..., me podrias ayudar? gracias otra vez

    ResponderEliminar
  89. Excelente tutorial Minipunk, estoy tratanto de implementarlo pero me da un error:
    "Fatal error: Uncaught CurlException: 7: couldn't connect to host thrown in /home/xxxx/public_html/v2/src/base_facebook.php on line 1012"
    Si es que me podrías ayudar o alguien que sepa como resolverlo.

    Desde ya gracias...

    ResponderEliminar
    Respuestas
    1. Hola a todos, he leído algunos comentarios anteriores y encontré que otros tuvieron el mismo problema y como Minipunk había respondido a esa cuestión, el problema realmente es con el proveedor de hosting, lo cambie y funcionó perfectamente.
      Excelente Minipunk... gracias por tu aporte.

      Eliminar
  90. Buenas Tarde Amigo Saludo desde Venezuela Te escribo por el siguiente motivo siempre y cuando usted pueda ayudarme estoy haciendo una aplicacion web una pagina la cual la alimenta un sistema donde el usuario guarda toda su informacion el caso es que quiero publicar en mi propio muro del facebook las promociones que estan alojada en una base de datos algo parecido al video tutorial que hiciste en la parte donde publica en tu propio muro con el video con la foto el titulo etc ya tengo un api y api secret como obtengo el token para que sea permanente y pueda publicarme en el muro del facebook al dar clik en el boton guardar cuando se envia a la base de dato sera tan amable si me puedes eyudar o enviarme ese mismo ejemplo que tienes en ese video te lo agradeceria de corazon... Espero Una pronto Repuesta... Ing.Aparicio Jose

    ResponderEliminar
  91. Hola, gracias por el tutorial. Pero tengo un problema hago todo exactamenet como dices, obtengo el token de página puedo publicar y incluso comentar algunso posts con la api mediante la opcion
    $facebook->api('/'.$_REQUEST['facebookid'].'/comments', 'post', $msg_body );

    El problema es que los post simples de texto de cambio de estado todo ok. Pero si alguien postea una imagen con un comentario e intento comentar esa publicación con la linéa de arriba me da el error: (#200) Permissions Error oauthexception.

    En el token tengo todos los permisos, de hecho puedo publicar y comentar posts pero si el post tiene imagen nada de nada.
    Obtengo los datos con $daFeed = $facebook->api("/$pageId/feed");
    el de tipo texto cuando lo lo leo es: type": "status", y el otro es "type": "photo", el caso es que no puedo comentar el segundo y no se porque.
    Se que es complicado, estoy desesperado y ya no se que hacer.
    Si alguen puede ayudar, gracias.

    ResponderEliminar
    Respuestas
    1. Mañana hago una prueba para comprobarlo.
      Entretanto prueba ha hacer un var_dump() a ver que valores te devuelve y si la photo tiene algún id más además de la imagen...
      Eso aún no lo he probado.

      Eliminar
    2. Gracias por responder.
      Yo solicito los datos de la siguiente forma:
      $facebook->api("/$pageId/feed");
      Las unicas difrencias que veo es que en array que devuelve el que tiene foto y no puedo comentar:

      "id": "1445840755661613_1445883322324023",
      "message": "comernatir sobre foto.",
      "type": "photo",
      "status_type": "added_photos",
      "object_id": "1445883268990695",

      y el que sí puedo comentar:

      "id": "1445840755661613_1445882918990730",
      "message": "registro actividad",
      "type": "status",
      "status_type": "mobile_status_update",

      Cuando comento uso el facebookid que será la segunda parte del id de arriba.
      Me acabo de dar que cuenta que sí hay un id extra en el de la foto, el object_id. Voy a probar este en vez del id del post. Quiza si es tipo photo o story haya que usar ese, pero no dice nada en ningun sito.

      Lo pruebo y te comento

      Gracias de nuevo.


      Eliminar

Deja tu comentario.
Si sólo quieres mostrar tu nombre elige (Nombre/url) y deja en blanco el campo de url.