google search plugin (same module as google image search)

This commit is contained in:
Ryan Hitchman 2009-05-14 22:00:48 -06:00
parent f820b0014c
commit 92e451ad68
2 changed files with 56 additions and 23 deletions

View File

@ -1,23 +0,0 @@
import yaml
import urllib
import hook
@hook.command
def gis(inp):
'''.gis <term> -- returns first google image result (safesearch off)'''
if not inp:
return gis.__doc__
req_url = 'http://ajax.googleapis.com/ajax/services/search/images?' \
'v=1.0&safe=off&q='
url = req_url + urllib.quote(inp, safe='')
json = urllib.urlopen(url).read()
parsed = yaml.load(json)
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 parsed['responseData']['results'][0]['unescapedUrl']

56
plugins/google.py Normal file
View File

@ -0,0 +1,56 @@
import yaml
import urllib
from lxml import html
import hook
def api_get(kind, query):
req_url = 'http://ajax.googleapis.com/ajax/services/search/%s?' \
'v=1.0&safe=off&q=%s'
url = req_url % (kind, urllib.quote(query, safe=''))
json = urllib.urlopen(url).read()
return yaml.load(json)
@hook.command
def gis(inp):
'''.gis <term> -- returns first google image result (safesearch off)'''
if not inp:
return gis.__doc__
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 parsed['responseData']['results'][0]['unescapedUrl']
@hook.command
@hook.command('g')
@hook.command('goog')
def google(inp):
'''.g/.goog/.google <query> -- returns first google search result'''
if not inp:
return google.__doc__
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, content = map(lambda x: html.fromstring(x).text_content(),
(result['titleNoFormatting'], result['content']))
out = '%s -- \x02%s\x02: "%s"' % (result['unescapedUrl'], title, content)
out = ' '.join(out.split())
if len(out) > 300:
out = out[:out.rfind(' ')] + '..."'
return out