mirror of
https://github.com/reality/dbot.git
synced 2024-11-24 04:49:25 +01:00
68 lines
2.3 KiB
JavaScript
68 lines
2.3 KiB
JavaScript
/**
|
|
* Module Name: GoodReads
|
|
* Description: Various goodreads.
|
|
*/
|
|
|
|
var _ = require('underscore')._,
|
|
request = require('request'),
|
|
async = require('async'),
|
|
moment = require('moment'),
|
|
parseString = require('xml2js').parseString;
|
|
|
|
var goodreads = function(dbot) {
|
|
this.ApiRoot = 'https://www.goodreads.com/';
|
|
|
|
this.api = {
|
|
'searchBook': function(term, callback) {
|
|
request.get({
|
|
'url': this.ApiRoot + 'search.xml',
|
|
'qs': {
|
|
'q': term,
|
|
'key': this.config.api_key
|
|
}
|
|
}, function(err, response, body) {
|
|
if(!_.isUndefined(body)) {
|
|
parseString(body, function(err, result) {
|
|
// This is why we don't use XML kids
|
|
var result = result['GoodreadsResponse'].search[0].results[0];
|
|
if(_.has(result, 'work')) {
|
|
callback(null, {
|
|
'id': result.work[0].best_book[0].id[0]['_'],
|
|
'title': result.work[0].best_book[0].title[0],
|
|
'author': result.work[0].best_book[0].author[0].name[0],
|
|
'rating': result.work[0].average_rating[0]
|
|
});
|
|
} else {
|
|
callback(true, null);
|
|
}
|
|
});
|
|
} else {
|
|
callback(true, null);
|
|
}
|
|
}.bind(this));
|
|
}
|
|
};
|
|
|
|
this.commands = {
|
|
'~book': function(event) {
|
|
this.api.searchBook(event.input[1], function(err, res) {
|
|
if(!err) {
|
|
event.reply(dbot.t('gr_book', {
|
|
'author': res.author,
|
|
'title': res.title,
|
|
'rating': res.rating,
|
|
'link': this.ApiRoot + 'book/show/' + res.id
|
|
}));
|
|
} else {
|
|
event.reply(dbot.t('gr_nobook'));
|
|
}
|
|
}.bind(this));
|
|
}
|
|
};
|
|
this.commands['~book'].regex = [/^book ([\d\w\s-]*)/, 2];
|
|
};
|
|
|
|
exports.fetch = function(dbot) {
|
|
return new goodreads(dbot);
|
|
};
|