34

Nunca he usado Facebook Graph API o OAuth. Simplemente estoy tratando de obtener un feed de una página pública de Facebook usando Graph API, pero requiere un token de acceso. No quiero molestar a los usuarios para iniciar sesión y permitir el acceso para obtener su token. Se podría usar un token de acceso a la aplicación de Facebook para obtener un feed público, pero estoy tratando de hacerlo completamente en Javascript, por lo que no puedo usar el secreto de la aplicación para hacerlo. Leí en alguna parte que un token de acceso a la aplicación de Facebook no caduca ni cambia a menos que restablezca el secreto manualmente. ¿Es esto cierto? ¿Sería seguro solo el código difícil en el token de acceso? Si no, ¿hay alguna forma de que pueda autenticar una aplicación para obtener el token sin tener que involucrar a un usuario? ¿Hay algún tipo de token de aplicación genérico que pueda usar?¿Se puede obtener un feed de página pública de Facebook usando la API Graph sin pedir permiso al usuario?

+0

si pudiera hacer ese truco entonces FB no sería seguro, ¿verdad? ;) – alfasin

+5

Estoy tratando de leer la información que es pública, para empezar. Sin publicaciones, solo lectura. Escuché que era posible con el sistema anterior. editar: 'es' que se accede a la API de la página pública de la alimentación sin un token – xtkoeller

+0

Un token de página se puede utilizar para hacer eso, pero no puedo decir qué tan seguro es exponerlo a frontend. –

Respuesta

0

Si desea utilizar el avance de página (como su propio avance de página) en una aplicación para mostrarlo a otros. Solo usa tu propio access_token para obtenerlo.
PERO!, ya que no se considera una buena práctica, también puede iniciar sesión con la Página o Aplicación y usar access_token.

Para obtener más información, puede leer el official documentation on authentication

78

Si eres como yo sus clientes no quieren un plugin de Facebook Likebox estándar, que van a querer todo estilo y personalizado a su manera.

No necesita pasar todo el día dando vueltas a la documentación oficial preguntándose si algo de esto se aplica a usted por algo tan simple como este, es bastante fácil. La confusión surge porque supondrías que con todas estas claves e identificadores secretos tendrías que obtener permiso o autenticación de la página de Facebook desde la que querías extraer el feed; no es así. Todo lo que necesita es una aplicación válida y puede obtener el feed de cualquier página pública.

Configure su aplicación en Facebook y le dará una identificación de la aplicación y una clave de API. Obtenga la ID de perfil para el feed de página pública que desea, y eso es todo lo que necesita. Luego puede usar el siguiente código para recuperar el token de autenticación y luego usarlo para devolver los datos del feed como un objeto JSON.

<?php 

function fetchUrl($url){ 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
// You may need to add the line below 
// curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 

$feedData = curl_exec($ch); 
curl_close($ch); 

return $feedData; 

} 

$profile_id = "the_profile_id_of_the_page_you_want"; 

//App Info, needed for Auth 
$app_id = "your_app_id_in_here"; 
$app_secret = "your_app_secret_in_here"; 

//Retrieve auth token 
$authToken = fetchUrl("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={$app_id}&client_secret={$app_secret}"); 

$json_object = fetchUrl("https://graph.facebook.com/{$profile_id}/feed?{$authToken}"); 

Gracias a una edición alguien sugirió Creo que este código proviene de here (parece familiar de todos modos :)) y hay algo más de información en los comentarios allí que pueden ayudar.

Puede analizar el objeto, aquí hay un código para hacerlo en PHP basado en este hilo;

Handling data in a PHP JSON Object

$feedarray = json_decode($json_object); 

foreach ($feedarray->data as $feed_data) 
{ 
    echo "<h2>{$feed_data->name}</h2><br />"; 
    echo "{$feed_data->message}<br /><br />"; 
} 

Para averiguar lo que está a su disposición en el objeto JSON que puede dar salida a la URL en un navegador y copiar/pegar en esta útil herramienta de visualización JSON;

http://chris.photobooks.com/json/default.htm

+0

Cuando intento recuperar $ authToken recibo la respuesta: "Falta el parámetro redirect_uri". ¿Algunas ideas? –

+0

¿Eso es lo que se devuelve cuando acaba de colocar la url de la parte authToken (sin llaves, reemplazando nombres de variables con sus claves) directamente en la barra de direcciones del navegador? – McNab

+0

Disculpa, descubrí esto ...Puse tu ejemplo y la URL no tiene el '?' entre access_token y tipo. –

0

creo con el fin de hacer esto usted tiene que utilizar FQL no simplemente la API de gráficos. Esto es lo que estoy haciendo (sustituir PAGE_ID con el ID de la página, mantenga las comillas):

SELECT post_id, created_time, type, message, attachment 
FROM stream 
WHERE source_id = 'PAGE_ID' 
AND actor_id = source_id 

https://developers.facebook.com/docs/reference/fql/stream/

+0

https://s3.amazonaws.com/f.cl.ly/items/2G0q0y3Z2s32311U1s40/Screen%20Shot%202015-03-16%20at%2010.11.50.png –

1

En respuesta al mensaje de @Psyked y @James_David_Low, no se recomienda para usar FQL porque está en desuso

"... Hay dos API HTTP de bajo nivel que también se utilizan en Facebook para acceder al gráfico: FQL y la API heredada REST. Estas API contienen funciones similares y superpuestas, pero están en desuso".

Las nuevas características generalmente solo están disponibles en el Graph API. Para garantizar el futuro de su aplicación, debe utilizar Graph API en su aplicación si puede.

+1

Eso no es cierto, FQL en sí mismo no está en desuso. Usarlo a través de RestAPI y algunas otras formas antiguas está obsoleto, pero _hacer_ consultas FQL _utilizando_ el punto final de Graph API __ absolutamente no está en desuso .__ – CBroe

+1

Derecho de Diego, CBroe está equivocado: las API FQL y REST ya no están disponibles en v2.1: Anteriormente anunciado con la v2.0, las aplicaciones deben migrar a las llamadas a Graph API versionadas comenzando con v2.1. https: //developers.facebook.com/docs/apps/changelog – Prozi

6

Facebook token de acceso de aplicaciones no tiene fecha de vencimiento o cambia a menos que se restablece manualmente el secreto

Eso es correcto.

Los tokens de aplicación no caducan a menos que se restablezca el secreto de la aplicación. Los tokens de acceso a la aplicación son únicos para cada aplicación.

Desde feeds públicos toman alguna señal de acceso válido, tokens de aplicación se puede utilizar.

Vaya a https://developers.facebook.com/tools/access_token y no necesita un flujo. Entonces puedes codificarlo. En el momento que restableces el secreto, este método es nulo.

$access_token = '1111111111|2Cha_1-n5' 
$graph_url = "https://graph.facebook.com/Boo/posts?access_token=" 
    . $access_token; 
$page_posts = json_decode(file_get_contents($graph_url), true); 

iterar a través de las páginas

foreach($page_posts['data'] as $post){ 
    $post_link = $post['actions'][0]['link']; 
    $page_id = $post['from']['id']; 
    $page_name = $post['from']['name']; 
    $message = ($post['message']) ? $post['message'] : " "; 
    $name = ($post['name']) ? $post['name'] : " "; 
    $story = ($post['story']) ? $post['story'] : " "; 
    $post_time = $post['updated_time']; 
} 

Fuente: http://philippeharewood.com/facebook/how-to-get-facebook-access-tokens-in-php-for-public-posts-the-basic-sauce/

+0

¡Esa pequeña URL de access_token es una joya! –

1

La respuesta aceptada no proporciona una forma dinámica de la recuperación de la profileId/pageId o incluso explicar cómo recuperarla . Mira mi answer/question. Desde mi experiencia, la respuesta aceptada también es incorrecta al requerir las llaves alrededor de app-id y app-secret. Obtuve un error cuando los incluí y funcionó con ellos.

No hay nada más simple que esto.

Cuestiones relacionadas