Client.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import asyncio
  2. from webbot.webbot import Browser
  3. import time
  4. import requests
  5. from requests_futures import sessions
  6. import re
  7. class RRBotException(Exception):
  8. pass
  9. class Client:
  10. def __init__(self, login_method, username, password, expires=None, show_window=False):
  11. self.login_method = login_method
  12. self.username = username
  13. self.password = password
  14. self.expires = expires
  15. self.session_id = None
  16. self.c = None
  17. self.show_window = show_window
  18. if login_method in ["g", "google", "v", "vk", "f", "facebook"]:
  19. self.login()
  20. else:
  21. raise RRBotException("Not a valid login method.")
  22. def login(self):
  23. login_method = self.login_method
  24. self.s = requests.Session()
  25. auth_text = requests.get("http://rivalregions.com").text
  26. web = Browser(showWindow=self.show_window)
  27. if login_method == ("g" or "google"):
  28. auth_text1 = auth_text.split('\t<a href="')
  29. auth_text2 = auth_text1[1].split('" class="sa')
  30. web.go_to(auth_text2[0])
  31. web.type(self.username, into='Email')
  32. web.click('Next')
  33. time.sleep(5)
  34. web.type(self.password, into='Password')
  35. web.click('Next')
  36. time.sleep(5)
  37. web.click(css_selector=".sa_sn.float_left.imp.gogo")
  38. time.sleep(5)
  39. elif login_method == ("v" or "vk"):
  40. auth_text1 = auth_text.split("(\'.vkvk\').attr(\'url\', \'")
  41. auth_text2 = auth_text1[1].split('&response')
  42. web.go_to(auth_text2[0])
  43. web.type(self.username, into='email')
  44. web.type(self.password, xpath="/html/body/div/div/div/div[2]/form/div/div/input[7]")
  45. web.click('Log in')
  46. time.sleep(5)
  47. elif login_method == ("f" or "facebook"):
  48. auth_text1 = auth_text.split('">\r\n\t\t\t\t<div class="sa_sn imp float_left" ')
  49. auth_text2 = auth_text1[0].split('200px;"><a class="sa_link" href="')
  50. url = auth_text2[1]
  51. web.go_to(url)
  52. web.type(self.username, into='Email')
  53. web.type(self.password, into='Password')
  54. web.click('Log In')
  55. time.sleep(5)
  56. web.click(css_selector='.sa_sn.imp.float_left')
  57. time.sleep(5)
  58. sessid = web.get_cookie('PHPSESSID')
  59. expires = sessid.get('expiry', None)
  60. sessid.pop('expiry', None)
  61. sessid.pop('httpOnly', None)
  62. sessid['expires'] = expires
  63. web.close_current_tab()
  64. self.expires = expires
  65. self.session_id = sessid
  66. self.s.cookies.set(**sessid)
  67. self.set_c()
  68. def set_c(self):
  69. r = self.s.get('http://rivalregions.com/#overview')
  70. lines = r.text.split("\n")
  71. for line in lines:
  72. if re.match("(.*)var c_html(.*)", line):
  73. self.c = line.split("'")[-2]
  74. return
  75. def create_article(self, title, article, article_lang="en", paper_id=0, category='0', region="4524"):
  76. r = self.s.get('http://rivalregions.com/#overview')
  77. r = self.s.post("http://rivalregions.com/news/post", data={"c":self.c,
  78. 'newspaper': paper_id,
  79. 'category': category,
  80. 'paper': article,
  81. 'title': title,
  82. 'region': region})
  83. #f"lang={article_lang}&newspaper={paper_id}&category={category}&paper={article}&title={title}&region={region}&c={self.c}")
  84. print(r.text)
  85. async def do_something(self):
  86. #TODO Get some request done
  87. pass