Skip to content

Instantly share code, notes, and snippets.

@joseluisq
Created February 24, 2016 23:48
Show Gist options
  • Select an option

  • Save joseluisq/56b0a5b0010c41e2cfb5 to your computer and use it in GitHub Desktop.

Select an option

Save joseluisq/56b0a5b0010c41e2cfb5 to your computer and use it in GitHub Desktop.
Node test for Facebook Graph Insights
const FB = require('fb');
const moment = require('moment');
const options = {
appId: '',
version: 'v2.5',
appSecret: '',
scope: 'user_about_me,publish_actions,read_insights',
redirect_uri: 'http://localhost:3000/login/callback'
};
const routes = {
/**
* Index
* @param {[type]} req [description]
* @param {[type]} res [description]
* @return {[type]} [description]
*/
index: (req, res) => {
var accessToken = req.session.access_token;
if (!accessToken) {
res.render('index', {
title: 'Express',
loginUrl: getFacebookLoginUrl()
});
} else {
res.render('menu');
}
},
loginCallback: (req, res, next) => {
var code = req.query.code,
accessToken = '',
expires = 0;
if (req.query.error) {
// user disallowed the app
return res.render('login-error');
} else if (!code) {
return res.redirect('/');
}
// Exchange code for access token
FB.api('oauth/access_token', {
client_id: options.appId,
client_secret: options.appSecret,
redirect_uri: options.redirect_uri,
code
}, result => {
if (!result || result.error) {
console.log(!res ? 'error occurred' : res.error);
return next(result); // todo: handle error
}
accessToken = result.access_token;
expires = result.expires ? result.expires : 0;
// todo: extend access token
req.session.access_token = accessToken;
req.session.expires = expires;
res.redirect('/');
});
},
logout: (req, res) => {
req.session = null; // clear session
res.redirect('/');
},
search: (req, res) => {
var parameters = req.query;
parameters.access_token = req.session.access_token;
FB.api('/search', req.query, result => {
if (!result || result.error) {
return res.send(500, 'error');
}
res.send(result);
});
},
friends: (req, res) => {
FB.api('me/friends', {
fields: 'name,picture',
limit: 250,
access_token: req.session.access_token
}, result => {
if (!result || result.error) {
return res.send(500, 'error');
}
res.send(result);
});
},
announce: (req, res) => {
var parameters = req.body;
parameters.access_token = req.session.access_token;
FB.api('/me/nodescrumptious:eat', 'post', (parameters, result) => {
if (!result || result.error) {
return res.send(500, result.error.message);
}
res.send(result);
});
},
/**
* Get info site
* @param {[type]} req [description]
* @param {[type]} res [description]
* @return {[type]} [description]
*/
pageInfo: (req, res) => {
FB.api(
'/343464585724065',
'GET', {
access_token: req.session.access_token
}, result => {
if (!result && result.error) {
console.log(result.error);
return result.send(500, result.error);
}
res.send(result);
}
);
},
/**
* Get page insights info
* @param {[type]} req [description]
* @param {[type]} res [description]
* @return {[type]} [description]
*/
pageInsights: (req, res) => {
const since = moment('23/02/2016 00:00:00', 'DD-MM-YYYY HH:mm:ss').format('X');
const until = moment('23/02/2016 12:59:00', 'DD-MM-YYYY HH:mm:ss').format('X');
// day, week, days_28, month, lifetime
// '270813646278215/insights/page_fan_adds/{day, week, month, lifetime}'
FB.api(
'270813646278215/insights',
'GET', {
metric: 'page_fan_adds',
period: 'day',
since: since,
until: until,
locale: 'es_PE',
access_token: req.session.access_token
}, result => {
if (!result && result.error) {
console.log(result.error);
return result.send(500, result.error);
}
res.send(result);
}
);
}
};
function getFacebookLoginUrl() {
return `https://www.facebook.com/dialog/oauth?client_id=${options.appId}&redirect_uri=${encodeURIComponent(options.redirect_uri)}&scope=${encodeURIComponent(options.scope)}`;
}
module.exports = routes;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment