javascript - page - ¿Puedes obtener un feed de una página pública de Facebook usando Graph API sin pedir permiso al usuario?
facebook json (6)
El token de acceso a la aplicación de Facebook no caduca ni cambia a menos que restablezca manualmente el secreto
Eso es correcto.
Los tokens de la 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.
Como los feeds públicos toman cualquier token de acceso válido, se pueden usar tokens de aplicación.
Ve a https://developers.facebook.com/tools/access_token y no necesitarás 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);
Luego itera por 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''];
}
Nunca utilicé Graph API de Facebook 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?
Creo que para hacer esto debes usar FQL no simplemente Graph API. Esto es lo que estoy haciendo (reemplace PAGE_ID
con el ID de su 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
En respuesta al mensaje de @Psyked y @James_David_Low, no se recomienda utilizar FQL porque está en desuso.
"... Hay dos API HTTP de bajo nivel que también se usan en Facebook para acceder al gráfico: FQL y la API REST heredada. Estas API contienen funcionalidades similares y superpuestas, pero están en desuso".
Las nuevas características generalmente solo están disponibles en Graph API . Para poder probar su aplicación en el futuro, debería usar Graph API en su aplicación si puede.
La respuesta aceptada no proporciona una forma dinámica de recuperar el profileId / pageId o incluso explica cómo recuperarlo. Mira mi answer/question . Según mi experiencia, la respuesta aceptada también es incorrecta al requerir las llaves de la app-id
y la app-secret
. Obtuve un error cuando los incluí y funcionó con ellos.
No hay nada más simple que esto.
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! como 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, lea la documentación oficial sobre autenticación
Si eres como yo, tus clientes no querrán un plugin de la caja de Facebook estándar, lo querrán todo estilo y personalizado a su manera.
No es necesario que pases todo el día dando vueltas a la documentación oficial preguntándote si algo de esto se aplica a ti por algo 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.
Configura tu aplicación en Facebook y te dará una identificación de la aplicación y una clave 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 que alguien sugirió, creo que este código vino de here (parece familiar de todos modos :)) y hay algo más de información en los comentarios que podría ayudar.
Luego puede analizar el objeto, aquí hay un código para hacerlo en PHP basado en este hilo;
Manejo de datos en un objeto PHP JSON
$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 saber qué hay disponible para usted en el objeto json, puede generar la URL en un navegador y copiarla / pegarla en esta útil herramienta de visualización json;