Watchful11

Untitled

May 5th, 2018
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. import os
  4. import logging.handlers
  5. import requests
  6. import time
  7. import traceback
  8. import collections
  9. import bisect
  10. from datetime import datetime
  11. from datetime import timedelta
  12.  
  13. ### Config ###
  14. SUBREDDIT = "office"
  15. USER_AGENT = "Domain script (by /u/Watchful1)"
  16. DAYS = 5
  17. OUTPUT = "users.txt"
  18.  
  19. ### Logging setup ###
  20. LOG_FOLDER_NAME = "logs"
  21. LOG_LEVEL = logging.DEBUG
  22. if not os.path.exists(LOG_FOLDER_NAME):
  23. os.makedirs(LOG_FOLDER_NAME)
  24. LOG_FILENAME = LOG_FOLDER_NAME+"/"+"bot.log"
  25. LOG_FILE_BACKUPCOUNT = 5
  26. LOG_FILE_MAXSIZE = 1024 * 256 * 16
  27.  
  28. log = logging.getLogger("bot")
  29. log.setLevel(LOG_LEVEL)
  30. log_formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
  31. log_stderrHandler = logging.StreamHandler()
  32. log_stderrHandler.setFormatter(log_formatter)
  33. log.addHandler(log_stderrHandler)
  34. if LOG_FILENAME is not None:
  35. log_fileHandler = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=LOG_FILE_MAXSIZE, backupCount=LOG_FILE_BACKUPCOUNT)
  36. log_formatter_file = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
  37. log_fileHandler.setFormatter(log_formatter_file)
  38. log.addHandler(log_fileHandler)
  39.  
  40. targetTime = int((datetime.utcnow() - timedelta(days=DAYS)).timestamp())
  41. log.debug("Going back {} days".format(DAYS))
  42. url = "https://api.pushshift.io/reddit/submission/search?limit=1000&sort=desc&subreddit={}&before=".format(SUBREDDIT)
  43. previousTime = int(time.mktime(datetime.utcnow().timetuple()))
  44. count = 0
  45. users = collections.defaultdict(lambda: collections.defaultdict(int))
  46. log.info("Finding posts")
  47. breakOut = False
  48. while True:
  49. newUrl = url+str(previousTime)
  50. json = requests.get(newUrl, headers={'User-Agent': USER_AGENT})
  51. posts = json.json()['data']
  52. if len(posts) == 0:
  53. break
  54.  
  55. for post in posts:
  56. if not post['is_self']:
  57. users[post['author']]["v.redd.it" if post['is_video'] else post['domain']] += 1
  58.  
  59. previousTime = post['created_utc'] - 1
  60. count += 1
  61. if previousTime < targetTime:
  62. breakOut = True
  63. break
  64.  
  65. if count % 500 == 0:
  66. log.info("Found {} posts so far".format(count))
  67. if breakOut:
  68. break
  69.  
  70. log.info("Found {} total posts".format(count))
  71.  
  72. log.info("Sorting users")
  73. sortedUsers = []
  74. for user in users:
  75. bisect.insort(sortedUsers, user)
  76.  
  77. log.info("Outputting users to: {}".format(OUTPUT))
  78. outFile = open(OUTPUT, 'w')
  79. for user in sortedUsers:
  80. userDomains = []
  81. for domain in users[user]:
  82. bisect.insort(userDomains, (users[user][domain], domain))
  83.  
  84. for domainTuple in userDomains[::-1]:
  85. outFile.write("{}: {}, {}\n".format(user, domainTuple[1], domainTuple[0]))
  86. #log.debug("{}: {}".format(user, ', '.join(bldr)))
Advertisement
Add Comment
Please, Sign In to add comment