Merge pull request #1 from koodiklinikka/feeds

Feeds
This commit is contained in:
Riku Rouvila
2015-01-28 08:18:05 +02:00
6 changed files with 88 additions and 1 deletions

View File

@@ -6,6 +6,12 @@
},
"github": {
"token": ""
},
"twitter": {
"consumerKey": "",
"consumerSecret": "",
"token": "",
"tokenSecret": ""
}
}
}

25
feeds/github.js Normal file
View File

@@ -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);
});
});
}
};

29
feeds/twitter.js Normal file
View File

@@ -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);
});
});
}
};

View File

@@ -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*/

View File

@@ -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"
}

24
routes/feeds.js Normal file
View File

@@ -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);
});
});
};