remove oblique and make .wa local
parent
1472c36fed
commit
91bbc64f2c
|
@ -15,30 +15,31 @@ r_result = re.compile(r'(?i)<A NAME=results>(.*?)</A>')
|
|||
r_tag = re.compile(r'<\S+.*?>')
|
||||
|
||||
subs = [
|
||||
(' in ', ' -> '),
|
||||
(' over ', ' / '),
|
||||
('£', 'GBP '),
|
||||
('€', 'EUR '),
|
||||
('\$', 'USD '),
|
||||
(r'\bKB\b', 'kilobytes'),
|
||||
(r'\bMB\b', 'megabytes'),
|
||||
(r'\bGB\b', 'kilobytes'),
|
||||
('kbps', '(kilobits / second)'),
|
||||
(' in ', ' -> '),
|
||||
(' over ', ' / '),
|
||||
('£', 'GBP '),
|
||||
('€', 'EUR '),
|
||||
('\$', 'USD '),
|
||||
(r'\bKB\b', 'kilobytes'),
|
||||
(r'\bMB\b', 'megabytes'),
|
||||
(r'\bGB\b', 'kilobytes'),
|
||||
('kbps', '(kilobits / second)'),
|
||||
('mbps', '(megabits / second)')
|
||||
]
|
||||
|
||||
def c(phenny, input):
|
||||
|
||||
def c(phenny, input):
|
||||
"""Google calculator."""
|
||||
if not input.group(2):
|
||||
return phenny.reply("Nothing to calculate.")
|
||||
q = input.group(2)
|
||||
q = q.replace('\xcf\x95', 'phi') # utf-8 U+03D5
|
||||
q = q.replace('\xcf\x80', 'pi') # utf-8 U+03C0
|
||||
q = q.replace('\xcf\x95', 'phi') # utf-8 U+03D5
|
||||
q = q.replace('\xcf\x80', 'pi') # utf-8 U+03C0
|
||||
uri = 'http://www.google.com/ig/calculator?q='
|
||||
bytes = web.get(uri + web.quote(q))
|
||||
parts = bytes.split('",')
|
||||
answer = [p for p in parts if p.startswith('rhs: "')][0][6:]
|
||||
if answer:
|
||||
if answer:
|
||||
#answer = ''.join(chr(ord(c)) for c in answer)
|
||||
#answer = answer.decode('utf-8')
|
||||
answer = answer.replace('\\x26#215;', '*')
|
||||
|
@ -48,26 +49,31 @@ def c(phenny, input):
|
|||
answer = answer.replace('</sup>', ')')
|
||||
answer = web.decode(answer)
|
||||
phenny.say(answer)
|
||||
else: phenny.reply('Sorry, no result.')
|
||||
else:
|
||||
phenny.reply('Sorry, no result.')
|
||||
c.commands = ['c']
|
||||
c.example = '.c 5 + 3'
|
||||
|
||||
def wa(phenny, input):
|
||||
|
||||
def wa(phenny, input):
|
||||
if not input.group(2):
|
||||
return phenny.reply("No search term.")
|
||||
query = input.group(2)
|
||||
uri = 'http://tumbolia.appspot.com/wa/'
|
||||
|
||||
answer = web.get(uri + web.quote(query.replace('+', '%2B')))
|
||||
try:
|
||||
answer = answer.split(';')[1]
|
||||
except IndexError:
|
||||
answer = ""
|
||||
re_output = re.compile(r'{"stringified": "(.*?)",')
|
||||
|
||||
if answer:
|
||||
phenny.say(answer)
|
||||
else: phenny.reply('Sorry, no result.')
|
||||
uri = 'http://www.wolframalpha.com/input/?i={}'
|
||||
out = web.get(uri.format(web.quote(query)))
|
||||
answers = re_output.findall(out)
|
||||
if len(answers) <= 0:
|
||||
phenny.reply("Sorry, no result.")
|
||||
return
|
||||
|
||||
answer = answers[1]
|
||||
answer = answer.replace('\\n', ', ')
|
||||
phenny.say(answer)
|
||||
wa.commands = ['wa']
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(__doc__.strip())
|
||||
|
|
|
@ -1,119 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
"""
|
||||
oblique.py - Web Services Interface
|
||||
Copyright 2008-9, Sean B. Palmer, inamidst.com
|
||||
Licensed under the Eiffel Forum License 2.
|
||||
|
||||
http://inamidst.com/phenny/
|
||||
"""
|
||||
|
||||
import re
|
||||
import web
|
||||
|
||||
definitions = 'https://github.com/nslater/oblique/wiki'
|
||||
|
||||
r_item = re.compile(r'(?i)<li>(.*?)</li>')
|
||||
r_tag = re.compile(r'<[^>]+>')
|
||||
|
||||
def mappings(uri):
|
||||
result = {}
|
||||
bytes = web.get(uri)
|
||||
for item in r_item.findall(bytes):
|
||||
item = r_tag.sub('', item).strip(' \t\r\n')
|
||||
if not ' ' in item: continue
|
||||
|
||||
command, template = item.split(' ', 1)
|
||||
if not command.isalnum(): continue
|
||||
if not template.startswith('http://'): continue
|
||||
result[command] = template.replace('&', '&')
|
||||
return result
|
||||
|
||||
def service(phenny, input, command, args):
|
||||
t = o.services[command]
|
||||
template = t.replace('${args}', web.quote(args, ''))
|
||||
template = template.replace('${nick}', web.quote(input.nick, ''))
|
||||
uri = template.replace('${sender}', web.quote(input.sender, ''))
|
||||
|
||||
info = web.head(uri)
|
||||
if isinstance(info, list):
|
||||
info = info[0]
|
||||
if not 'text/plain' in info.get('content-type', '').lower():
|
||||
return phenny.reply("Sorry, the service didn't respond in plain text.")
|
||||
bytes = web.get(uri)
|
||||
lines = bytes.splitlines()
|
||||
if not lines:
|
||||
return phenny.reply("Sorry, the service didn't respond any output.")
|
||||
try: line = lines[0].encode('utf-8')[:350]
|
||||
except: line = lines[0][:250]
|
||||
phenny.say(lines[0][:350])
|
||||
|
||||
def refresh(phenny):
|
||||
if hasattr(phenny.config, 'services'):
|
||||
services = phenny.config.services
|
||||
else: services = definitions
|
||||
|
||||
old = o.services
|
||||
o.serviceURI = services
|
||||
o.services = mappings(o.serviceURI)
|
||||
return len(o.services), set(o.services) - set(old)
|
||||
|
||||
def o(phenny, input):
|
||||
"""Call a webservice."""
|
||||
text = input.group(2)
|
||||
|
||||
if (not o.services) or (text == 'refresh'):
|
||||
length, added = refresh(phenny)
|
||||
if text == 'refresh':
|
||||
msg = 'Okay, found %s services.' % length
|
||||
if added:
|
||||
msg += ' Added: ' + ', '.join(sorted(added)[:5])
|
||||
if len(added) > 5: msg += ', &c.'
|
||||
return phenny.reply(msg)
|
||||
|
||||
if not text:
|
||||
return phenny.reply('Try %s for details.' % o.serviceURI)
|
||||
|
||||
if ' ' in text:
|
||||
command, args = text.split(' ', 1)
|
||||
else: command, args = text, ''
|
||||
command = command.lower()
|
||||
|
||||
if command == 'service':
|
||||
msg = o.services.get(args, 'No such service!')
|
||||
return phenny.reply(msg)
|
||||
|
||||
if command not in o.services:
|
||||
return phenny.reply('Service not found in %s' % o.serviceURI)
|
||||
|
||||
if hasattr(phenny.config, 'external'):
|
||||
default = phenny.config.external.get('*')
|
||||
manifest = phenny.config.external.get(input.sender, default)
|
||||
if manifest:
|
||||
commands = set(manifest)
|
||||
if (command not in commands) and (manifest[0] != '!'):
|
||||
return phenny.reply('Sorry, %s is not whitelisted' % command)
|
||||
elif (command in commands) and (manifest[0] == '!'):
|
||||
return phenny.reply('Sorry, %s is blacklisted' % command)
|
||||
service(phenny, input, command, args)
|
||||
o.commands = ['o']
|
||||
o.example = '.o servicename arg1 arg2 arg3'
|
||||
o.services = {}
|
||||
o.serviceURI = None
|
||||
|
||||
def snippet(phenny, input):
|
||||
if not o.services:
|
||||
refresh(phenny)
|
||||
|
||||
search = web.quote(input.group(2))
|
||||
py = "BeautifulSoup.BeautifulSoup(re.sub('<.*?>|(?<= ) +', '', " + \
|
||||
"''.join(chr(ord(c)) for c in " + \
|
||||
"eval(urllib.urlopen('http://ajax.googleapis.com/ajax/serv" + \
|
||||
"ices/search/web?v=1.0&q=" + search + "').read()" + \
|
||||
".replace('null', 'None'))['responseData']['resul" + \
|
||||
"ts'][0]['content'].decode('unicode-escape')).replace(" + \
|
||||
"'"', '\x22')), convertEntities=True)"
|
||||
service(phenny, input, 'py', py)
|
||||
snippet.commands = ['snippet']
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(__doc__.strip())
|
|
@ -38,6 +38,13 @@ class TestCalc(unittest.TestCase):
|
|||
'(asked, but not answered, about a general swallow in the '\
|
||||
'1975 film Monty Python and the Holy Grail)')
|
||||
|
||||
def test_wa_math(self):
|
||||
input = Mock(group=lambda x: '2+2')
|
||||
wa(self.phenny, input)
|
||||
|
||||
self.phenny.say.assert_called_once_with('4')
|
||||
|
||||
|
||||
def test_wa_none(self):
|
||||
input = Mock(group=lambda x: "jajoajaj ojewphjqo I!tj")
|
||||
wa(self.phenny, input)
|
||||
|
|
Loading…
Reference in New Issue