Guest User

Untitled

a guest
Apr 2nd, 2017
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. import requests
  2. from time import sleep
  3. from getpass import getpass
  4.  
  5. color_names = {
  6. 0: 'white',
  7. 1: 'light-grey',
  8. 2: 'grey',
  9. 3: 'black',
  10. 4:'pink',
  11. 5: 'red',
  12. 6: 'orange',
  13. 7: 'brown',
  14. 8: 'yellow',
  15. 9: 'light-green',
  16. 10: 'green',
  17. 11: 'lightest-blue',
  18. 12: 'light-blue',
  19. 13: 'blue',
  20. 14: 'light-purple',
  21. 15: 'purple'
  22. }
  23.  
  24. class Place(object):
  25. def __init__(self, user, passwd, greedy=False):
  26. """
  27. user: reddit username
  28. pass: reddit password
  29. greedy: keep trying to perform request
  30. """
  31.  
  32. self.session = requests.session()
  33. self.session.headers.update({"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144"})
  34.  
  35. self.greedy = greedy
  36.  
  37. payload= {'op': 'login',
  38. 'user': user,
  39. 'passwd': passwd}
  40. self.session.post("https://www.reddit.com/post/login", data=payload)
  41.  
  42. sleep(1)
  43.  
  44. self.last = self.session.get("https://reddit.com/api/me.json")
  45. self.modhash = self.last.json()["data"]["modhash"]
  46. self.session.headers.update({"x-modhash": self.modhash})
  47. def _get(self, x, y):
  48. payload = {"x": x,
  49. "y": y}
  50. return self.session.get("https://www.reddit.com/api/place/pixel.json", params=payload)
  51. def get(self, x=0, y=0):
  52. """get the color information at a given pixel
  53. x: x-coordinates
  54. y: y-coordinates
  55. """
  56. self.last = self._get(x,y)
  57. if self.greedy:
  58. while self.last.status_code == 429:
  59. sleep(1)
  60. self.last = self._get(x,y)
  61. return self.last.json()
  62.  
  63. def _draw(self, x=0, y=0, color=0):
  64. payload = {"x": x,
  65. "y": y,
  66. "color": color}
  67. return self.session.post("https://www.reddit.com/api/place/draw.json", data=payload)
  68.  
  69. def draw(self, x=0, y=0, color=0):
  70. """draw a color at given coordinates
  71. x: x-coordinates
  72. y: y-coordinates
  73. color: color to draw at coordinates
  74. """
  75. print("Drawing", color_names[color], "at", x, y)
  76. self.last = self._draw(x,y)
  77. if self.greedy:
  78. while self.last.status_code == 429:
  79. json = self.last.json()
  80. if "wait_seconds" in json:
  81. wait=json["wait_seconds"]
  82. print("Waiting: {}s".format(wait))
  83. sleep(wait)
  84. else:
  85. sleep(1)
  86.  
  87. if self.get(x, y)['color'] == color:
  88. print("Color drawn while waiting.")
  89. break
  90.  
  91. self.last = self._draw(x,y, color)
  92. print("Drew", color_names[color], "at", x, y)
  93. return self.last.json()
  94.  
  95. topleft=(0,332)
  96. picture="""
  97. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  98. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  99. bwwwwwwbwwwwwbwwwwwwbwwbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  100. bwwwwwwbwwwwwbwwwwwwbwwbbbbbbbwwbbbwwbbbbbbbbbbbbbb
  101. bwwbbwwbwwbbbbwwbbbbbwwbbbbbbbwwbbbwwbbbbbbbbbbbbbb
  102. bwwbbwwbwwbbbbwwbbbbbwwbwwwwwbwwwwbwwwwbwwwwwbwwwwb
  103. bwwbbbbbwwwwwbwwwwwwbwwbwwwwwbwwwwbwwwwbwwwwwbwwwwb
  104. bwwbbbbbwwwwwbwwwwwwbwwbwwbwwbwwbbbwwbbbwwbwwbwwbbb
  105. bwwbbwwbwwbbbbbbbbwwbwwbwwwwwbwwbbbwwbbbwwwwwbwwbbb
  106. bwwbbwwbwwbbbbbbbbwwbwwbwwbbbbwwbbbwwbbbwwbbbbwwbbb
  107. bwwwwwwbwwwwwbwwwwwwbwwbwwwwwbwwwwbwwwwbwwwwwbwwbbb
  108. bwwwwwwbwwwwwbwwwwwwbwwbwwwwwbwwwwbwwwwbwwwwwbwwbbb
  109. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  110. bbbbbbbbbbwbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  111. bbbbbbbbbwbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  112. bbbbwwwbbwbwwwbwbwbwwwwwbwwwbwwwbwwwwwbwwwbwwwbbbbb
  113. bbbbwbwbwbbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbbbbb
  114. bbbbwbbbwbbwwwbbwbbwbwbwbwbwbwbbbwbwbwbwbwbwbwbbbbb
  115. bbbbwbbwbbbwbbbwbwbwbwbwbwbwbwbbbwbwbwbwbwbwbwbbbbb
  116. bbbbwbwbbbbwwwbwbwbwbwbwbwwwbwbbbwbwbwbwwwbwbwbbbbb
  117. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"""[1:].splitlines()
  118.  
  119. height = len(picture)
  120. width =len(picture[0])
  121.  
  122. colors = {'g': 2, 'b': 3, 'w': 0}
  123.  
  124.  
  125. print('Reddit Username: ', end='')
  126. username = input()
  127.  
  128. password = getpass('Reddit Password: ')
  129.  
  130. p = Place(username, password, greedy=True)
  131.  
  132. while True:
  133. try:
  134. stop = False
  135. for dx in range(width):
  136. for dy in range(height):
  137. x = dx + topleft[0]
  138. y = dy + topleft[1]
  139. pixel = p.get(x, y)
  140. desired_color = picture[dy][dx]
  141. #print(x, y, pixel, desired_color, colors[desired_color])
  142. if pixel['color'] != colors[desired_color]:
  143. p.draw(x, y, colors[desired_color])
  144. stop = True
  145. break
  146. if stop:
  147. break
  148. sleep(1)
  149. except Exception as e:
  150. print("There was an exception: ", str(e))
  151. print("Execution continuing as normal.")
Add Comment
Please, Sign In to add comment