In this post I will explain how to achieve this task, I assume that you already have a valid access token of a Facebook user, If you didn't reach to this point, this link will show you how to start.
The module
The first thing is to build a module for Node, I want this module to be able to get a Facebook API open graph path (such as: /me/friends) and retrieve the data from Facebook. In this module I choose to work with the https module of node.js, with this module I can make secured requests to Facebook via https.
facebook.js
var https = require('https');
exports.get = function(accessToken, apiPath, callback) {
// creating options object for the https request
var options = {
// the facebook open graph domain
host: 'graph.facebook.com',
// secured port, for https
port: 443,
// apiPath is the open graph api path
path: apiPath + '?access_token=' + accessToken,
// well.. you know...
method: 'GET'
};
// create a buffer to hold the data received
// from facebook
var buffer = '';
// initialize the get request
var request = https.get(options, function(result){
result.setEncoding('utf8');
// each data event of the request receiving
// chunk, this is where i`m collecting the chunks
// and put them together into one buffer...
result.on('data', function(chunk){
buffer += chunk;
});
// all the data received, calling the callback
// function with the data as a parameter
result.on('end', function(){
callback(buffer);
});
});
// just in case of an error, prompting a message
request.on('error', function(e){
console.log('error from facebook.get(): '
+ e.message);
});
request.end();
}
Now, In your Node.js server, include this facebook module and call the get() function with the open graph api path that you want.
var facebook = require('./facebook');
facebook.get('FB_ACCESS_TOKEN', '/me/friends', function(data){
console.log(data);
});
The get() function is a generic function, you can call it with your api request path, pass the access token of the current user and a callback function to be called when the data is ready.
No comments:
Post a Comment