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