# -*- coding: utf-8 -*- from __future__ import unicode_literals # # Public domain, 2013 Legoktm # from json import loads import re from urllib import quote from urllib2 import urlopen from earwigbot.commands import Command class UrbanDictionary(Command): """Get the definition of a word or phrase using Urban Dictionary.""" name = "urban" commands = ["urban", "urbandictionary", "dct", "ud"] def process(self, data): if not data.args: self.reply(data, "What do you want to define?") return url = "http://api.urbandictionary.com/v0/define?term={0}" q = quote(' '.join(data.args), safe="") query = urlopen(url.format(q)).read() res = loads(query) if res['result_type'] == 'exact': definition = re.sub(r"\s+", " ", res['list'][0]['definition']) example = re.sub(r"\s+", " ", res['list'][0]['example']) url = res['list'][0]['permalink'].rsplit('/', 1)[0] if definition and definition[-1] not in (".", "!", "?"): definition += "." msg = '{0} \x02Example\x0F: {1} {2}'.format( definition.encode("utf8"), example.encode("utf8"), url) self.reply(data, msg) elif res['result_type'] == 'fulltext': L = [i['word'] for i in res['list']] msg = 'Here are some close matches: {0}.' self.reply(data, msg.format(u", ".join(L).encode("utf8"))) else: self.reply(data, 'Sorry, no results found.')