Skip to content

Commit

Permalink
Add demo endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
iconix committed Oct 25, 2018
1 parent ed31fce commit eb5c015
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 59 deletions.
38 changes: 38 additions & 0 deletions apis/demo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
var async = require('async');

var t_utils = require('../workers/twitter_utils.js');

/*
* TODO:
*/
var run = (req, res) => {
if (!req || !req.body) {
return res.status(400).send('Request body required');
}

var key = 'q';
var q = req.body[key];
if (q == undefined) {
return res.status(400).send(`Request JSON must contain "${key}" as a key`);
}

t_utils.get_genres(q, (err, genre_res) => {
if (err) {
genre_res.status(500).send(`get_genres error ${err}`);
} else if (genre_res) {
t_utils.generate(genre_res, (err, gen_res) => {
if (err) {
res.status(500).send(`generate error ${err}`);
} else {
res_dict = {'samples': JSON.parse(gen_res), 'genres': genre_res, 'query': q};
console.log(res_dict);
res.send(res_dict);
}
});
} else {
res.status(200).send(`Sorry, no genres found on Spotify for "${q}"`);
}
});
}

module.exports = { run: run };
4 changes: 4 additions & 0 deletions apis/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ var sheets = require('./sheets.js');
var spotify = require('./spotify.js');
var twitter = require('./twitter.js');

var demo = require('./demo.js');

var app = express();
app.use(express.json());

Expand All @@ -15,6 +17,8 @@ app.post('/get_genres', spotify.get_genres);

app.post('/get_tweets', twitter.get_tweets);

app.post('/demo', demo.run);

port_num = process.env.PORT || 8888;
console.log(`Listening on ${port_num}`);
app.listen(port_num);
65 changes: 6 additions & 59 deletions workers/twitter.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
var request = require('request');
var async = require('async');

var utils = require('./twitter_utils.js');

var num_gens = 5;

var get_last_gen = (step) => {
Expand Down Expand Up @@ -32,6 +34,7 @@ var get_last_gen = (step) => {
var process_tweet = (tweet, cb) => {
// TODO: second regex with optional non-capturing group can miss artists
// TODO: use user mention screen names
// TODO: remove 'feat.' in addition to the 'and'
const regex = /["'](.*)["'] by ([^ http]*)|(?:.*, )?(.*)'s ["'](.*)["']/gm;
r = regex.exec(tweet.full_text);
if (!r) {
Expand Down Expand Up @@ -89,32 +92,8 @@ var get_tweets = (step) => {
});
}

var get_genres = (q, cb) => {
var get_spotify_opts = {
uri: `${process.env.DEEPHYPEBOT_API_BASEURL}/get_genres`,
json: {
'q': q
}
};

request.post(get_spotify_opts, function (error, response, body) {
if (!error && response.statusCode == 200) {
genres = body;
console.log(`genres for '${q}': ${genres}`);
cb(false, genres);
} else {
if (!error) {
error = body;
}

console.warn(`genres NOT received for '${q}': ${error}`);
cb(false, undefined);
}
});
}

var get_genres_list = (step) => {
async.map(qs, get_genres, function(err, results) {
async.map(qs, utils.get_genres, function(err, results) {
if (err) {
step(true, err);
} else {
Expand All @@ -132,40 +111,8 @@ var get_genres_list = (step) => {
});
}

var generate = (genres, cb) => {
var get_gen_opts = {
uri: `${process.env.DEEPHYPEBOT_MODEL_BASEURL}/generate`,
json: {
'genres': genres,
'num_sample': num_gens
}
};

request.post(get_gen_opts, function (error, response, body) {
if (!error && response.statusCode == 200) {
gens = body['gens'];

gens.forEach((gen, i) => {
// remove 1) UNKs, 2) consecutive duplicated words
// TODO: replace artist and song_title ?
// TODO: replace UNKs with artist and song_title at random ?
gens[i] = gen.replace(/UNK/g, '').split(/\s+/).filter((value, i, arr) => { return value != arr[i+1]}).join(" ");
});

cb(false, JSON.stringify(gens));
} else {
if (!error) {
error = body;
}

console.warn(`generations NOT received for '${JSON.stringify(genres)}': ${error}`);
cb(false, undefined);
}
});
}

var generate_multi = (step) => {
async.mapSeries(genres_list, generate, function(err, results) {
async.mapSeries(genres_list, utils.generate, function(err, results) {
if (err) {
step(true, err);
} else {
Expand Down Expand Up @@ -257,4 +204,4 @@ function loop(){
loop();
setInterval(function(){
loop();
}, schedule_seconds*1000);
}, schedule_seconds*1000);
61 changes: 61 additions & 0 deletions workers/twitter_utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
var request = require('request');

num_gens = 5;

var generate = (genres, cb) => {
var get_gen_opts = {
uri: `${process.env.DEEPHYPEBOT_MODEL_BASEURL}/generate`,
json: {
'genres': genres,
'num_sample': num_gens
}
};

request.post(get_gen_opts, function (error, response, body) {
if (!error && response.statusCode == 200) {
gens = body['gens'];

gens.forEach((gen, i) => {
// remove 1) UNKs, 2) consecutive duplicated words
// TODO: replace artist and song_title ?
// TODO: replace UNKs with artist and song_title at random ?
gens[i] = gen.replace(/UNK/g, '').split(/\s+/).filter((value, i, arr) => { return value != arr[i+1]}).join(" ");
});

cb(false, JSON.stringify(gens));
} else {
if (!error) {
error = body;
}

console.warn(`generations NOT received for '${JSON.stringify(genres)}': ${error}`);
cb(false, undefined);
}
});
}

var get_genres = (q, cb) => {
var get_spotify_opts = {
uri: `${process.env.DEEPHYPEBOT_API_BASEURL}/get_genres`,
json: {
'q': q
}
};

request.post(get_spotify_opts, function (error, response, body) {
if (!error && response.statusCode == 200) {
genres = body;
console.log(`genres for '${q}': ${genres}`);
cb(false, genres);
} else {
if (!error) {
error = body;
}

console.warn(`genres NOT received for '${q}': ${error}`);
cb(false, undefined);
}
});
}

module.exports = { get_genres: get_genres, generate: generate };

0 comments on commit eb5c015

Please sign in to comment.