# -*- coding: utf-8 -*-
import urllib, urllib2
import htmlentitydefs
import re, sys

def get_page(url, values={}):
    data = urllib.urlencode(values)
    req = urllib2.Request(url + data)
    req.add_header('User-Agent', 'Mozilla/5.0')
    return urllib2.urlopen(req).read()
   
def no_tags(s):
    return re.sub("<[^>]+>", "", s)

def convert_entity(m):
    if m.group(1)=='#':
        try:
            return chr(int(m.group(2)))
        except ValueError:
            return '&#%s;' % m.group(2)
    try:
        return htmlentitydefs.entitydefs[m.group(2)]
    except KeyError:
        return '&%s;' % m.group(2)

def unquote_html(s):
    return re.sub(r'&(#?)(.+?);',convert_entity,s)

if __name__ == '__main__':

    # Get a random subject from Wikipedia
    
    try:
        wiki_page = get_page('http://en.wikipedia.org/wiki/Special:Random')
    except:
        print 'Offline?'
        sys.exit()

    try:
        wiki_title = re.findall('\<title\>([^<]+)\<\/title\>', wiki_page)[0][:-35]
    except IndexError:
        print 'Could not find a <title> in %s.' % wiki_page
        sys.exit()
    
    print wiki_title

    # Get first Google result description for a Wiki title

    try:
        google_page = get_page('http://www.google.com/search?lr=lang_en&', {"q" : wiki_title})
    except:
        print 'Looking for %s, Google out of reach.' % wiki_title
        sys.exit()

    try:
        google_result = re.findall("<div class=std>(.*?)<span", google_page)[0]
    except IndexError:
        print '%s without Google Results!' % wiki_title
        sys.exit()
    
    quote = unquote_html(no_tags(google_result))

    f = open("/tmp/random_word", "w")
    f.write(quote)
    f.close()
