Facebook Graph Api – Publicación en la página de fans como administrador

Configuré un script que permite a los usuarios publicar mensajes en una página de fans en Facebook. Todo funciona, pero hay un pequeño problema.

El problema:

Cuando la publicación se agrega a la fuente de la página, muestra la cuenta personal del usuario de la publicación. Preferiría mostrar la cuenta de la página (como cuando eres administrador de la página, dice que proviene de esa página). La cuenta con la que estoy publicando tiene derechos de administrador para la página, pero aún así se muestra como una publicación personal.

HTTP POST

$url = "https://graph.facebook.com/PAGE_ID/feed"; $fields = array ( 'message' => urlencode('Hello World'), 'access_token' => urlencode($access_token) ); $fields_string = ""; foreach ($fields as $key => $value): $fields_string .= $key . '=' . $value . '&'; endforeach; rtrim($fields_string, '&'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); $result = curl_exec($ch); curl_close($ch); 

Por lo que sé, todo lo que tienes que hacer es especificar un uid (es decir, el ID de la página) en tu llamada a stream.publish

EDITAR

Eche un vistazo a la suplantación

Para publicar como página no como usuario , necesita lo siguiente:
Permisos:

  • publish_stream
  • manage_pages

Requisitos:

  • La página id y access_token (pueden obtenerse ya que obtuvimos los permisos necesarios más arriba)
  • El usuario actual es un administrador (para poder recuperar el access_token la página)
  • Un access_token con el tiempo de caducidad de larga duración de uno de los administradores si desea hacer esto sin conexión (desde un script de fondo)

Ejemplo de PHP-SDK:

  */ require '../src/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'app_id', 'secret' => 'app_secret', )); // Get User ID $user = $facebook->getUser(); if ($user) { try { $page_info = $facebook->api("/$page_id?fields=access_token"); if( !empty($page_info['access_token']) ) { $args = array( 'access_token' => $page_info['access_token'], 'message' => $message ); $post_id = $facebook->api("/$page_id/feed","post",$args); } else { $permissions = $facebook->api("/me/permissions"); if( !array_key_exists('publish_stream', $permissions['data'][0]) || !array_key_exists('manage_pages', $permissions['data'][0])) { // We don't have one of the permissions // Alert the admin or ask for the permission! header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream, manage_pages")) ); } } } catch (FacebookApiException $e) { error_log($e); $user = null; } } // Login or logout url will be needed depending on current user state. if ($user) { $logoutUrl = $facebook->getLogoutUrl(); } else { $loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream')); } // ... rest of your code ?> 

Aquí se supone que el $user conectado es el administrador.

Resultado:
enter image description here

Más en mi tutorial

Debido a que es la única publicación relevante en los resultados de google para “el gráfico de Facebook no se publicará en la página como página”, quiero tomar nota de la solución que encontré. Necesita un token de acceso con permisos de manage_pages. Luego llame

 https://graph.facebook.com//accounts?access_token= 

Esto mostrará una lista de todas las páginas a las que el usuario tiene acceso y proporcionará los tokens de acceso para cada una. Luego puede usar esos tokens para publicar como la página.

Graph API espera que el parámetro page_id (El Id. De objeto de la Página de admiradores) se transmita como argumento a las llamadas API para que los eventos se publiquen en un muro de Fanpage. No se menciona en ninguna parte de la documentación oficial de Graph API, pero funciona. Lo he probado con éxito con el Official PHP SDK v3.0.1

Los permisos de aplicación requeridos serían create_event y manage_pages

Un ejemplo se vería así:

 //Facebook/Fan Page Id $page_id = '18020xxxxxxxxxx'; //Event Start Time $next_month = time() + (30 * 24 * 60 * 60); //Event Patwigeters $params = array( 'page_id' => $page_id, // **IMPORTANT** 'name' => 'Test Event Name', 'description' => 'This is the test event description. Check out the link for more info: http://yoursite.com', 'location' => 'Kottayam, Kerala, India', 'start_time' => $next_month ); $create_event = $facebook->api("/$page_id/events", "post", $params); 

La respuesta está en adquirir el permiso de “manage_pages” en el FB:login botón de FB:login , de esta manera:

 ` 

Cuando obtiene esos permisos, puede obtener una lista estructurada de todas las páginas en las que el usuario registrado es administrador. La URL para llamar es:

 https://graph.facebook.com/me/accounts?access_token=YourAccessToken 

ODIO la documentación de Facebook, pero aquí hay una página con algo de información: https://developers.facebook.com/docs/reference/api/ Vea las secciones ‘Autorización’ e ‘Inicio de Página’, en particular en ese página.

Un gran recurso para armar todo esto (para los desarrolladores de Coldfusion) es CFC de Jeff Gladnick sobre RIA Forge: http://facebookgraph.riaforge.org/

Agregué el siguiente UDF al CFC de Jeff si te interesa usarlo:

          

Lo que esto devuelve es una estructura de todas las páginas en las que el usuario registrado es administrador. Devuelve la página NOMBRE, ID, ACCESS_TOKEN y CATEGORY (no es necesario en este contexto).

Entonces, MUY IMPORTANTE: la ID es lo que pasas para establecer en qué página estás publicando TO, y ACCESS_TOKEN es lo que pasas para establecer a quién estás PUBLICANDO COMO.

Una vez que tenga la lista de páginas, puede analizar los datos para obtener una matriz de tres elementos con:

ID – ACCESS_TOKEN – NAME

Sin embargo, ten cuidado, porque el ACCESS_TOKEN de Facebook usa algunos personajes extraños. Avíseme si necesita ayuda adicional.

Debe recuperar access_tokens para Páginas y Aplicaciones que administra el usuario.

Los tokens de acceso se pueden consultar llamando a / {user_id} / accounts a través de Graph API.

Más detalles:

https://developers.facebook.com/docs/facebook-login/permissions/v2.0 -> Referencia -> Páginas

Así es como lo hago con PHP SDK 4.0 y Graph API 2.3:

 /** * Posts a message, link or link+message on the page feed as a page entity * * @param FacebookSession $session (containing a page admin user access_token) * @param string $pageId * @param string $message - optional * @param string $link - optional * * @return GraphObject */ function postPageAsPage( $session, $pageId, $message = '', $link = '' ){ // get the page token to make the post request $pageToken = ( new FacebookRequest( $session, 'GET', "/$pageId" . "?fields=access_token" ))->execute()->getGraphObject(); return ( new FacebookRequest( $session, 'POST', "/$pageId/feed", array( 'access_token' => $pageToken->getProperty( 'access_token' ), 'message' => $message, 'link' => $link, ) ))->execute()->getGraphObject(); }