web-dev-qa-db-fra.com

Pouvez-vous obtenir le flux d'une page Facebook publique à l'aide de l'API Graph sans demander à un utilisateur de l'autoriser?

Je n'ai jamais utilisé l'API Graph de Facebook ou OAuth. J'essaie simplement d'obtenir le flux d'une page Facebook publique à l'aide de l'API Graph, mais cela nécessite un jeton d'accès. Je ne veux pas inciter les utilisateurs à se connecter et à autoriser l'accès à obtenir leur jeton. Un jeton d'accès à l'application Facebook pourrait être utilisé pour obtenir un flux public, mais j'essaie de le faire entièrement en Javascript, donc je ne peux pas utiliser le secret de l'application pour le faire. J'ai lu quelque part qu'un jeton d'accès à une application Facebook n'expire ou ne change jamais, sauf si je réinitialise manuellement le secret. Est-ce vrai? Serait-il sûr de simplement coder en dur dans le jeton d'accès? Sinon, existe-t-il un moyen d'authentifier une application pour obtenir le jeton sans avoir à impliquer un utilisateur? Existe-t-il un type de jeton d'application générique que je pourrais utiliser?

35
xtkoeller

Si vous êtes comme moi, vos clients ne voudront pas d'un plugin Facebook likebox standard, ils voudront que tout soit stylisé et personnalisé à leur manière.

Vous n'avez pas besoin de passer toute la journée à faire le tour de la documentation officielle en vous demandant si tout cela s'applique à vous pour quelque chose de simple comme celui-ci, c'est assez facile. La confusion vient du fait que vous supposeriez qu'avec toutes ces clés et identifiants secrets, vous auriez à obtenir l'autorisation ou l'authentification de la page Facebook dont vous vouliez extraire le flux - ce n'est pas le cas. Tout ce dont vous avez besoin est une application valide et vous pouvez obtenir le flux pour n'importe quelle page publique.

Configurez votre application sur Facebook et il vous donnera un identifiant d'application et une clé API. Obtenez l'ID de profil pour le flux de page publique que vous souhaitez, et c'est tout ce dont vous avez besoin. Vous pouvez ensuite utiliser le code suivant pour récupérer le jeton d'authentification, puis l'utiliser pour renvoyer les données de flux en tant qu'objet 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}");

Grâce à une modification, quelqu'un a suggéré que je pense que ce code venait de ici (semble familier de toute façon :)) et il y a plus d'informations dans les commentaires qui pourraient aider.

Vous pouvez ensuite analyser l'objet, voici du code pour le faire en PHP basé sur ce fil;

Gestion des données dans un 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 />";
}

Pour découvrir ce qui est disponible dans l'objet json, vous pouvez sortir l'url dans un navigateur et le copier/coller dans cet outil de visualisation json utile;

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

78
McNab

Le jeton d'accès à l'application Facebook n'expire ou ne change jamais, sauf si je réinitialise manuellement le secret

C'est correct.

Les jetons d'application n'expirent que si le secret d'application est réinitialisé. Les jetons d'accès aux applications sont uniques à chaque application.

Étant donné que les flux publics prennent tout jeton d'accès valide , les jetons d'application peuvent être utilisés.

Accédez à https://developers.facebook.com/tools/access_token et vous n'auriez pas besoin d'un flux. Ensuite, vous pouvez simplement le coder en dur. Au moment où vous réinitialisez le secret, cette méthode est annulée.

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

Ensuite, parcourez les pages

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'];
}

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

6
phwd

La réponse acceptée ne fournit pas un moyen dynamique de récupérer le profileId/pageId ni même d'expliquer comment le récupérer. Consultez mon réponse/question . D'après mon expérience, la réponse acceptée est également erronée en exigeant les accolades autour du app-id et app-secret. J'ai eu une erreur lorsque j'ai inclus ceux-ci et cela a fonctionné avec eux.

Cela ne devient pas plus simple que cela.

1
craned

En réponse au message de @Psyked et @James_David_Low, il n'est pas recommandé d'utiliser FQL car il est obsolète.

"... Il existe deux API HTTP de bas niveau qui sont également utilisées sur Facebook pour accéder au graphique: FQL et Legacy REST API. Ces API contiennent des fonctionnalités similaires et qui se chevauchent. , mais sont obsolètes. "

Les nouvelles fonctionnalités ne sont généralement disponibles que dans Graph Graph . Pour pérenniser votre application, vous devez utiliser l'API Graph dans votre application si vous le pouvez.

1
Diego Palomar

Je pense que pour ce faire, vous devez utiliser FQL et pas simplement l'API Graph. Voici ce que je fais (remplacez PAGE_ID avec l'ID de votre page, gardez les guillemets):

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
James David Low

Si vous souhaitez utiliser le flux de pages (comme votre propre flux de pages) dans une application pour le montrer aux autres. Utilisez simplement votre propre access_token pour l'obtenir.
MAIS! car cela n'est pas considéré comme une bonne pratique, vous pouvez également vous connecter avec la page ou l'application et utiliser leur access_token.

Pour plus d'informations, veuillez lire la documentation officielle sur l'authentification

0
Henrik Peinar