var secrets = require('../config/secrets'); var User = require('../models/User'); var querystring = require('querystring'); var validator = require('validator'); var async = require('async'); var cheerio = require('cheerio'); var request = require('request'); var graph = require('fbgraph'); var Github = require('github-api'); var Twit = require('twit'); var Linkedin = require('node-linkedin')(secrets.linkedin.clientID, secrets.linkedin.clientSecret, secrets.linkedin.callbackURL); var Y = require('yui/yql'); var _ = require('lodash'); /** * GET /api * List of API examples. */ exports.getApi = function(req, res) { res.render('api/index', { title: 'API Examples' }); }; /** * GET /api/facebook * Facebook API example. */ exports.getFacebook = function(req, res, next) { var token = _.find(req.user.tokens, { kind: 'facebook' }); graph.setAccessToken(token.accessToken); async.parallel({ getMe: function(done) { graph.get(req.user.facebook, function(err, me) { done(err, me); }); }, getMyFriends: function(done) { graph.get(req.user.facebook + '/friends', function(err, friends) { done(err, friends.data); }); } }, function(err, results) { if (err) return next(err); res.render('api/facebook', { title: 'Facebook API', me: results.getMe, friends: results.getMyFriends }); }); }; /** * GET /api/github * GitHub API Example. */ exports.getGithub = function(req, res, next) { var token = _.find(req.user.tokens, { kind: 'github' }); var github = new Github({ token: token.accessToken }); var repo = github.getRepo('sahat', 'requirejs-library'); repo.show(function(err, repo) { if (err) return next(err); res.render('api/github', { title: 'GitHub API', repo: repo }); }); }; /** * GET /api/twitter * Twiter API example. */ exports.getTwitter = function(req, res, next) { var token = _.find(req.user.tokens, { kind: 'twitter' }); var T = new Twit({ consumer_key: secrets.twitter.consumerKey, consumer_secret: secrets.twitter.consumerSecret, access_token: token.accessToken, access_token_secret: token.tokenSecret }); T.get('search/tweets', { q: 'nodejs since:2013-01-01', geocode: '40.71448,-74.00598,5mi', count: 10 }, function(err, reply) { if (err) return next(err); res.render('api/twitter', { title: 'Twitter API', tweets: reply.statuses }); }); }; /** * POST /api/twitter * Post a tweet. */ exports.postTwitter = function(req, res, next) { req.assert('tweet', 'Tweet cannot be empty.').notEmpty(); var errors = req.validationErrors(); if (errors) { req.flash('errors', errors); return res.redirect('/api/twitter'); } var token = _.find(req.user.tokens, { kind: 'twitter' }); var T = new Twit({ consumer_key: secrets.twitter.consumerKey, consumer_secret: secrets.twitter.consumerSecret, access_token: token.accessToken, access_token_secret: token.tokenSecret }); T.post('statuses/update', { status: req.body.tweet }, function(err, data, response) { if (err) return next(err); req.flash('success', { msg: 'Tweet has been posted.'}); res.redirect('/api/twitter'); }); }; /** * GET /api/linkedin * LinkedIn API example. */ exports.getLinkedin = function(req, res, next) { var token = _.find(req.user.tokens, { kind: 'linkedin' }); var linkedin = Linkedin.init(token.accessToken); linkedin.people.me(function(err, $in) { if (err) return next(err); res.render('api/linkedin', { title: 'LinkedIn API', profile: $in }); }); };