我正在开发一个简单的节点/快递/玉网站,用于获取Facebook页面的所有公共供稿。
我创建了一个应用程序,我得到了client_id(APP_ID)和client_secret(APP_SECRET)。
我的代码有效,但没关系,但我想知道这是否是处理这种需求的正确方法。
以下是代码:
var https = require('https'),
concat = require('concat-stream'),
async = require('async');
function FacebookPage(pageId) {
if (!(this instanceof FacebookPage))
return new FacebookPage(pageId);
this.pageId = pageId;
}
FacebookPage.prototype.getPublicFeeds = function (callback) {
var pageId = this.pageId;
async.waterfall([
function (done) {
var params = {
hostname: 'graph.facebook.com',
port: 443,
path: '/oauth/access_token?client_id=MY_CLIENT_ID&' +
'client_secret=MY_CLIENT_SECRET&grant_type=client_credentials',
method: 'GET'
};
https.get(params, function (response) {
//response is a stream so it is an EventEmitter
response.setEncoding("utf8");
//More compact
response.pipe(concat(function (data) {
done(null, data);
}));
response.on("error", done);
});
},
function (access_token, done) {
var params = {
hostname: 'graph.facebook.com',
port: 443,
path: '/v2.0/' + pageId + '/feed?' + access_token,
method: 'GET'
};
https.get(params, function (response) {
//response is a stream so it is an EventEmitter
response.setEncoding("utf8");
//More compact
response.pipe(concat(function (data) {
callback(null, JSON.parse(data));
}));
response.on("error", callback);
});
}]);
};
module.exports = FacebookPage;
编辑:感谢@Tobi我可以通过放入access_token = app_id | app_secret删除获取access_token的部分,如下所述:
答案 0 :(得分:4)
不确定为什么要包含OAuth内容(我觉得这样做不行,因为如果我理解正确的话,你不会将code
换成实际的访问令牌... ... < / p>
根据https://developers.facebook.com/docs/graph-api/reference/v2.0/page/feed/您需要an access token ... to view publicly shared posts.
,这意味着您还可以使用app_id|app_secret
形式的应用访问令牌。
然后您可以使用
GET /{page_id}/feed
通过使用您的应用访问令牌传递access_token
参数来端点。我还建议使用NPM模块request
或restler
,这样可以更轻松地处理HTTP。