Skip to content

Commit

Permalink
ready to deploy?
Browse files Browse the repository at this point in the history
  • Loading branch information
clintandrewhall committed Aug 29, 2010
1 parent db043a2 commit 3be8eee
Show file tree
Hide file tree
Showing 4 changed files with 155 additions and 19 deletions.
3 changes: 2 additions & 1 deletion config/log4js-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"ROUTES-AUTH" : "ALL",
"ROUTES-USER" : "ALL",
"AUTH-MONGO" : "ALL",
"TWITTER-MONGO" : "ALL"
"TWITTER-MONGO" : "ALL",
"USER-MONGO" : "DEBUG"
}
}
92 changes: 85 additions & 7 deletions lib/providers/twitter-mongodb.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ var sys = require("sys"),
OAuth = require('oauth').OAuth,
Server = require('mongodb/connection').Server,
config = require('config-dev').config,
log4js = require('log4js');
log4js = require('log4js'),
dt = require('datatypes').datatypes;

log4js.configure("./config/log4js-config.js");
var logger = log4js.getLogger("TWITTER-MONGO");
Expand Down Expand Up @@ -44,7 +45,7 @@ TwitterProvider = function() {

function getTwitterCreds(user) {
var cred = null;
for(var i = 0; user.creds.length; i++) {
for(var i = 0; i < user.creds.length; i++) {
if(user.creds[i].service == "twitter") {
cred = user.creds[i];
break;
Expand All @@ -53,8 +54,30 @@ TwitterProvider = function() {
return cred;
}

function getRetweetsBy(cred, callback) {
oa.getProtectedResource("http://api.twitter.com/1/statuses/retweeted_by_me.json?count=100&trim_user=true", "GET", cred.oauth.token, cred.oauth.secret, function (error, data, response) {
if (error) {
callback(error);
}
else {
callback(null, data);
}
});
}

function getRetweetsOf(cred, callback) {
oa.getProtectedResource("http://api.twitter.com/1/statuses/retweets_of_me.json?count=100", "GET", cred.oauth.token, cred.oauth.secret, function (error, data, response) {
if (error) {
callback(error);
}
else {
callback(null, data);
}
});
}

function getTimeline(cred, callback) {
oa.getProtectedResource("http://api.twitter.com/1/statuses/user_timeline.json", "GET", cred.oauth.token, cred.oauth.secret, function (error, data, response) {
oa.getProtectedResource("http://api.twitter.com/1/statuses/user_timeline.json?count=200&trim_user=true", "GET", cred.oauth.token, cred.oauth.secret, function (error, data, response) {
if (error) {
callback(error);
}
Expand All @@ -64,11 +87,63 @@ TwitterProvider = function() {
});
}

function getTweets(cred, boundary, callback) {
getTimeline(cred, function(error, data) {
if(error) {
callback(error);
}
else {
var tweets = JSON.parse(data), valid = [];
for(var i = 0; i < tweets.length; i++) {
var tweet = tweets[i], date = Date.parse(tweet.created_at);
if(date >= boundary) {
valid.push(new dt.action("twitter", "tweet", date, tweet.text, "http://www.twitter.com/" + cred.name + "/status/" + tweet.id));
}
else {
break;
}
}
logger.debug("Total Tweets: " + tweets.length + "; total within boundary: " + valid.length);
getRetweetsBy(cred, function(error, data) {
if(error) {
callback(error);
}
else {
var tweets = JSON.parse(data);
for(var i = 0; i < tweets.length; i++) {
var tweet = tweets[i], date = Date.parse(tweet.created_at);
if(date >= boundary) {
valid.push(new dt.action("twitter", "retweet", date, tweet.text, "http://www.twitter.com/" + cred.name + "/status/" + tweet.id));
}
else {
break;
}
}
logger.debug("Total Tweets: " + tweets.length + "; total within boundary: " + valid.length);
valid.sort(function(a, b) {
return b.date - a.date;
});
callback(null, valid);
}
});
}
});
}

function getTodayTweets(cred, callback) {
var today = new Date().getUTCDate(),
boundary = new Date(today.getUTCYear(), today.getUTCMonth(), today.getUTCDay());
var today = new Date(),
boundary = new Date(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate());
logger.debug("Boundary Date: " + boundary);
boundary = Date.parse(boundary);
getTweets(cred, boundary, callback);
}

//getTimeline(cred, )
function getWeekTweets(cred, callback) {
var today = new Date(),
boundary = new Date(today.getUTCFullYear(), today.getUTCMonth(), (today.getUTCDate() - 7));
logger.debug("Boundary Date: " + boundary);
boundary = Date.parse(boundary);
getTweets(cred, boundary, callback);
}

function test(userProvider, callback) {
Expand All @@ -90,7 +165,10 @@ TwitterProvider = function() {
}

return {
"test" : test
"test" : test,
"getTodayTweets" : getTodayTweets,
"getWeekTweets" : getWeekTweets,
"getTwitterCreds" : getTwitterCreds
}
};

Expand Down
29 changes: 27 additions & 2 deletions lib/providers/user-mongodb.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ UserProvider = function() {
logger.debug("ENTERING: **UserProvider.getUsers");
db.collection('users', function(error, userCollection) {
if (error) {
logger.error(error.message);
callback(error);
}
else {
Expand All @@ -68,6 +69,30 @@ UserProvider = function() {
logger.debug("EXITING: **UserProvider.getUsers");
}

function getAllUsers(callback) {
getUsers(function(error, userCollection) {
if(error) {
logger.error(error.message);
callback(error);
}
else {
var r = [];
userCollection.count(function(error, count) {
userCollection.find(function(err, cursor) {
cursor.each(function(err, item) {
if(item != null) {
r.push(item);
}
else {
callback(null, r);
}
});
});
});
}
});
}

function getByAuth(service, id, callback) {
logger.debug("ENTERING: UserProvider.getByAuth");
getUsers(function(error, userCollection) {
Expand Down Expand Up @@ -173,7 +198,7 @@ UserProvider = function() {
logger.info("User " + user.username + " found; merging and saving.");
logger.trace("Merge:\n\t" + sys.inspect(foundUser) + "\nwith\n\t" + sys.inspect(user));
merge(foundUser, user, true);
logger.debug("Result: " + sys.inspect(foundUser));
logger.trace("Result: " + sys.inspect(foundUser));
foundUser._lastUpdated = new Date();
userCollection.update({}, foundUser, {}, function(error, result) {
if(error) {
Expand Down Expand Up @@ -275,7 +300,7 @@ UserProvider = function() {
}

return {
"getUsers" : getUsers,
"getAllUsers" : getAllUsers,
"getByAuth" : getByAuth,
"getUserByCredentials" : getUserByCredentials,
"setCurrentUser" : setCurrentUser,
Expand Down
50 changes: 41 additions & 9 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -181,15 +181,7 @@ app.get('/reload/', function(req, res) {
});

app.get("/test", function(req, res) {
twitterProvider.test(userProvider, function(error, result) {
if (error) {
logger.error(error.message);
res.redirect("/error");
}
else {
res.send(sys.inspect(result));
}
});
refreshData();
});

app.get("/logout", function(req, res) {
Expand All @@ -203,5 +195,45 @@ require('routes/auth').AuthRoutes.addRoutes(app, authProvider);
require('routes/user').UserRoutes.addRoutes(app, authProvider, userProvider);
app.set("home", "/user");

//THIS GOES AWAY

var REFRESHING = false;
function refreshData() {
if(REFRESHING) {
logger.warn("Attempted to refresh while a refresh was under way... cancelling.");
return;
}
logger.debug("Refreshing user data...");
userProvider.getAllUsers(function(error, result) {
if(error || !result) {
logger.error(error.message);
return;
}
REFRESHING = true;
for(var i = 0; i < result.length; i++) {
var user = result[i], cred = twitterProvider.getTwitterCreds(user);

if(cred) {
twitterProvider.getWeekTweets(cred, function(error, tweets) {
logger.debug("Getting Tweets for user " + cred.name);

if(!user.actions) {
user.actions = {};
}

user.actions.tweets = tweets;
userProvider.save(user, function(error, user) {
if(i >= result.length) {
REFRESHING = false;
}
});
});
}
}
});
}

setInterval(refreshData, 300000);

app.listen(config.port, '0.0.0.0');
logger.info("Server started on port " + config.port + "...");

0 comments on commit 3be8eee

Please sign in to comment.