permission page example content facebook facebook-graph-api

example - page public content access facebook permission



Facebook Graph Api-PublicaciĆ³n en la pĆ”gina de fans como administrador (7)

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

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);


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/<user_id>/accounts?access_token=<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 Paramaeters $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:

<fb:login-button perms="publish_stream,manage_pages" autologoutlink="true"></fb:login-button>`

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:

<cffunction name="getPageLogins" access="public" output="true" returntype="any" hint="gets a user''s associated pages they manage so they can log in as that page and post"> <cfset var profile = "" /> <cfhttp url="https://graph.facebook.com/me/accounts?access_token=#getAccessToken()#" result="accounts" /> <cfif IsJSON(accounts.filecontent)> <cfreturn DeserializeJSON(accounts.filecontent) /> <cfelse> <cfreturn 0/> </cfif> </cffunction>

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 pasa para establecer en qué página está publicando TO, y ACCESS_TOKEN es lo que pasa para establecer a quién está 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.


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:

<?php /** * Edit the Page ID you are targeting * And the message for your fans! */ $page_id = ''PAGE_ID''; $message = "I''m a Page!"; /** * This code is just a snippet of the example.php script * from the PHP-SDK <http://github.com/facebook/php-sdk/blob/master/examples/example.php> */ 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:

Más en mi tutorial



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(); }