Created
February 24, 2016 23:48
-
-
Save joseluisq/56b0a5b0010c41e2cfb5 to your computer and use it in GitHub Desktop.
Node test for Facebook Graph Insights
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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