diff options
Diffstat (limited to 'modules/calc.py')
-rwxr-xr-x | modules/calc.py | 160 |
1 files changed, 80 insertions, 80 deletions
diff --git a/modules/calc.py b/modules/calc.py index 9a5b187..b58b730 100755 --- a/modules/calc.py +++ b/modules/calc.py @@ -15,101 +15,101 @@ r_result = re.compile(r'(?i)<A NAME=results>(.*?)</A>') r_tag = re.compile(r'<\S+.*?>') subs = [ - (' in ', ' -> '), - (' over ', ' / '), - (u'£', 'GBP '), - (u'€', 'EUR '), - ('\$', 'USD '), - (r'\bKB\b', 'kilobytes'), - (r'\bMB\b', 'megabytes'), - (r'\bGB\b', 'kilobytes'), - ('kbps', '(kilobits / second)'), - ('mbps', '(megabits / second)') + (' in ', ' -> '), + (' over ', ' / '), + (u'£', 'GBP '), + (u'€', 'EUR '), + ('\$', 'USD '), + (r'\bKB\b', 'kilobytes'), + (r'\bMB\b', 'megabytes'), + (r'\bGB\b', 'kilobytes'), + ('kbps', '(kilobits / second)'), + ('mbps', '(megabits / second)') ] -def calc(phenny, input): - """Use the Frink online calculator.""" - q = input.group(2) - if not q: - return phenny.say('0?') +def calc(phenny, input): + """Use the Frink online calculator.""" + q = input.group(2) + if not q: + return phenny.say('0?') - query = q[:] - for a, b in subs: - query = re.sub(a, b, query) - query = query.rstrip(' \t') + query = q[:] + for a, b in subs: + query = re.sub(a, b, query) + query = query.rstrip(' \t') - precision = 5 - if query[-3:] in ('GBP', 'USD', 'EUR', 'NOK'): - precision = 2 - query = web.urllib.quote(query.encode('utf-8')) + precision = 5 + if query[-3:] in ('GBP', 'USD', 'EUR', 'NOK'): + precision = 2 + query = web.urllib.quote(query.encode('utf-8')) - uri = 'http://futureboy.us/fsp/frink.fsp?fromVal=' - bytes = web.get(uri + query) - m = r_result.search(bytes) - if m: - result = m.group(1) - result = r_tag.sub('', result) # strip span.warning tags - result = result.replace('>', '>') - result = result.replace('(undefined symbol)', '(?) ') + uri = 'http://futureboy.us/fsp/frink.fsp?fromVal=' + bytes = web.get(uri + query) + m = r_result.search(bytes) + if m: + result = m.group(1) + result = r_tag.sub('', result) # strip span.warning tags + result = result.replace('>', '>') + result = result.replace('(undefined symbol)', '(?) ') - if '.' in result: - try: result = str(round(float(result), precision)) - except ValueError: pass + if '.' in result: + try: result = str(round(float(result), precision)) + except ValueError: pass - if not result.strip(): - result = '?' - elif ' in ' in q: - result += ' ' + q.split(' in ', 1)[1] + if not result.strip(): + result = '?' + elif ' in ' in q: + result += ' ' + q.split(' in ', 1)[1] - phenny.say(q + ' = ' + result[:350]) - else: phenny.reply("Sorry, can't calculate that.") - phenny.say('Note that .calc is deprecated, consider using .c') + phenny.say(q + ' = ' + result[:350]) + else: phenny.reply("Sorry, can't calculate that.") + phenny.say('Note that .calc is deprecated, consider using .c') calc.commands = ['calc'] calc.example = '.calc 5 + 3' -def c(phenny, input): - """Google calculator.""" - if not input.group(2): - return phenny.reply("Nothing to calculate.") - q = input.group(2).encode('utf-8') - 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.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 = ''.join(chr(ord(c)) for c in answer) - answer = answer.decode('utf-8') - answer = answer.replace(u'\xc2\xa0', ',') - answer = answer.replace('<sup>', '^(') - answer = answer.replace('</sup>', ')') - answer = web.decode(answer) - phenny.say(answer) - else: phenny.say('Sorry, no result.') +def c(phenny, input): + """Google calculator.""" + if not input.group(2): + return phenny.reply("Nothing to calculate.") + q = input.group(2).encode('utf-8') + 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.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 = ''.join(chr(ord(c)) for c in answer) + answer = answer.decode('utf-8') + answer = answer.replace(u'\xc2\xa0', ',') + 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' -def py(phenny, input): - query = input.group(2).encode('utf-8') - uri = 'http://tumbolia.appspot.com/py/' - answer = web.get(uri + web.urllib.quote(query)) - if answer: - phenny.say(answer) - else: phenny.reply('Sorry, no result.') +def py(phenny, input): + query = input.group(2).encode('utf-8') + uri = 'http://tumbolia.appspot.com/py/' + answer = web.get(uri + web.urllib.quote(query)) + if answer: + phenny.say(answer) + else: phenny.reply('Sorry, no result.') py.commands = ['py'] -def wa(phenny, input): - if not input.group(2): - return phenny.reply("No search term.") - query = input.group(2).encode('utf-8') - uri = 'http://tumbolia.appspot.com/wa/' - answer = web.get(uri + web.urllib.quote(query.replace('+', '%2B'))) - if answer: - phenny.say(answer) - else: phenny.reply('Sorry, no result.') +def wa(phenny, input): + if not input.group(2): + return phenny.reply("No search term.") + query = input.group(2).encode('utf-8') + uri = 'http://tumbolia.appspot.com/wa/' + answer = web.get(uri + web.urllib.quote(query.replace('+', '%2B'))) + if answer: + phenny.say(answer) + else: phenny.reply('Sorry, no result.') wa.commands = ['wa'] -if __name__ == '__main__': - print __doc__.strip() +if __name__ == '__main__': + print __doc__.strip() |