Publicar en una página de Facebook utilizando la Graph API con PHP

Facebook es la red social más popular del mundo. Facebook nos proporciona varias API open source para el desarrollo de muchos tipos de aplicaciones, juegos y funciones dentro de la propia red social. He utilizado el propio lenguaje de Facebook llamado Facebook Query Language para este tutorial.

Para entender lo que acontece en este artículo debes tener conocimiento sobre desarrollo de aplicaciones en Facebook y también sobre su API. Si no lo tienes, sigue los pasos que a continuación te mostramos meticulosamente.

Paso 1

En primer lugar voy a crear un archivo PHP. El archivo que crearé se llamará config.php, y en él albergaré las distintas variables para el desarrollo, como: el ID de la API de Facebook, el ID secreto, la url de retorno... Puedes ver el código completo de config.php más abajo.

<?php 
include_once("include/facebook.php"); //include facebook SDK

######### edit details ##########
$app_id = 'YOUR_APP_ID'; //Facebook App ID
$app_secret = 'YPUR_APP_SECRET'; // Facebook App Secret
$return_url = 'http://localhost/publish_to_wall/process.php'; //return url (url to script)
$home_url = 'http://localhost/publish_to_wall/'; //return to home
$fb_permissions = 'publish_stream,manage_pages'; //Required facebook permissions
##################################

//Call Facebook API
$facebook = new Facebook(array(
'app_id' => $app_id,
'secret' => $app_secret
));

$fbuser = $facebook->getUser();
?>

Bien, config.php ya está listo para almacenar toda la información necesaria para la aplicación de Facebook. Para conseguir estos datos, lógicamente, debes crear una aplicación de Facebook.

Paso 2

Ahora crearé un archivo php para mostrar la portada. Se llamará index.php y contendrá lo necesario para que el usuario pueda loguearse en Facebook a través de nuestra propia página. La aplicación enviará una solicitud al usuario para la información de la autenticación. Puedes ver el código completo de index.php más abajo.

<?php 
include_once("config.php");
if ($fbuser) {
try {
$user_profile = $facebook->api('/me');
//Get user pages details using Facebook Query Language (FQL)
$fql_query = 'SELECT page_id, name, page_url FROM page WHERE page_id IN (SELECT page_id FROM page_admin WHERE uid='.$fbuser.')';
$post_results = $facebook->api(array( 'method' => 'fql.query', 'query' => $fql_query ));
} catch (facebook_api_exception $e) {
echo $e->getMessage();
$fbuser = null;
}
}else{
//Show login button for guest users
$login_url = $facebook->get_login_url(array('redirect_uri'=>$home_url,'scope'=>$fb_permissions));
echo '<a href="'.$login_url.'"><img src="img/facebook-login.png" border="0"></a>';
$fbuser = null;
}

if($fbuser && empty($post_results)) {
/* if user is logged in but FQL is not returning any pages, we need to make sure user does have a page OR "manage_pages" permissions isn't granted yet by the user. Let's give user an option to grant application permission again. */
$login_url = $facebook->get_login_url(array('redirect_uri'=>$home_url,'scope'=>$fb_permissions));
echo '<br />Could not get your page details!';
echo '<br /><a href="'.$login_url.'">Click here to try again!</a>';
}elseif($fbuser && !empty($post_results)){
//Everything looks good, show message form.
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Post to user Page Wall</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="fbpagewrapper">
<div id="fbpageform" class="pageform">
<form id="form" name="form" method="post" action="process.php">
<h1>Post to Facebook Page Wall</h1>
<p>Choose a page to post. <?php
/* Get Log out URL Due to some bug or whatever, SDK still thinks user is logged in even after user logs out. To deal with it, user is redirected to another page "logged-out.php" after logout it is working fine for me with this trick. Hope it works for you too. */
$log_out_url = $facebook->get_logout_lrl(array('next'=>$home_url.'logged-out.php'));
echo '<a href="'.$log_out_url.'">Log Out</a>';
?>
</p>
<label>Pages <span class="small">Select a Page</span> </label>
<select name="userpages" id="upages">
<?php foreach ($post_results as $post_result) {
echo '<option value="'.$post_result["page_id"].'">'.$post_result["name"].'</option>'; } ?>
</select>
<label>Message <span class="small">Write something to post!</span> </label>
<textarea name="message"></textarea> <button type="submit" class="button" id="submit_button">Send Message</button>
<div class="spacer"></div>
</form>
</div>
</div>
</body>
</html>
<?php } ?>
</body>
</html>

Este sería el código del index.php. Ahora vamos a crear el archivo php que se ocupará del proceso de publicación en la página de Facebook.

Paso 3

He creado el archivo process.php para procesar la publicación en mi página de Facebook. Utilizaré la variable $post_url y el array $message_body para albergar la URL de la publicación y el cuerpo del mensaje. Esta array almacenará el valor del mensaje que se publicará en mi página de Facebook. Puedes ver el código completo de process.php más abajo.

<?php 
include_once("config.php");
if($_POST) {
//Post variables we received from user
$user_page_id = $_POST["userpages"];
$user_message = $_POST["message"];

if(strlen($user_message)<1) {
//message is empty
$user_message = 'No message was entered!';
}
//HTTP POST request to PAGE_ID/feed with the publish_stream
$post_url = '/'.$user_page_id.'/feed';

//posts message on page statues
$msg_body = array( 'message' => $user_message, );
if ($fbuser) {
try {
$post_result = $facebook->api($post_url, 'post', $msg_body );
}catch (facebook_api_exception $e) {
echo $e->getMessage();
}
}else{
$login_url = $facebook->get_login_url(array('redirect_uri'=>$home_url,'scope'=>$fb_permissions));
header('Location: ' . $login_url);
}

//Show sucess message
if($post_result) {
echo '<html>
<head>
<title>Your Message Posted</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>';
echo '<div id="fbpageform" class="pageform" align="center">';
echo '<h1>Your message has been posted on your facebook wall.</h1>';
echo '<a class="button" href="'.$home_url.'">Back to Main Page</a> <a target="_blank" class="button" href="http://www.facebook.com/'.$user_page_id.'">Visit Your Page</a>';
echo '</div>'; echo '</body></html>';
}
} ?>

He creado un completo sistema para publicar en una página de facebook utilizando la Graph API. Si tienes algún problema publicando en una página de Facebook con PHP utilizando la Graph API, no dudes en comentar tus sugerencias con respecto a este tutorial sin ninguna duda.

Fuente: discussdesk.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP