0

Je crée une application web qui tire les derniers messages de notre page Facebook et les traite. Tout cela fonctionne très bien avec un jeton d'accès codé en dur généré à partir de la page this. Le problème est que ce jeton expire, donc je cherche une solution pour générer un nouveau jeton à chaque chargement de la page ou un jeton non expiré - (j'ai lu quelque part que les jetons non expirants n'existent plus). Donc, bien sûr, j'ai fait quelques recherches, here, here et here.Facebook API - jeton d'accès pour application web

Mais aucun de ces exemples ne semble fonctionner.

Avant toute plainte du code que je l'ai essayé jusqu'à présent, ceci est mon exemple de travail - avec un jeton d'accès expirant:

var Facebook = function() { 
    this.token = 'MYTOKEN'; 
    this.lastPost = parseInt((new Date().getTime())/1000); 
    this.posts = []; 
}; 

Facebook.prototype.GetPosts = function() { 
    var self = this; 
    var deffered = $q.defer(); 
    var url = 'https://graph.facebook.com/fql?q=SELECT created_time, message, attachment FROM stream WHERE created_time < ' + self.lastPost + ' AND source_id = 437526302958567 ORDER BY created_time desc LIMIT 5&?access_token=' + this.token + ''; 
    $http.get(url) 
     .success(function (response) { 
      angular.forEach(response.data, function (post) { 
       self.posts.push(new Post(post.message, post.attachment.media, post.attachment.media[0].src, post.created_time, 'facebook')); 
      }); 
      self.lastPost = response.data[response.data.length -1].created_time; 
      deffered.resolve(self.posts); 
      self.posts = []; 
     }); 
    return deffered.promise; 
}; 
return Facebook; 

Tout sera grandement apprécié l'aide/suggestion.

+0

Le deuxième lien que vous avez fourni est la solution que j'utilise pour obtenir des jetons d'accès non expirés, ce qui fonctionne pour moi, mais uniquement si vous utilisez l'Explorateur de graphes dans v1.0 et non v2.0. Ce que je n'aime pas dans votre approche est que vous stockez le jeton d'accès dans le frontend, ce qui signifie que tout le monde peut le voir. – Tobi

Répondre

1

Tout d'abord, il est important de se rappeler que Facebook vient de lancer la version 2 de l'API graphique. À partir d'avril 2014, si vous rencontrez des problèmes avec votre application, vous devez nous indiquer quand vous l'avez créé sur Facebook Developers (les nouvelles applications utilisent la version 2 par défaut).

Pour gérer les pages, votre application doit disposer de la permission manage_pages. Assurez-vous que l'utilisateur pour lequel vous voulez gérer les pages de fans vous a autorisé. Si votre application utilise la version 2, assurez-vous que Facebook (le personnel Facebook) vous a autorisé à demander ce type d'autorisation aux utilisateurs, sinon votre application ne fonctionnera pas. Une fois que vous avez reçu votre jeton, remplacez-le par un jeton permanent (ou un jeton avec une date d'expiration longue). Assurez-vous d'utiliser le jeton de la page fan, pas le jeton de l'utilisateur.

Si, à la place, vous voulez lire le flux de pages de fans publics, vous avez besoin d'un jeton d'accès avec read_stream autorisations. Cette autorisation doit être approuvée par Facebook (voir ci-dessus) et ce type spécifique d'autorisation prend du temps pour être approuvé si vous utilisez la version 2 de l'API graphique. Si vous utilisez l'ancienne API (Version 1), vous pouvez toujours le faire sans préautorisation du côté de Facebook. L'URL pour demander l'autorisation de lire le flux est la suivante: https://www.facebook.com/dialog/oauth?client_id=$YOUR_APP_ID&redirect_uri=$YOUR_URL&scope=read_stream,manage_pages (j'ai ajouté manage_pages dans ce cas, vous n'en aurez peut-être pas besoin). Cette URL demandera une autorisation. Une fois que l'utilisateur a autorisé l'application, vous serez redirigé vers l'URL que vous avez choisie, avec une variable code=. À ce moment-là, appeler cette autre url:

https://graph.facebook.com/oauth/access_token?client_id={$app_id}&redirect_uri=$someurl&client_secret={$app_secret}&code={$code} 

Vous obtiendrez une réponse qui a en elle la variable access_token=. Grab que jeton d'accès, l'échange pour une longue, avec l'URL suivante:

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={$app_id}&client_secret={$app_secret}&fb_exchange_token={$token_you_have_just_grabbed} 

La réponse vous donnera un jeton qui dure depuis un certain temps. Auparavant, Facebook avait décidé de faire expirer ces "jetons de longue durée" après un mois. J'ai découvert, cependant, qu'ils peuvent avoir changé d'avis: si vous mettez un jeton d'utilisateur dans le débogueur, vous verrez qu'il n'expire jamais. Ceci est le flux d'autorisation pour les utilisateurs qui visitent avec un navigateur. Il y a aussi le flux d'autorisation de l'application. Si tout ce dont vous avez besoin est un flux de votre propre page Fan, vous voulez faire ce qui suit (avec Graph API V.1):

  • faire une requête HTTP GET en utilisant l'adresse suivante: https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={$app_id}&client_secret={$app_secret}

  • Utilisez le jeton résultant pour effectuer un autre appel HTTP GET, comme ceci: https://graph.facebook.com/{$your_page_id}/feed?{$authToken}&limit=10 //ten posts

  • Decode la objet json

Vous avez terminé.

+0

réponse génial! –

Questions connexes