Skip to content
Permalink
Browse files

Now with 47% more jank

  • Loading branch information
Roach Roach
Roach authored and Roach committed Feb 20, 2014
1 parent b1ed6d3 commit a549e3ea544a5dfb11492c8816f002f5d6582a1d
Showing with 351 additions and 160 deletions.
  1. +138 −159 daemon.js
  2. +98 −0 db.js
  3. +3 −0 db/.gitignore
  4. +24 −0 logger.js
  5. +2 −1 package.json
  6. +23 −0 tumblr_actions.js
  7. +63 −0 twttr_actions.js
297 daemon.js

Large diffs are not rendered by default.

98 db.js
@@ -0,0 +1,98 @@
var dblite = require('dblite'),
util = require('util');

var serializeQuery = function(obj) {
var pairs = [];
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) { continue }
pairs.push(prop + '=' + obj[prop]);
}
return pairs.join(',');
};

function db(config) {
var table_name = config.twitter.screen_name + "_db",
database = new dblite('./' + config.twitter.screen_name + '.db');

createQuery = util.format("CREATE TABLE IF NOT EXISTS %s (ROWID INTEGER PRIMARY KEY, message_id TEXT, user_id TEXT, screen_name TEXT, message_text TEXT, url TEXT, tumblr_id TEXT, tweet_id TEXT, favs INTEGER, retweets INTEGER, queued_at INTEGER, posted_at INTEGER, queue_state INTEGER)", table_name);
database.query(createQuery);

database.on('close', function (code) {
// Without this, it logs "Bye bye" every time it closes the db.
// console.log("Closing: " + code);
});

var responseTemplate = {
record_id: Number,
message_id: String,
user_id: String,
screen_name: String,
message_text: String,
url: String,
tumblr_id: String,
tweet_id: String,
favs: Number,
retweets: Number,
queued_at: Number,
posted_at: Number,
queue_state: Number
};

this.get = function(column, value, cb){
query = util.format("SELECT * FROM %s WHERE %s = %s", table_name, column, value);
database.query(query, responseTemplate, function(err, res){
if(typeof cb === "function"){
cb(res);
};
});
},
this.insert = function(values, cb){
query = util.format("INSERT INTO %s VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,?)", table_name);
database.query(query, values, function(err, res){
database.lastRowID(table_name, function(rowid){
if(typeof cb === "function"){
cb(rowid);
};
});
});
},
this.update = function(update_vals, record_id, cb){
values = serializeQuery(update_vals);
query = util.format("UPDATE %s SET %s WHERE rowid = %s", table_name, values, record_id);
database.query(query, responseTemplate, function(err, res){
if(typeof cb === "function"){
cb(record_id);
};
});
},
this.getOldest = function(cb){
query = util.format("SELECT * FROM %s WHERE queue_state = 0 ORDER BY ROWID ASC LIMIT 1", table_name);
database.query(query, responseTemplate, function(err, res){
if(typeof cb === "function"){
cb(res);
};
});
},
this.getLastPosted = function(cb){
query = util.format("SELECT * FROM %s WHERE queue_state = 1 ORDER BY posted_at DESC LIMIT 1", table_name);
database.query(query, responseTemplate, function(err, res){
if(typeof cb === "function"){
cb(res);
};
});
},
this.close = function(){
database.close();
};

// query = util.format("SELECT * FROM gifs_db");
// database.query(query, responseTemplate, function(err, res){
// console.log(res);
// });

// query = util.format("DELETE FROM gifsdev_db where queue_state = 1 and posted_at is null");
// database.query(query);

};

module.exports = db;
@@ -0,0 +1,3 @@
*

!.gitignore
@@ -0,0 +1,24 @@
fs = require('fs');

function logger(config){
logfile = "./logs/" + config.twitter.screen_name + "-log.txt", // name of the file you want log messages to output to
this.timestamp = function() {
var d = new Date();
var parts = d.toString().split(' ');
var day = parts[2];
var month = parts[1];
var time = parts[4];
return [day, month, time].join(' ');
},
this.epochTimestamp = function() {
return Date.now();
},
this.log = function(message) {
fs.appendFile(logfile, message + "\n", function (err) {
if (err) { throw err; }
console.log(message);
});
}
}

module.exports = logger;
@@ -17,8 +17,9 @@
"scripts": {"start": "node daemon.js"},
"dependencies": {
"util": "0.4.9",
"dblite": "0.4.1",
"request": "2.27.0",
"user-stream": "0.0.5",
"user-stream": "0.0.7",
"twitter": "0.2.3",
"tumblrwks": "0.2.0"
}
@@ -0,0 +1,23 @@
tumblrwks = require("tumblrwks");

function tumblr_actions(config){
var tumblr = new tumblrwks({
consumerKey: config.tumblr.consumer_key,
consumerSecret: config.tumblr.consumer_secret,
accessToken: config.tumblr.oauth_token,
accessSecret: config.tumblr.oauth_secret
}, config.tumblr.blog_name + ".tumblr.com");

this.post = function(url, cb){
tumblr.post('/post', {
type: 'text',
title: "#", // I don't like the permalink format, this negates them
body: "<a href=\"" + url + "\" target=\"_blank\"><img src=\"" + url + "\" class=\"inline-tweet-media\"/></a><br/><a href=\"" + url + "\">Source</a>"
}, function(err, post_data){
cb(err, post_data);
});
}

}

module.exports = tumblr_actions;
@@ -0,0 +1,63 @@
twitter = require("twitter"),
loggr = require('./logger.js');

function twttr_actions(config){
var logger = new loggr(config);

var twttr = new twitter({
consumer_key: config.twitter.consumer_key,
consumer_secret: config.twitter.consumer_secret,
access_token_key: config.twitter.oauth_token,
access_token_secret: config.twitter.oauth_secret,
rest_base: "https://api.twitter.com/1.1"
});

this.dm = function(user_id, text) {
twttr.newDirectMessage({user_id: user_id}, text, function (data) {
if (data.recipient) {
logger.log(logger.timestamp() + " DM sent to @" + data.recipient.screen_name + ": " + data.text);
} else if (data.statusCode) {
logger.log(logger.timestamp() + " DM error: " + data.statusCode + ": " + data.message);
}
})
},
this.tweet = function(status, callback) {
twttr.updateStatus(status,
function (data) {
if (data.id_str) {
callback(data.id_str, data.text);
} else if (data.statusCode) {
logger.log(logger.timestamp() + " Tweet error: " + data.statusCode + ": " + data.message);
}
}
)
},
this.delete = function(statusid, callback) {
twttr.destroyStatus(statusid,
function (data) {
if (data.id_str) {
callback(data.id_str, data.text);
} else if (data.statusCode) {
logger.log(logger.timestamp() + " Tweet delete error: " + data.statusCode + ": " + data.message);
}
}
)
},
this.verify = function(callback) {
twttr.verifyCredentials(function(data) {
callback(data);
});
},
this.getUserTimeline = function(params, callback) {
twttr.getUserTimeline(params, function(data) {
callback(data);
});
},
this.rateLimitStatus = function(params, callback) {
twttr.rateLimitStatus(params, function(data) {
callback(data);
});
}
}

module.exports = twttr_actions;

0 comments on commit a549e3e

Please sign in to comment.
You can’t perform that action at this time.