在 Node.js 中获取 Facebook 页面的公共提要

Posted

技术标签:

【中文标题】在 Node.js 中获取 Facebook 页面的公共提要【英文标题】:Get public feeds of a Facebook Page in Node.js 【发布时间】:2014-07-18 09:14:04 【问题描述】:

我正在开发一个简单的 node/express/jade 网站,用于获取 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 的部分,如下所述:

【问题讨论】:

【参考方案1】:

不知道您为什么要包含在 OAuth 中(我认为这是行不通的,因为如果我理解正确,您不会将 code 换成实际的访问令牌)...

根据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 模块 requestrestler,它们使 HTTP 处理更容易。

【讨论】:

我阅读了访问令牌文档页面,但我专注于页面访问令牌,没有看到您的建议。所以我认为你是对的,我会将文档添加到 OP 中。我让这个问题更加开放,只是为了看看其他人是否会发表评论。非常感谢 这是正确的,您只需要一个应用访问令牌即可获取 Facebook 应用的提要。您只需要一个页面访问令牌即可作为页面发布,或访问非公开内容(如见解)。

以上是关于在 Node.js 中获取 Facebook 页面的公共提要的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sails.JS 框架的 Node.JS -- Passport:没有在名称下注册策略:facebook

如何使用 node.js 和 javascript 模仿 Facebook 的“链接共享”功能

如何使用node.js获取当前目录名并显示在html页面上

如何在没有客户端的情况下使用 facebook 的护照在 node.js 中构建 REST 服务?

node.js 和 socket.io 与 facebook 好友聊天

带有 Node JS 和 Sails JS 的 Facebook Graph API