Obtener datos del muro de Facebook con PHP

Podemos obtener fácilmente datos del muro de facebook con PHP gracias al "graph api". Lo único que tenemos que hacer es hacer una llamada al API y procesar los datos que nos devuelve en formato JSON. PHP nos ofrece herramientas para hacer esto de la forma más sencilla posible

Vamos a ver un ejemplo de como obtener los datos del muro de Imaginanet. Para ello debemos saber el identificador de la página (o del usuario en caso de que el muro que nos interese sea el de una persona y no una página). Ese identificador lo obtenemos, por ejemplo de la url de la página. Si accedemos a la página de facebook de Imaginanet, la url que tenemos es la siguiente: http://www.facebook.com/pages/Imaginanet/293803966478. El número que aparece al final es el identificador que queremos.


	$id_usuario = "293803966478";
	$respuesta = file_get_contents("https://graph.facebook.com/" . $id_usuario . "/feed");


En la variable "$respuesta" tenemos los datos que queremos en formato JSON, para transformarlos en un array asociativo que nos permita manejarlo de forma sencilla solo tenemos que hacer lo siguiente:


	$datos = json_decode($respuesta,true);


Ahora en la variable "$datos" tenemos un array asociativo con los datos del muro.

Si por ejemplo quisieramos sacar las últimas 4 fotos que haya en las publicaciones del muro, haríamos lo siguiente:


	$facebook = array();
	$i = 0;
	foreach ($datos["data"] as $value) {
		if (trim($value["picture"]) != "") {
			$facebook[$i]["src"] = trim($value["picture"]);
			$facebook[$i]["titulo"] = trim($value["name"]);
			$facebook[$i]["texto"] = trim($value["description"]);
			$i++;
		}
		if ($i>4) break;
	}
	$html = "";
	foreach ($facebook as $key => $value) {
		$html .= '
			

'.$value["titulo"].'

<img src="' . $value["src"] . '" alt="' . $value["titulo"] . '" />
'.$value["texto"].'
'; } echo $html;

Hay que tener en cuenta que esto sólo funcionaría para muros públicos, de otra forma tendríamos que utilizar algún método de autenticación. Podemos utilizar alguna de las clases PHP que nos provee facebook, para trabajar con esta API.

Comentarios

Comentario de Ricardo - 20 de Mayo de 2011 - 19:58
te olvidaste de llamar al access_token
Comentario de Imaginanet - 23 de Mayo de 2011 - 07:02
Hola Ricardo, no es necesario enviar el access_token, porque estoy hablando de un muro p&uacute;blico al cual todo el mundo tiene acceso. Si quisiera hacer cambios o acceder a un muro con restricciones entonces tendr&iacute;a que autenticarme y usar el access_token. F&iacute;jate que en el ejemplo uso la funci&oacute;n de PHP file_get_contents, es la forma m&aacute;s sencilla de empezar a trabajar con el API de facebook.
Comentario de Gabriel - 28 de Mayo de 2011 - 03:33
Hola amigos, tienen idea como poner en mi web los ultimos post de facebook , sería algo exactamente igual a esto http://thet.com.ar/ (punta inferior derecha, donde dice facebook, ahi muestra los ultimos post, cantidad de comments) saludos y gracias
Comentario de Imaginanet - 30 de Mayo de 2011 - 07:27
Pues es sencillo, en el ejemplo de arriba sólo tienes que sustituir $id_usuario por el identificador de tu cuenta y en la respuesta, en cada post, tienes la clave comments, que a su vez contiene la clave count, que es el número de comentarios. Así que en el "foreach ($datos["data"] as $value)", solo tienes que hacer: $facebook[$i]["numero_comentarios"] = $value["comments"]["count"]; También puedes usar alguno de estos plugins http://developers.facebook.com/docs/plugins/
Comentario de Gabriel - 05 de Junio de 2011 - 19:36
Muchas gracias por tu respuesta pero tengo unas dudas! Primero...este es mi codigo: <?php $id_usuario = "293803966478"; $respuesta = file_get_contents("https://graph.facebook.com/" . $id_usuario . "/feed"); $datos = json_decode($respuesta,true); $facebook = array(); $i = 0; foreach ($datos["data"] as $value) { if (trim($value["picture"]) != "") { $facebook[$i]["src"] = trim($value["picture"]); $facebook[$i]["titulo"] = trim($value["name"]); $facebook[$i]["texto"] = trim($value["description"]); $i++; } if ($i>4) break; } $html = ""; foreach ($facebook as $key => $value) { $html .= ' <div> <h1>'.$value["titulo"].'</h1> <img src="' . $value["src"] . '" alt="' . $value["titulo"] . '" /> <div>'.$value["texto"].'</div> </div> '; } echo $html; ?> Al subirlo, me tira este error: Warning: file_get_contents(https://graph.facebook.com/293803966478/feed) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /home/animauy/public_html/face/index.php on line 13 Warning: Invalid argument supplied for foreach() in /home/animauy/public_html/face/index.php on line 18 Que puede ser? Segundo: Donde exactamente sutituiria o incluiria esto $facebook[$i]["numero_comentarios"] = $value["comments"]["count"]; Saludos y disculpa la molestia!
Comentario de Roman Astorga Guzman - 14 de Agosto de 2011 - 04:11
La pregunta del millon es que como obtienes el id del usuario sin tener que necesitar el access_token
Comentario de Oscar Alfonso Gómez Meza - 01 de Diciembre de 2011 - 17:31
Una pregunta. Supongamos que tengo una pagina tipo Scribd (http://es.scribd.com/). En esta pagina te pide que te registres o lo vincules con tu cuenta facebook para bajar información. La pregunta es: Siendo yo "Scribd" puedo almacenar los datos de los usuarios que sincronizen todo con su cuenta facebook? Para tomar los datos de sexo, edad, nacionalidad, etc. NOTA: Habría nota que se requiere permiso para acceder a sus datos. ??? Gracias
Comentario de DJom - 23 de Enero de 2012 - 17:44
el codigo para que funcione hasta el moemento de mojor forma, esto: $respuesta = file_get_contents("https://graph.facebook.com/" . $id_usuario . "/feed"); lo eh editado quitandole el feed $respuesta = file_get_contents("https://graph.facebook.com/" . $id_usuario);. y ahora si me muestra el vector pero sinembargo no lo combiete el JSON a un vertor...
Comentario de Oscar - 23 de Julio de 2012 - 20:42
Y cómo le hago si la info que quiero sacar es de muchos id´s? y que traiga los datos (fotos) por medio de medio de una palabra "autos"?
Comentario de Ivan Vasquez - 27 de Enero de 2013 - 02:21
Ya hay una forma más fácil y mejor explicada sin tener que decodificar JSON https://developers.facebook.com/docs/reference/api/using-pictures/
Comentario de Alberto - 12 de Marzo de 2013 - 16:18
Actualmente facebook ha actulizado la pagina, esto ocaciona que, por ejemplo: al extraer los comentarios del face y mostrarlos en un sitio fuera, muestre el tipo de status, mas no los comentarios, no he podiso encontrar como solucionarlo, pero si me ayudan estare agradecido, gracias
Comentario de Miguel angel - 24 de Julio de 2013 - 19:21
Con la nueva version Facebook ahora si necesita el acces token como se tendria que integrar en este ejemplo? o si tienes un tutorial de como hacerlo con el SDK de php, lo que estoy tratando de hacer es traer los ultimos post de una fan page use el explore dela api graph pero de ahi no paso no se como integrar
Comentario de Eduardo Fernandez - 01 de Agosto de 2014 - 13:15
Buenos dias, quisiera saber si es posible obtener los comentarios de una publicacion especifica en facebook, ej. si subo una foto con un grupo de amigos y todos la han comentado, quisiera saber si es posible poder obtener los comentarios de esa foto en especifico, gracias de ante mano.
Comentario de DIANA - 11 de Septiembre de 2014 - 18:22
POdrías poner un ejemplo con access_token? por favor? :D
Comentario de vimeba - 12 de Diciembre de 2014 - 19:55
hola, estoy trabajando con análisis de textos de facebook. No he encontrado la manera de acceder a los textos que se publican cuando se elige la opción: Me siento.... alegre, triste, enojado. Al extraes los datos de la tabla status obtengo los demás textos correctamente. sin embargo estos de me siento alegre y eso me los optiene en blanco
Comentario de Carlos Castro - 24 de Mayo de 2019 - 14:08
Muy interesante
Ha habido un error en el envío
Comentario enviado. Será revisado por la moderación antes de ser publicado.

Deja tu comentario

Tu nombre:
Tu email:
Tu comentario: