3
0
mirror of https://github.com/reality/dbot.git synced 2024-11-27 06:19:24 +01:00

lastfm and spotify fixes

### lastfm module

removed ~taste and taste compare functions from lastfm - their API no longer supports these calls

Improved error reporting for ~suggestion and also parallelized the youtube/spotify queries

### spotify module

removed link matching - the Link module provides the exact same information as directly querying spotify so there's no real point
This commit is contained in:
Scritches 2018-04-10 15:35:57 -04:00
parent 597171c37d
commit 93ee3cb08b
2 changed files with 51 additions and 66 deletions

View File

@ -92,6 +92,7 @@ var lastfm = function(dbot) {
});
},
/*
'tasteCompare': function(user, oUser, callback) {
request.get(this.ApiRoot, {
'qs': {
@ -105,6 +106,7 @@ var lastfm = function(dbot) {
},
'json': true
}, function(err, res, body) {
console.log(body);
if(_.has(body, 'error') && body.error == 6 || body.error == 7) {
callback('no_user', user, null);
} else if(_.has(body, 'comparison') && _.has(body.comparison, 'result')) {
@ -114,6 +116,7 @@ var lastfm = function(dbot) {
}
});
},
*/
'getInfo': function(lfm, callback) {
request.get(this.ApiRoot, {
@ -220,29 +223,54 @@ var lastfm = function(dbot) {
'artist': track.artist.name
});
var term = track.name + ' ' + track.artist.name;
dbot.api.youtube.search(term, function(body) {
if(_.isObject(body) && _.has(body, 'items') && body.items.length > 0) {
var link = body.items[0].id.videoId
if(link) {
output += ' - http://youtu.be/' + link;
}
async.parallel({
youtube: function(cb) {
dbot.api.youtube.search(term, function(body) {
if(_.isObject(body) && _.has(body, 'items') && body.items.length > 0) {
var link = body.items[0].id.videoId
if(link) {
cb(null,"https://youtu.be/" + link);
} else {
cb(null, undefined);
}
}
});
},
spotify: function(cb) {
dbot.api.spotify.spotifySearch(term, function(body, url, uri) {
if(body) {
if (!dbot.modules.minify) {
cb(null, { url: url, uri:uri });
} else {
dbot.modules.minify.api.minify(url, "bitly", function(mini) {
cb(null, { url:mini || url, uri:uri });
});
}
} else {
cb(null, undefined);
}
});
}
dbot.api.spotify.spotifySearch(term, function(body, t) {
if(body) {
output += ' - ' + t;
}
event.reply(output);
});
});
}, function(err, results) {
if (results.youtube || results.spotify) output += " - "
if (results.youtube) output += results.youtube;
if (results.spotify) {
if (results.youtube) output += " | ";
output += results.spotify.url + " - " + results.spotify.uri;
}
event.reply(output);
});
} else {
event.reply('something broke');
event.reply('Couldn\'t get any suggested tracks.');
console.log(err);
}
});
} else {
event.reply('something broke');
event.reply('Couldn\'t find any similar artists to what you\'re listening to.');
console.log(err);
}
}.bind(this));
} else {
@ -262,7 +290,7 @@ var lastfm = function(dbot) {
user = event.res[0].user;
lfm = event.res[0].lfm;
}
this.api.getListening(lfm, function(err, track) {
if(!err) {
var term = track.name + ' ' + track.artist['#text'],
@ -327,10 +355,12 @@ var lastfm = function(dbot) {
} else if(err == 'no_listen') {
event.reply(dbot.t('no_listen', { 'user': user.currentNick }));
}
console.log(err);
}
});
},
/*
'~taste': function(event) {
var u1 = event.rUser,
lfm1 = event.rProfile.lastfm,
@ -431,6 +461,7 @@ var lastfm = function(dbot) {
}.bind(this));
}
},
*/
'~artists': function(event) {
var u1 = event.rUser,
@ -456,7 +487,7 @@ var lastfm = function(dbot) {
});
}
};
this.commands['~taste'].regex = [/^taste ([\d\w[\]{}^|\\`_-]+?)/, 2];
//this.commands['~taste'].regex = [/^taste ([\d\w[\]{}^|\\`_-]+?)/, 2];
this.commands['~artists'].regex = [/^artists ([\d\w[\]{}^|\\`_-]+?)/, 2];
_.each(this.commands, function(command) {

View File

@ -6,16 +6,6 @@ var request = require('request'),
_ = require('underscore')._;
var spotify = function(dbot) {
/* Examples:
* http://open.spotify.com/track/42SYMWISn7xUpTNPLw9V5E
* spotify:track:42SYMWISn7xUpTNPLw9V5E
* http://open.spotify.com/artist/3yY2gUcIsjMr8hjo51PoJ8
* spotify:artist:3yY2gUcIsjMr8hjo51PoJ8
* http://open.spotify.com/album/30g571JKoxs8AnsgAViV2J
* spotify:album:30g571JKoxs8AnsgAViV2J
*/
this.spotifyRegex = /(\b(https?:\/\/open.spotify.com\/(artist|track|album)\/\w*|spotify:(artist|track|album):\w*)\b)/ig;
this.spotifyLookup = 'http://ws.spotify.com/lookup/1/.json';
this.spotifySearch = 'https://api.spotify.com/v1/search';
this.youtubeRegex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
this.spotifyText = '\u00039spotify\u000f';
@ -40,37 +30,6 @@ var spotify = function(dbot) {
});
};
this.lookup = function(link, callback) {
this.authenticate(function(token) {
request({
'url': this.spotifyLookup,
'qs': { 'uri': link },
'json': true,
'headers': { 'Authorization': "Bearer " + token }
}, function(error, response, body) {
if(!error && response.statusCode == 200) {
if(_.has(body, 'track')) {
callback(dbot.t('track', {
'artist': _.map(body.track.artists,
function(a) { return a.name }).join(', '),
'album': body.track.album.name,
'track': body.track.name
}));
} else if(_.has(body, 'album')) {
callback(dbot.t('album', {
'artist': body.album.artist,
'album': body.album.name
}));
} else if(_.has(body, 'artist')) {
callback(dbot.t('artist', {
'artist': body.artist.name
}));
}
}
});
}.bind(this));
};
this.api = {
'spotifySearch': function(query, callback) {
this.authenticate(function(token) {
@ -157,11 +116,6 @@ var spotify = function(dbot) {
commands['~spotify'].regex = [/^spotify (.*)/, 2];
this.commands = commands;
this.onLoad = function() {
dbot.api.link.addHandler(this.name, this.spotifyRegex, function(matches, name, callback) {
this.lookup(matches[0], callback);
}.bind(this));
}.bind(this);
};
exports.fetch = function(dbot) {