google search plugin (same module as google image search)
This commit is contained in:
parent
f820b0014c
commit
92e451ad68
|
@ -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']
|
|
|
@ -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
|
Loading…
Reference in New Issue