freeCodeCamp/controllers/api.js

137 lines
3.5 KiB
JavaScript
Raw Normal View History

var secrets = require('../config/secrets');
2013-12-07 05:50:37 +00:00
var User = require('../models/User');
var querystring = require('querystring');
var validator = require('validator');
2013-11-30 05:28:30 +00:00
var async = require('async');
2013-12-07 22:45:20 +00:00
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);
2014-05-13 05:35:46 +00:00
var Y = require('yui/yql');
var _ = require('lodash');
2013-11-30 05:28:30 +00:00
/**
* GET /api
* List of API examples.
*/
exports.getApi = function(req, res) {
res.render('api/index', {
2014-04-14 03:14:58 +00:00
title: 'API Examples'
});
2013-11-19 21:20:18 +00:00
};
/**
* 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({
2014-02-27 22:39:18 +00:00
getMe: function(done) {
graph.get(req.user.facebook, function(err, me) {
done(err, me);
});
},
2014-02-27 22:39:18 +00:00
getMyFriends: function(done) {
graph.get(req.user.facebook + '/friends', function(err, friends) {
done(err, friends.data);
});
2014-02-27 22:39:18 +00:00
}
},
function(err, results) {
if (err) return next(err);
res.render('api/facebook', {
title: 'Facebook API',
me: results.getMe,
friends: results.getMyFriends
});
2014-02-27 22:39:18 +00:00
});
};
2013-12-07 22:45:20 +00:00
2013-12-19 18:22:42 +00:00
/**
* GET /api/github
* GitHub API Example.
2013-12-19 18:22:42 +00:00
*/
2014-10-28 02:58:38 +00:00
exports.getGithub = function(req, res, next) {
var token = _.find(req.user.tokens, { kind: 'github' });
var github = new Github({ token: token.accessToken });
2013-12-08 05:35:35 +00:00
var repo = github.getRepo('sahat', 'requirejs-library');
repo.show(function(err, repo) {
2014-10-28 02:58:38 +00:00
if (err) return next(err);
res.render('api/github', {
title: 'GitHub API',
repo: repo
});
});
};
2013-12-09 00:07:22 +00:00
/**
* GET /api/twitter
* Twiter API example.
2013-12-09 00:07:22 +00:00
*/
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
2014-10-28 02:58:38 +00:00
* 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) {
2014-10-28 02:58:38 +00:00
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
});
});
2014-04-22 18:51:35 +00:00
};