| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | # WolframAlpha (Maths)## @website     http://www.wolframalpha.com/# @provide-api yes (http://api.wolframalpha.com/v2/)## @using-api   no# @results     HTML# @stable      no# @parse       answerfrom re import searchfrom json import loadsfrom urllib import urlencode# search-urlurl = 'http://www.wolframalpha.com/'search_url = url+'input/?{query}'search_query = ''# do search-requestdef request(query, params):    params['url'] = search_url.format(query=urlencode({'i': query}))    # used in response    global search_query    search_query = query    return params# get response from search-requestdef response(resp):    results = []    webpage = resp.text    line = None    # the answer is inside a js function    # answer can be located in different 'pods', although by default it should be in pod_0200    possible_locations = ['pod_0200\.push(.*)\n',                          'pod_0100\.push(.*)\n']    # get line that matches the pattern    for pattern in possible_locations:        try:            line = search(pattern, webpage).group(1)            break        except AttributeError:            continue    if line:        # extract answer from json        answer = line[line.find('{'):line.rfind('}')+1]        answer = loads(answer.encode('unicode-escape'))        answer = answer['stringified'].decode('unicode-escape')                results.append({'answer': answer})    # failed result    elif search('pfail', webpage):        return results    # append result    results.append({'url': request(search_query, {})['url'],                    'title': search_query + ' - Wolfram|Alpha'})    return results
 |