In [ ]:
from random import randint, choice
import tweepy, time, webbrowser, re
class MarkovBot:
def __init__(self, path_to_secret, path_to_corpus, tweets_a_day): # path to corpus
self.sleep_timer = int(60 * 60 * tweets_a_day)
self.transition = {}
self.start_words = []
self.api = tweepy.API()
self.oauth(path_to_secret)
self.init_corpus(path_to_corpus)
def oauth(self, path_to_secret):
with open(path_to_secret) as f:
consumer_key_secret = f.readlines()
consumer_key_secret = [x.strip() for x in consumer_key_secret]
consumer_key = consumer_key_secret[0]
consumer_secret = consumer_key_secret[1]
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth_url = auth.get_authorization_url()
webbrowser.open(auth_url)
verifier = raw_input('PIN: ').strip()
auth.get_access_token(verifier)
with open('./access_key_secret.txt', 'w') as f:
f.write(auth.access_token + '\n' + auth.access_token_secret)
self.api = tweepy.API(auth)
def init_corpus(self, path_to_corpus):
with open(path_to_corpus, 'r') as f:
for line in f.readlines():
words = line.split()
self.start_words.append(words[0])
n = len(words)
for word1, word2 in zip(words[:(n - 1)], words[1:]):
if word1 in self.transition:
self.transition[word1].append(word2)
else:
self.transition[word1] = [word2]
def generate(self):
current_word = choice(self.start_words)
result = [current_word]
while current_word in self.transition.keys() and self.transition[current_word]:
current_word = choice(self.transition[current_word])
result.append(current_word)
return ' '.join(result)
def get_tweet(self):
tweet = self.generate()
while len(tweet.decode('utf8')) > 140 or len(tweet.split()) < 7:
tweet = self.generate()
return tweet
def run(self):
while True:
tweet = self.get_tweet()
self.api.update_status(tweet) # Posts to twitter
time.sleep(self.sleep_timer)
In [ ]:
if __name__ == '__main__':
bot = MarkovBot('./consumer_key_secret.txt', './cyberleninka_all.txt', 3)
bot.run()
In [ ]: