diff --git a/config.template.json b/config.template.json index 73070e0..2647298 100644 --- a/config.template.json +++ b/config.template.json @@ -6,6 +6,12 @@ }, "github": { "token": "" + }, + "twitter": { + "consumerKey": "", + "consumerSecret": "", + "token": "", + "tokenSecret": "" } } } diff --git a/feeds/github.js b/feeds/github.js new file mode 100644 index 0000000..364430a --- /dev/null +++ b/feeds/github.js @@ -0,0 +1,25 @@ +'use strict'; + +var request = require('superagent'); +var config = require('../lib/config'); +var Promise = require('bluebird'); + +module.exports = { + /** + * Fetch five latest events from GitHub organization + */ + getEvents: function() { + return new Promise(function(resolve, reject) { + request + .get('https://api.github.com/orgs/koodiklinikka/events?per_page=5') + .set('Authorization', 'token ' + config.github.token) + .end(function(error, response){ + if(error) { + reject(error); + } + + resolve(response.body); + }); + }); + } +}; diff --git a/feeds/twitter.js b/feeds/twitter.js new file mode 100644 index 0000000..e90eb16 --- /dev/null +++ b/feeds/twitter.js @@ -0,0 +1,29 @@ +'use strict'; + +var Twitter = require('node-twitter'); +var config = require('../lib/config'); +var Promise = require('bluebird'); + +var twitterRestClient = new Twitter.RestClient( + config.twitter.consumerKey, + config.twitter.consumerSecret, + config.twitter.token, + config.twitter.tokenSecret +); + +module.exports = { + /** + * Fetch five latest tweets / retweets from Twitter + */ + getTweets: function() { + return new Promise(function(resolve, reject) { + twitterRestClient.statusesUserTimeline({count: 5}, function(error, result) { + if (error) { + reject(error); + } + + resolve(result); + }); + }); + } +}; diff --git a/index.js b/index.js index 5dc6386..75a71c3 100644 --- a/index.js +++ b/index.js @@ -9,6 +9,7 @@ app.use(bodyParser.urlencoded({extended: true})); require('./routes/invite')(app); require('./routes/members')(app); +require('./routes/feeds')(app); app.use(function(err, req, res, next) { /*jshint unused:false*/ diff --git a/package.json b/package.json index 0e293a6..62f67a7 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,11 @@ "homepage": "https://github.com/koodiklinikka/koodiklinikka.fi-api", "dependencies": { "apicache": "0.0.12", + "bluebird": "^2.9.3", "body-parser": "^1.10.1", "express": "^4.11.0", - "lodash": "^2.4.1", + "lodash": "3.0.0", + "node-twitter": "0.5.2", "superagent": "^0.21.0", "validator": "^3.27.0" } diff --git a/routes/feeds.js b/routes/feeds.js new file mode 100644 index 0000000..596629c --- /dev/null +++ b/routes/feeds.js @@ -0,0 +1,24 @@ +'use strict'; + +var request = require('superagent'); +var cache = require('apicache').middleware; +var Promise = require('bluebird'); +var twitter = require('../feeds/twitter'); +var github = require('../feeds/github'); + +module.exports = function (app) { + /* + * GET /feeds + * Endpoint for fetching different information feeds (Twitter, GitHub etc.) + */ + app.get('/feeds', cache('3 hours'), function(req, res, next) { + Promise.props({ + twitter: twitter.getTweets(), + github: github.getEvents() + }).then(function(data) { + res.status(200).send(data); + }, function(err) { + next(err); + }); + }); +};