I was at a hackathon recently and I won the best use of wolfram technologies prize. I basically made a texting service, and one of the features that I implemented was the ability to ask questions, which the service would then answer by querying wolfram alpha. I kinda don't want to post the number here cause it'll cost me a lot of money if it gets out, but it was pretty cool.
I used the Wolfram Alpha API, Google App Engine as a backend (with Python), and Twilio as the SMS API.
![Here's a picture of a sample question message that queried Wolfram Alpha][1]
Update:
Here's some code that y'all might find interesting:
This is a class that searches for queries on wolfram alpha. Basically you create a wolfram class and pass in your ID and then you can call search on a query.
import urllib2
import urllib
import httplib
from xml.etree import ElementTree as etree
import sys
class wolfram(object):
def __init__(self, appid):
self.appid = appid
self.base_url = 'http://api.wolframalpha.com/v2/query?'
self.headers = {'User-Agent':None}
def _get_xml(self, ip):
url_params = {'input':ip, 'appid':self.appid}
data = urllib.urlencode(url_params)
req = urllib2.Request(self.base_url, data, self.headers)
xml = urllib2.urlopen(req).read()
return xml
def _xmlparser(self, xml):
data_dics = {}
tree = etree.fromstring(xml)
#retrieving every tag with label 'plaintext'
for e in tree.findall('pod'):
for item in [ef for ef in list(e) if ef.tag=='subpod']:
for it in [i for i in list(item) if i.tag=='plaintext']:
if it.tag=='plaintext':
data_dics[e.get('title')] = it.text
return data_dics
def search(self, ip):
xml = self._get_xml(ip)
result_dics = self._xmlparser(xml)
for key, value in result_dics.iteritems():
val = result_dics[key]
try:
result_dics[key] = val.encode('ascii', 'ignore')
except Exception:
pass
valList = result_dics.values()
keyList = result_dics.keys()
if 'Result' in result_dics.keys():
return result_dics['Result']
elif 'Response' in result_dics.keys():
return result_dics['Response']
elif self.checkForString('Weather forecast for', result_dics):
return result_dics[keyList[self.getIndexOfString('Weather forecast for', result_dics)]]
elif self.checkForString('Results', result_dics):
return result_dics[keyList[self.getIndexOfString('Results', result_dics)]]
elif self.checkForString('Corporate', result_dics):
return result_dics[keyList[self.getIndexOfString('Corporate', result_dics)]]
elif self.checkForString('Basic', result_dics):
return result_dics[keyList[self.getIndexOfString('Basic', result_dics)]]
elif self.checkForString('IP address', result_dics):
return result_dics[keyList[self.getIndexOfString('IP address', result_dics)]]
elif self.checkForString('date', result_dics):
return result_dics[keyList[self.getIndexOfString('date', result_dics)]]
else:
return "I don't understand. Sorry! Type COMMANDS to see the list of available commands."
def checkForString(self, checkStr, myDict):
keyList = myDict.keys()
for key in keyList:
if checkStr in key:
return True
return False
def getIndexOfString(self, checkStr, myDict):
keyList = myDict.keys()
for x in range(len(keyList)):
if checkStr in keyList[x]:
return x
-
twilio_resp = twilio.twiml.Response()
twilio_resp.sms(reply)
self.response.out.write(str(twilio_resp) + "\n")
(reply is the string that is you query from Wolfram Alpha)