3
0
mirror of https://github.com/reality/dbot.git synced 2024-11-24 04:49:25 +01:00
dbot/modules/goodreads/goodreads.js
2014-02-26 15:10:11 +00:00

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);
};