2016-03-10 11:54:42 -05:00
import urllib
from bs4 import BeautifulSoup
import random
2016-09-07 15:58:36 +00:00
import string
2016-03-10 11:54:42 -05:00
2016-09-07 15:58:36 +00:00
dict = '/usr/share/dict/american-english-huge'
2016-03-10 11:54:42 -05:00
( userId , token ) = open ( "/home/krowbar/.secret/s4token" ) . readline () . rstrip () . split ( ',' )
2016-09-07 15:58:36 +00:00
def get_acros ( word , silly ):
2016-03-10 11:54:42 -05:00
acros = []
url = "http://www.stands4.com/services/v2/abbr.php?uid= %s &tokenid= %s &term= %s " % ( userId , token , word )
soup = BeautifulSoup ( urllib . urlopen ( url ) . read (), 'html5lib' )
results = soup . find_all ( 'result' )
#there are lots of cases where the same definition is repeated multiple times under different categories. this is dumb so we should do a little more work
defs = []
for r in results :
rdef = r . find ( 'definition' ) . text
2016-09-07 15:58:36 +00:00
match = next (( x for x in defs if x [ 'definition' ] . lower () == rdef . lower ()), None )
2016-03-10 11:54:42 -05:00
if match is not None :
#if we find a match, add the category to the existing categories and increase the score
match [ 'categories' ] . append ((( r . find ( 'parentcategoryname' ) . text + ' \\ ' ) if r . find ( 'parentcategoryname' ) else '' ) + r . find ( 'categoryname' ) . text )
match [ 'score' ] = str ( float ( match [ 'score' ]) + float ( r . find ( 'score' ) . text ))
else : #add a new item
defs . append ({ \
'term' : r . find ( 'term' ) . text , \
'definition' : r . find ( 'definition' ) . text , \
'categories' : [(( r . find ( 'parentcategoryname' ) . text + ' \\ ' ) if r . find ( 'parentcategoryname' ) else '' ) + r . find ( 'categoryname' ) . text ], \
'score' : r . find ( 'score' ) . text \
});
for d in sorted ( defs , key = lambda x : float ( x [ 'score' ]), reverse = True ):
#print d;
acros . append (( " %s : \" %s \" ( %s , score: %s )" % \
( d [ 'term' ], d [ 'definition' ], ', ' . join ( d [ 'categories' ]), d [ 'score' ]) \
) . encode ( 'ascii' , 'ignore' ))
2016-09-07 15:58:36 +00:00
if silly is True :
newDef = []
words = open ( dict , 'r' ) . readlines ()
try :
for idx , letter in enumerate ( word ):
newWord = random . choice ( \
filter ( lambda w : ( idx is 0 or not w . strip () . lower () . endswith ( ' \' s' )) \
and w . lower () . startswith ( letter . lower ()), words ) \
) . strip ()
print str ( idx ) + ' -> ' + newWord
newDef . append ( newWord )
acros . append (( " %s : \" %s \" ( %s , score: %s )" % \
( word . upper (), string . capwords ( ' ' . join ( newDef )), 'Tilde.town Original' , '0' ) \
) . encode ( 'ascii' , 'ignore' ))
except IndexError :
acros . append ( "Future hazy, try again later: Tilde.town Error" );
2016-03-10 11:54:42 -05:00
return acros