diff --git a/plugins/google.py b/plugins/google.py new file mode 100644 index 0000000..2be4ea4 --- /dev/null +++ b/plugins/google.py @@ -0,0 +1,55 @@ +import random + +from util import hook, http + + +def api_get(kind, query): + url = 'http://ajax.googleapis.com/ajax/services/search/%s?' \ + 'v=1.0&safe=off' + return http.get_json(url % kind, q=query) + + +@hook.command +def gis(inp): + '''.gis -- returns first google image result (safesearch off)''' + + parsed = api_get('images', inp) + if not 200 <= parsed['responseStatus'] < 300: + raise IOError('error searching for images: %d: %s' % ( + parsed['responseStatus'], '')) + if not parsed['responseData']['results']: + return 'no images found' + return random.choice(parsed['responseData']['results'][:10]) \ + ['unescapedUrl'] # squares is dumb + + +@hook.command('g') +@hook.command +def google(inp): + '''.g/.google -- returns first google search result''' + + parsed = api_get('web', inp) + if not 200 <= parsed['responseStatus'] < 300: + raise IOError('error searching for pages: %d: %s' % ( + parsed['responseStatus'], '')) + if not parsed['responseData']['results']: + return 'no results found' + + result = parsed['responseData']['results'][0] + + title = http.unescape(result['titleNoFormatting']) + content = http.unescape(result['content']) + + if len(content) == 0: + content = "No description available." + else: + content = http.html.fromstring(content).text_content() + + out = '%s :: %s :: %s' % (title, content, result['unescapedUrl']) + + out = ' '.join(out.split()) + + if len(out) > 300: + out = out[:out.rfind(' ')] + '..."' + + return out