New calculator function, as tested by yano and jasondavies!
parent
63b981c994
commit
9ae58d0a35
2
Makefile
2
Makefile
|
@ -15,4 +15,4 @@ log: ;
|
||||||
git graph
|
git graph
|
||||||
|
|
||||||
sync: ;
|
sync: ;
|
||||||
rsync -avz --delete ./ pubble:opt/phenny/
|
rsync -avz ./ pubble:opt/phenny/
|
||||||
|
|
|
@ -43,7 +43,7 @@ def calc(phenny, input):
|
||||||
precision = 2
|
precision = 2
|
||||||
query = web.urllib.quote(query.encode('utf-8'))
|
query = web.urllib.quote(query.encode('utf-8'))
|
||||||
|
|
||||||
uri = 'http://futureboy.homeip.net/fsp/frink.fsp?fromVal='
|
uri = 'http://futureboy.us/fsp/frink.fsp?fromVal='
|
||||||
bytes = web.get(uri + query)
|
bytes = web.get(uri + query)
|
||||||
m = r_result.search(bytes)
|
m = r_result.search(bytes)
|
||||||
if m:
|
if m:
|
||||||
|
@ -63,8 +63,28 @@ def calc(phenny, input):
|
||||||
|
|
||||||
phenny.say(q + ' = ' + result[:350])
|
phenny.say(q + ' = ' + result[:350])
|
||||||
else: phenny.reply("Sorry, can't calculate that.")
|
else: phenny.reply("Sorry, can't calculate that.")
|
||||||
|
phenny.say('Note that .calc is deprecated, consider using .c')
|
||||||
calc.commands = ['calc']
|
calc.commands = ['calc']
|
||||||
calc.example = '.calc 5 + 3'
|
calc.example = '.calc 5 + 3'
|
||||||
|
|
||||||
|
def c(phenny, input):
|
||||||
|
"""Google calculator."""
|
||||||
|
q = input.group(2).encode('utf-8')
|
||||||
|
q = q.replace('\xcf\x86', 'phi') # utf-8 U+03C6
|
||||||
|
q = q.replace('\xcf\x80', 'pi') # utf-8 U+03C0
|
||||||
|
uri = 'http://www.google.com/ig/calculator?q='
|
||||||
|
bytes = web.get(uri + web.urllib.quote(q))
|
||||||
|
parts = bytes.split('",')
|
||||||
|
answer = [p for p in parts if p.startswith('rhs: "')][0][6:]
|
||||||
|
if answer:
|
||||||
|
answer = answer.decode('unicode-escape')
|
||||||
|
answer = answer.replace('<sup>', '^(')
|
||||||
|
answer = answer.replace('</sup>', ')')
|
||||||
|
answer = web.decode(answer)
|
||||||
|
phenny.say(answer)
|
||||||
|
else: phenny.say('Sorry, no result.')
|
||||||
|
c.commands = ['c']
|
||||||
|
c.example = '.c 5 + 3'
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print __doc__.strip()
|
print __doc__.strip()
|
||||||
|
|
18
web.py
18
web.py
|
@ -5,7 +5,8 @@ Author: Sean B. Palmer, inamidst.com
|
||||||
About: http://inamidst.com/phenny/
|
About: http://inamidst.com/phenny/
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import urllib
|
import re, urllib
|
||||||
|
from htmlentitydefs import name2codepoint
|
||||||
|
|
||||||
class Grab(urllib.URLopener):
|
class Grab(urllib.URLopener):
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
|
@ -40,5 +41,20 @@ def post(uri, query):
|
||||||
u.close()
|
u.close()
|
||||||
return bytes
|
return bytes
|
||||||
|
|
||||||
|
r_entity = re.compile(r'&([^;\s]+);')
|
||||||
|
|
||||||
|
def entity(match):
|
||||||
|
value = match.group(1).lower()
|
||||||
|
if value.startswith('#x'):
|
||||||
|
return unichr(int(value[2:], 16))
|
||||||
|
elif value.startswith('#'):
|
||||||
|
return unichr(int(value[1:]))
|
||||||
|
elif name2codepoint.has_key(value):
|
||||||
|
return unichr(name2codepoint[value])
|
||||||
|
return '[' + value + ']'
|
||||||
|
|
||||||
|
def decode(html):
|
||||||
|
return r_entity.sub(entity, html)
|
||||||
|
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in New Issue