2018-11-01 11:05:52 -04:00
#!/usr/bin/python3
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
2018-10-05 16:02:38 -04:00
dict = "/usr/share/dict/american-english"
( userId , token ) = open ( "/home/krowbar/.secret/s4token" ) . readline () . rstrip () . split ( "," )
2016-03-10 11:54:42 -05:00
2017-03-30 21:39:44 +00:00
def get_acros ( word , silly , short ):
2018-10-05 16:02:38 -04:00
acros = []
2018-10-10 18:09:23 -04:00
url = "http://www.stands4.com/services/v2/abbr.php?uid= {} &tokenid= {} &term= {} " . format (
userId , token , word
2018-10-05 16:02:38 -04:00
)
2018-11-01 11:05:52 -04:00
soup = BeautifulSoup ( urllib . request . urlopen ( url ) . read (), "html5lib" )
2018-10-05 16:02:38 -04:00
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
match = next (( x for x in defs if x [ "definition" ] . lower () == rdef . lower ()), None )
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 ,
}
)
2016-03-10 11:54:42 -05:00
2018-10-05 16:02:38 -04:00
for d in sorted ( defs , key = lambda x : float ( x [ "score" ]), reverse = True ):
# print d;
if short is True :
acros . append ( '" %s "' % d [ "definition" ])
else :
acros . append (
(
2018-10-10 18:09:23 -04:00
' {} : " {} " ( {} , score: {} )' . format (
2018-10-05 16:02:38 -04:00
d [ "term" ],
d [ "definition" ],
", " . join ( d [ "categories" ]),
d [ "score" ],
)
2018-11-01 11:05:52 -04:00
)
2018-10-05 16:02:38 -04:00
)
if silly is True :
newDef = []
words = open ( dict , "r" ) . readlines ()
try :
for idx , letter in enumerate ( word ):
newWord = random . choice (
2018-11-01 11:05:52 -04:00
list ( filter (
2018-10-05 16:02:38 -04:00
lambda w : ( idx is 0 or not w . strip () . lower () . endswith ( "'s" ))
and w . lower () . startswith ( letter . lower ()),
words ,
2018-11-01 11:05:52 -04:00
))
2018-10-05 16:02:38 -04:00
) . strip ()
print ( str ( idx ) + " -> " + newWord )
newDef . append ( newWord )
newWord = string . capwords ( " " . join ( newDef ))
if short is True :
acros . append ( '" %s "' % newWord )
else :
acros . append (
(
2018-10-10 18:09:23 -04:00
' {} : " {} " ( {} , score: {} )' . format (
word . upper (), newWord , "Tilde.town Original" , "0"
)
2018-11-01 11:05:52 -04:00
)
2018-10-05 16:02:38 -04:00
)
except IndexError :
acros . append ( "Future hazy, try again later: Tilde.town Error" )
if short is True :
shortList = acros [ 0 : 5 ]
if len ( acros ) > 5 :
shortList . append ( acros [ - 1 ])
return [ word . upper () + ": " + ", " . join ( shortList )]
else :
return acros