From 85f61f09afb60393d1a3f2f7f9e5557a6f47f147 Mon Sep 17 00:00:00 2001 From: Juuso Tapaninen Date: Tue, 27 Jan 2015 23:41:04 +0200 Subject: [PATCH] Feeds API endpoint, Twitter feed implemented --- feeds/twitter.js | 29 +++++++++++++++++++++++++++++ index.js | 1 + package.json | 2 ++ routes/feeds.js | 17 +++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 feeds/twitter.js create mode 100644 routes/feeds.js 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..a35fc3a 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", + "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..aa237f6 --- /dev/null +++ b/routes/feeds.js @@ -0,0 +1,17 @@ +'use strict'; + +var request = require('superagent'); +var cache = require('apicache').middleware; +var twitter = require('../feeds/twitter'); + +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.all([twitter.getTweets()]).then(function(data) { + res.status(200).send(data); + }); + }); +};