Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.68 KB | None | 0 0
  1. import praw
  2. from textblob import TextBlob
  3. from prettytable import PrettyTable
  4.  
  5.  
  6. def f_num(num):
  7.     return '{0:.2f}'.format(num).rstrip('0').rstrip('.')
  8.  
  9.  
  10. def main():
  11.     with open("credentials.txt", "r") as f:
  12.         DF = f.read().splitlines()
  13.  
  14.     REDDIT = praw.Reddit(client_id=DF[0],
  15.                          client_secret=DF[1],
  16.                          user_agent="python script",
  17.                          username=DF[2],
  18.                          password=DF[3])
  19.  
  20.     # assumes DT is pinned post on the sub
  21.     dt = [x.id for x in REDDIT.subreddit('neoliberal').hot(limit=1)].pop(0)
  22.     submission = REDDIT.submission(id=dt)
  23.     # structure = {Username: number of posts, overall score, score per post,
  24.     # controversial, textbody}
  25.     comments = dict()
  26.     submission.comments.replace_more(limit=None)
  27.  
  28.     for comment in submission.comments.list():
  29.         try:
  30.             username = comment.author.name
  31.             score = comment.score
  32.             controversial = comment.controversiality
  33.             body = comment.body
  34.             if username not in comments:
  35.                 comments[username] = [1, score, controversial, [body]]
  36.             else:
  37.                 old_count, old_score, old_controversial, body_list = comments[username]
  38.                 comments[username] = [
  39.                     old_count + 1,
  40.                     old_score + score,
  41.                     old_controversial + controversial,
  42.                     body_list + [body]]
  43.         except Exception:
  44.             pass
  45.  
  46.     sorted_users = sorted(
  47.         comments.items(), key=lambda i: i[1][0], reverse=True)
  48.  
  49.     for x in comments:
  50.         tmp = comments[x][3]
  51.         sentiments = []
  52.         if tmp is not None:
  53.             for comment in tmp:
  54.                 blob = TextBlob(''.join(comment))
  55.                 sentiments.append(blob.polarity)
  56.         pos, neutral, neg = sum(
  57.             x < 0 for x in sentiments), sum(
  58.             x == 0 for x in sentiments), sum(
  59.             x > 0 for x in sentiments)
  60.         p, n, neg = float(pos * 100) / len(tmp), float(neutral *
  61.                                                        100) / len(tmp), float(neg * 100) / len(tmp)
  62.         comments[x][3] = "{:>5}% {:>5}% {:>5}%".format(
  63.             f_num(p), f_num(n), f_num(neg))
  64.  
  65.     t = PrettyTable(['Name', 'Postcount', 'Karma', 'Karma/Post',
  66.                      'Controversial', 'Sentiment (Pos/Ntr/Neg)'])
  67.     for key, value in sorted_users:
  68.         karma_per_post = 0 if value[1] == 0 else float(value[1] / value[0])
  69.         t.add_row([key, value[0], value[1],
  70.                    '{0:.2f}'.format(karma_per_post), value[2], value[3]])
  71.     print(t)
  72.  
  73.  
  74. if __name__ == '__main__':
  75.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement