From 8c93a75e04101f44ff441f0378852c58812d40fe Mon Sep 17 00:00:00 2001 From: reality Date: Wed, 26 Feb 2014 15:10:11 +0000 Subject: [PATCH] add goodreads --- modules/goodreads/config.json | 4 ++ modules/goodreads/goodreads.js | 67 ++++++++++++++++++++++++++++++++++ modules/goodreads/strings.json | 8 ++++ modules/profile/config.json | 1 + 4 files changed, 80 insertions(+) create mode 100644 modules/goodreads/config.json create mode 100644 modules/goodreads/goodreads.js create mode 100644 modules/goodreads/strings.json diff --git a/modules/goodreads/config.json b/modules/goodreads/config.json new file mode 100644 index 0000000..e6200fa --- /dev/null +++ b/modules/goodreads/config.json @@ -0,0 +1,4 @@ +{ + "api_key": "sethere", + "outputPrefix": "\u00033goodreads\u000f" +} diff --git a/modules/goodreads/goodreads.js b/modules/goodreads/goodreads.js new file mode 100644 index 0000000..837f7b0 --- /dev/null +++ b/modules/goodreads/goodreads.js @@ -0,0 +1,67 @@ +/** + * 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); +}; diff --git a/modules/goodreads/strings.json b/modules/goodreads/strings.json new file mode 100644 index 0000000..1949cf2 --- /dev/null +++ b/modules/goodreads/strings.json @@ -0,0 +1,8 @@ +{ + "gr_book": { + "en": "[{title} by {author} - {rating}] - {link}" + }, + "gr_nobook": { + "en": "No books found." + } +} diff --git a/modules/profile/config.json b/modules/profile/config.json index 0315ee7..69d84c3 100644 --- a/modules/profile/config.json +++ b/modules/profile/config.json @@ -10,6 +10,7 @@ "bio": null, "lastfm": null, "steam": null, + "goodreads": null, "favourites": { "colour": null }