2018-11-01 15:05:52 +00:00
#!/usr/bin/python3
2016-03-10 16:54:42 +00:00
import urllib
from bs4 import BeautifulSoup
import random
2016-09-07 15:58:36 +00:00
import string
2016-03-10 16:54:42 +00:00
2018-10-05 20:02:38 +00:00
dict = " /usr/share/dict/american-english "
( userId , token ) = open ( " /home/krowbar/.secret/s4token " ) . readline ( ) . rstrip ( ) . split ( " , " )
2016-03-10 16:54:42 +00:00
2017-03-30 21:39:44 +00:00
def get_acros ( word , silly , short ) :
2018-10-05 20:02:38 +00:00
acros = [ ]
2018-10-10 22:09:23 +00:00
url = " http://www.stands4.com/services/v2/abbr.php?uid= {} &tokenid= {} &term= {} " . format (
userId , token , word
2018-10-05 20:02:38 +00:00
)
2018-11-01 15:05:52 +00:00
soup = BeautifulSoup ( urllib . request . urlopen ( url ) . read ( ) , " html5lib " )
2018-10-05 20:02:38 +00: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 16:54:42 +00:00
2018-10-05 20:02:38 +00: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 22:09:23 +00:00
' {} : " {} " ( {} , score: {} ) ' . format (
2018-10-05 20:02:38 +00:00
d [ " term " ] ,
d [ " definition " ] ,
" , " . join ( d [ " categories " ] ) ,
d [ " score " ] ,
)
2018-11-01 15:05:52 +00:00
)
2018-10-05 20:02:38 +00:00
)
if silly is True :
newDef = [ ]
words = open ( dict , " r " ) . readlines ( )
try :
for idx , letter in enumerate ( word ) :
newWord = random . choice (
2018-11-01 15:05:52 +00:00
list ( filter (
2018-10-05 20:02:38 +00:00
lambda w : ( idx is 0 or not w . strip ( ) . lower ( ) . endswith ( " ' s " ) )
and w . lower ( ) . startswith ( letter . lower ( ) ) ,
words ,
2018-11-01 15:05:52 +00:00
) )
2018-10-05 20:02:38 +00: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 22:09:23 +00:00
' {} : " {} " ( {} , score: {} ) ' . format (
word . upper ( ) , newWord , " Tilde.town Original " , " 0 "
)
2018-11-01 15:05:52 +00:00
)
2018-10-05 20:02:38 +00: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