Advertisement
Guest User

Untitled

a guest
Apr 11th, 2017
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. import praw
  2. import tweepy
  3. import os
  4. import re
  5. import sqlite3
  6. import threading
  7. import queue
  8.  
  9. reddit = praw.Reddit(username='HabitsAndTraits',password='!@V3rYs3cur3!p4sssw0rD!!!', client_id='Lvk-tDVDT2YzqQ',client_secret='ICnAki6j6K9aZtse1xuB-317g3c', user_agent='A twitter cross post agent')
  10. twitter = tweepy.OAuthHandler('tuX3uLpctUAhx8ppMt2IJBgfO','8R8TOloQodHFT8nAVfjgibLKpZN5ekdz3cABDylHDmE9u7cNcF')
  11. twitter.set_access_token('4870773499-E6ngKNBKaLhENTeMv33ckM8yRThk72xCqKE6DMo', 'IuLZuLcmlhmDQD2F2DQ6I1dBucJhsjCjO6Ru8BqfRQlPy')
  12. api = tweepy.API(twitter)
  13. q = queue.Queue()
  14.  
  15. class Database(object):
  16.  
  17. def __init__(self, dbFile):
  18. self.conn = sqlite3.connect(dbFile+'.db')
  19. self.cur = self.conn.cursor()
  20.  
  21. def entry(self, tablename, values):
  22. print('Entering data to database...')
  23. if type(values) != list:
  24. values = values.split(' ') #convert to a list if necessary
  25. self.cur.execute('INSERT INTO {} VALUES({})'.format(tablename, ','.join(['?' for value in values])),values)
  26. self.conn.commit()
  27. print("Succesfully submitted and saved data!")
  28.  
  29. def query(self, tablename, search_param=None, query=None, fetchall=False, limit='*'):
  30. print('Querying database...')
  31. if query is None:
  32. self.cur.execute('SELECT {} FROM {}'.format(limit, tablename))
  33. else:
  34. self.cur.execute('SELECT {} FROM {} WHERE {}=?'.format(limit, tablename, search_param), [query])
  35. print('Query sucessful')
  36. if fetchall is False:
  37. return self.cur.fetchone()
  38. else:
  39. return self.cur.fetchall()
  40.  
  41. def create_table(self, tablename, values):
  42. if type(values) != list:
  43. values = values.split(' ')
  44. self.cur.execute('CREATE TABLE IF NOT EXISTS {}({})'.format(tablename, ','.join(values)))
  45. self.conn.commit()
  46. print('Created table: {}...'.format(tablename))
  47.  
  48.  
  49. class twitterParser(object):
  50.  
  51. def __init__(self, handle, queue=q):
  52. self.tweets = api.user_timeline(handle)
  53. self.queue = queue
  54. self.__call__()
  55.  
  56. def __call__(self):
  57. tweets = [tweet for tweet in self.tweets if re.search('http', tweet.text) and not Database('twitter').query('retweeted',[tweet.id, tweet.author.screen_name])]
  58. for tweet in tweets:
  59. Database('twitter').entry('retweeted',[tweet.id, tweet.author.screen_name])
  60. self.queue.put(tweet)
  61.  
  62. class redditParser(object):
  63.  
  64. def __init__(self, tweet, subreddit='Pubtips'):
  65. self.tweet = tweet
  66. self.subreddit = subreddit
  67. self.author = tweet.author.screen_name
  68. self.text = tweet.text
  69. self.url = self.getUrl()
  70. self.__call__(self.url)
  71.  
  72. def getUrl(self):
  73. try:
  74. url = self.tweet.entities['media'][0]['media_url']
  75. except Exception as e:
  76. url = None
  77. print(url)
  78. return url
  79.  
  80. def __call__(self, url):
  81. if self.url == None:
  82. pass
  83. else:
  84. submission = reddit.subreddit(self.subreddit).submit(self.text, url=url)
  85. submission.reply('Author: {}\n\ntweet: {}'.format(self.author, self.text))
  86. print('Submitted!')
  87.  
  88. class messageParser(object):
  89.  
  90. def __init__(self, message):
  91. self.message = message
  92. self.author = str(message.author)
  93. self.subject = message.subject.lower()
  94. self.body = message.body
  95. self.action = self.messageType()
  96. self.__call__()
  97.  
  98. def messageType(self):
  99. if self.subject == '!add':
  100. return True
  101. elif self.subject == '!remove':
  102. return False
  103. else:
  104. return None
  105.  
  106. def __call__(self):
  107. if self.action == True:
  108. Database('twitter').entry('following',[re.sub('@','',self.body)])
  109. self.message.reply('*@{} has been succesfully added to the x-post list!*'.format(self.body))
  110. self.message.mark_read()
  111. else:
  112. pass
  113.  
  114.  
  115. def main():
  116. Database('twitter').create_table('following',['handle'])
  117. Database('twitter').create_table('retweeted',['id','handle'])
  118. for handle in ['hughhowey','carlywatters','staceyigraham','KateBrauning','msmariavicente']:
  119. Database('twitter').entry('following',handle)
  120. while True:
  121. for message in reddit.inbox.unread(limit=3):
  122. messageParser(message)
  123. for handle in Database('twitter').query('following',fetchall=True):
  124. threading.Thread(target=twitterParser, kwargs={'handle':handle[0]}).start()
  125. threads = [thread for thread in threading.enumerate() if thread.is_alive()]
  126. while len(threads) > 1:
  127. threads = [thread for thread in threading.enumerate() if thread.is_alive()]
  128. while not q.empty():
  129. redditParser(q.get())
  130.  
  131. if __name__ == '__main__':
  132. os.system('chcp 65001')
  133. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement