packaged
This commit is contained in:
57
markovbot/__init__.py
Normal file
57
markovbot/__init__.py
Normal file
@ -0,0 +1,57 @@
|
||||
import markovify
|
||||
import argparse
|
||||
import itertools
|
||||
import twitter
|
||||
|
||||
def parser():
|
||||
parser = argparse.ArgumentParser(description='Process some integers.')
|
||||
parser.add_argument('--config', dest='filepath', metavar='CREDENTIALS', type=str, help='Path to config file')
|
||||
parser.add_argument('text', metavar='CORPUS', type=str, help='path to the text you wish to mimic') # filepath should be a flag; corpus an argument!
|
||||
parser.add_argument('--coke-binge', dest='coke_binge', action="store_true", default=False, help='Tweet excessively/emulate our POTUS') # instead of tweeting once, tweet a random number of times.
|
||||
parser.add_argument('-t', dest='test', action="store_true", default=False, help='Test text generation without tweeting.') # distance on markov chains?? distance on syntax trees?
|
||||
return parser.parse_args()
|
||||
|
||||
def build_model(text):
|
||||
# Get raw text of markov chain as string.
|
||||
with open(text) as f:
|
||||
text = f.read()
|
||||
|
||||
# Build the model.
|
||||
return markovify.Text(text)
|
||||
|
||||
def make_tweets(api, test, model, coke_binge_num):
|
||||
# Generate three randomly-generated sentences of no more than 140 characters and tweet them.
|
||||
selected = False
|
||||
for i in range(0, coke_binge_num):
|
||||
while selected is False:
|
||||
str_potentially = model.make_short_sentence(140)
|
||||
if not("http" in str_potentially):
|
||||
if not(test):
|
||||
# tweet the generated text
|
||||
status = api.PostUpdate(str_potentially)
|
||||
print(status.text) # verify it worked
|
||||
else:
|
||||
# test mode; just display it
|
||||
print(str_potentially)
|
||||
selected = True
|
||||
selected = False
|
||||
|
||||
# Function to help process credentials file
|
||||
def drop_tag(str):
|
||||
parsed = itertools.dropwhile(lambda x: x!= ':', str)
|
||||
str2 = "".join(parsed)
|
||||
parsed2 = itertools.dropwhile(lambda x: x == ' ' or x == ':', str2)
|
||||
return "".join(parsed2)
|
||||
|
||||
# Process api keys etc.
|
||||
def make_api_keys(filepath):
|
||||
# Open file with credentials
|
||||
with open(filepath) as f:
|
||||
content = f.readlines()
|
||||
# Strip irrelevant text
|
||||
content = [drop_tag(x.strip()) for x in content]
|
||||
# create twitter api object
|
||||
return twitter.Api(consumer_key=content[0],
|
||||
consumer_secret=content[1],
|
||||
access_token_key=content[2],
|
||||
access_token_secret=content[3])
|
Reference in New Issue
Block a user