interactive bots: Improve googlesearch bot.
This commit is contained in:
parent
1d2d6c9cf7
commit
b157b817ae
9 changed files with 118 additions and 33 deletions
|
@ -1,23 +0,0 @@
|
|||
# Google Search bot
|
||||
|
||||
This bot allows users to do Google search queries and have the bot
|
||||
respond with the first search result. It is by default set to the
|
||||
highest safe-search setting.
|
||||
|
||||
## Usage
|
||||
|
||||
Run this bot as described
|
||||
[here](https://zulipchat.com/api/running-bots#running-a-bot).
|
||||
|
||||
Use this bot with the following command
|
||||
|
||||
`@mentioned-bot <search terms>`
|
||||
|
||||
This will return the first link found by Google for `<search terms>`
|
||||
and print the resulting URL.
|
||||
|
||||
If no `<search terms>` are entered, a help message is printed instead.
|
||||
|
||||
If there was an error in the process of running the search (socket
|
||||
errors, Google search function failed, or general failures), an error
|
||||
message is returned.
|
|
@ -1,93 +0,0 @@
|
|||
# See readme.md for instructions on running this code.
|
||||
from __future__ import print_function
|
||||
import logging
|
||||
from six.moves.urllib import error
|
||||
from six.moves.urllib.request import urlopen
|
||||
|
||||
# Uses the Google search engine bindings
|
||||
# pip install --upgrade google
|
||||
from google import search
|
||||
|
||||
|
||||
def get_google_result(search_keywords):
|
||||
help_message = "To use this bot, start messages with @mentioned-bot, \
|
||||
followed by what you want to search for. If \
|
||||
found, Zulip will return the first search result \
|
||||
on Google.\
|
||||
\
|
||||
An example message that could be sent is:\
|
||||
'@mentioned-bot zulip' or \
|
||||
'@mentioned-bot how to create a chatbot'."
|
||||
if search_keywords == 'help':
|
||||
return help_message
|
||||
elif search_keywords == '' or search_keywords is None:
|
||||
return help_message
|
||||
else:
|
||||
try:
|
||||
urls = search(search_keywords, stop=20)
|
||||
urlopen('http://216.58.192.142', timeout=1)
|
||||
except error.URLError as er:
|
||||
logging.exception(er)
|
||||
return 'Error: No internet connection. {}.'.format(er)
|
||||
except Exception as e:
|
||||
logging.exception(e)
|
||||
return 'Error: Search failed. {}.'.format(e)
|
||||
|
||||
try:
|
||||
url = next(urls)
|
||||
except AttributeError as a_err:
|
||||
# google.search query failed and urls is of object
|
||||
# 'NoneType'
|
||||
logging.exception(a_err)
|
||||
return "Error: Google search failed with a NoneType result. {}.".format(a_err)
|
||||
except TypeError as t_err:
|
||||
# google.search query failed and returned None
|
||||
# This technically should not happen but the prior
|
||||
# error check assumed this behavior
|
||||
logging.exception(t_err)
|
||||
return "Error: Google search function failed. {}.".format(t_err)
|
||||
except Exception as e:
|
||||
logging.exception(e)
|
||||
return 'Error: Search failed. {}.'.format(e)
|
||||
|
||||
return 'Success: {}'.format(url)
|
||||
|
||||
|
||||
class GoogleSearchHandler(object):
|
||||
'''
|
||||
This plugin allows users to enter a search
|
||||
term in Zulip and get the top URL sent back
|
||||
to the context (stream or private) in which
|
||||
it was called. It looks for messages starting
|
||||
with @mentioned-bot.
|
||||
'''
|
||||
|
||||
def usage(self):
|
||||
return '''
|
||||
This plugin will allow users to search
|
||||
for a given search term on Google from
|
||||
Zulip. Use '@mentioned-bot help' to get
|
||||
more information on the bot usage. Users
|
||||
should preface messages with
|
||||
@mentioned-bot.
|
||||
'''
|
||||
|
||||
def handle_message(self, message, bot_handler):
|
||||
original_content = message['content']
|
||||
result = get_google_result(original_content)
|
||||
bot_handler.send_reply(message, result)
|
||||
|
||||
handler_class = GoogleSearchHandler
|
||||
|
||||
|
||||
def test():
|
||||
try:
|
||||
urlopen('http://216.58.192.142', timeout=1)
|
||||
print('Success')
|
||||
return True
|
||||
except error.URLError as e:
|
||||
print('Error: {}'.format(e))
|
||||
return False
|
||||
|
||||
if __name__ == '__main__':
|
||||
test()
|
Binary file not shown.
Before Width: | Height: | Size: 17 KiB |
Loading…
Add table
Add a link
Reference in a new issue