-
Notifications
You must be signed in to change notification settings - Fork 0
/
bot.js
103 lines (82 loc) · 3.07 KB
/
bot.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//All The Node-js libs required
var request = require('request')
, fs = require('fs')
, gm = require('gm')
, easyimage = require('easyimage');
//API keys
var keys = require('./config.js');
//Data files
var wrestlers = require('./wrestlers.json');
//My files for using different apis.
var bing = require('./bing.js');
var quotes = require('./quotes.js');
//Constants...probably will make some time_const file that
//I use in most of my projects like this.
var DAY_IN_MILLISECONDS = 1000 * 60 * 60 * 24;
var imageMagick = gm.subClass({imageMagick: true});
//This takes an image, and tries to tweet it.
function sendTweet(image_file) {
fs.readFile(image_file, function(err, image_data) {
var base64_img = new Buffer(image_data, 'base64');
var r = request.post({
url: "https://api.twitter.com/1.1/statuses/update_with_media.json",
oauth: {
consumer_key: keys.consumer_key,
consumer_secret: keys.consumer_secret,
token: keys.access_token,
token_secret: keys.access_token_secret
},
}, function(err, response, body) {
fs.unlink(image_file);
return console.log(err, body);
});
var form = r.form();
form.append('status', '');
form.append('media[]', base64_img);
});
}
function tweetRandomWrestler() {
//choose a random wrestler from the array.
var wrestler = wrestlers.wrestlers[Math.floor(Math.random() * wrestlers.wrestlers.length)];
var query = wrestler + " wrestler"; //Increases chance we won't get
//an image I don't want.
bing.get_random_result(query, "Image", 100, function(result) {
var mime_map = require('./mimeTypesToFileExt.json');
var file_ext = mime_map.mimeTypesToFileExt[result.ContentType];
var file_name = ("./" + wrestler + "." + file_ext).replace(/ /g, '_');
var dl = request(result.MediaUrl).pipe(fs.createWriteStream(file_name));
//Wait for the download to finish piping to a file, then manipulate
//the image.
dl.on('finish', function () {
imageMagick(file_name).size(function(err, size) {
if(!err) {
var file_name_esc = file_name.replace(/'/g, "\\'");
quotes.get_random_quote("inspire", function(quote) {
//var full_quote = "This is a placeholder quote";
var full_quote = quote + "\n-" + wrestler;
//First part of the command to create the caption.
var textImg = "convert -background '#0008' -fill white \\\n" +
"-font Helvetica -pointsize 36 -size "+ size.width + "x \\\n" +
"caption:\"" + full_quote + "\" \\\n";
var cmd = textImg + file_name +
" +swap -gravity south -composite " + file_name;
console.log("Execing cmd: " + cmd);
easyimage.exec(cmd, function(err, stdout, stderr) {
if (err) {
return console.log("Error manipulating image: ", err);
}
console.log("executed command");
sendTweet(file_name);
});
});
} else {
return console.log("There Was an error getting the image dimensions", err);
}
});
});
});
}
//Try to send a tweet as soon as program is run.
tweetRandomWrestler();
//...and every day after that.
setInterval(tweetRandomWrestler, DAY_IN_MILLISECONDS);