我正在制作一个网络应用程序,从我们的Facebook页面中提取最新帖子并处理它们。 通过从this页面生成的硬编码访问令牌,这一切都正常。
问题是这个令牌过期了,所以我正在寻找一个解决方案,每次页面加载时生成一个新令牌或一个非过期令牌 - (我已经读过某个地方不再存在非过期令牌)
但是这些例子似乎没有起作用。
在对我到目前为止尝试过的某些代码的任何投诉之前,这是我的工作示例 - 使用即将到期的访问令牌:
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;
非常感谢任何帮助/建议。
答案 0 :(得分:1)
首先,重要的是要记住Facebook刚刚推出了Graph API的第2版。从2014年4月开始,如果您的应用程序出现问题,您需要告诉我们您何时在Facebook开发人员上创建它(新应用程序默认使用版本2)。
为了管理网页,您的应用需要获得manage_pages
权限。确保要管理粉丝页面的用户已授权您。如果您的应用使用版本2,请确保Facebook(Facebook员工)已授权您向用户询问此类权限,否则您的应用将无效。
获得令牌后,将其换成永久令牌(或具有较长到期日期的令牌)。确保使用粉丝页面的令牌,而不是用户的令牌。
如果您想读取公共粉丝页面流,则需要具有read_stream
权限的访问令牌。此权限需要得到Facebook的批准(见上文),如果您使用的是图谱API的第2版,则此特定类型的权限需要时间来批准。如果您使用旧的API(版本1),您仍然可以在Facebook未经预先批准的情况下执行此操作。
要求读取流权限的URL如下:https://www.facebook.com/dialog/oauth?client_id=$YOUR_APP_ID&redirect_uri=$YOUR_URL&scope=read_stream,manage_pages
(在这种情况下我添加了manage_pages,您可能不需要它)。
该网址将提示授权。用户授权应用后,您将被转到所选的网址,并使用code=
变量。
此时,请调用另一个URL:
https://graph.facebook.com/oauth/access_token?client_id={$app_id}&redirect_uri=$someurl&client_secret={$app_secret}&code={$code}
您将收到包含access_token=
变量的回复。使用以下URL抓取该访问令牌,将其换成长令牌:
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}
响应将为您提供持续一段时间的令牌。此前,Facebook已决定让这些“持续时间长的代币”在一个月后到期。但我发现他们可能已经改变了主意:如果你在调试器中放置一个用户令牌,你会发现它永远不会过期。 这是使用浏览器访问的用户的授权流程。还有应用程序授权流程。如果您只需要来自自己的粉丝页面的流,则需要执行以下操作(使用Graph API V.1):
使用以下网址发出HTTP GET请求:
https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={$app_id}&client_secret={$app_secret}
使用生成的令牌进行另一次HTTP GET调用,如下所示:
https://graph.facebook.com/{$your_page_id}/feed?{$authToken}&limit=10
//ten posts
解码json对象
你已经完成了。