Explorar o código

Added:
- all login methods (vk & fb untested)
- method to get c_html value
- test for login

Seems to be working.

Innominatus %!s(int64=6) %!d(string=hai) anos
pai
achega
80a5d2fe52
Modificáronse 3 ficheiros con 103 adicións e 0 borrados
  1. 94 0
      Client.py
  2. 2 0
      requirements.txt
  3. 7 0
      testing/test_login.py

+ 94 - 0
Client.py

@@ -0,0 +1,94 @@
+import asyncio
+from webbot.webbot import Browser
+import time
+import requests
+from requests_futures import sessions
+import re
+
+class RRBotException(Exception):
+    pass
+
+
+class Client:
+    def __init__(self, login_method, username, password, expires=None):
+        self.login_method = login_method
+        self.username = username
+        self.password = password
+        self.expires = expires
+        self.session_id = None
+
+        if login_method in ["g", "google", "v", "vk", "f", "facebook"]:
+            self.login()
+        else:
+            raise RRBotException("Not a valid login method.")
+
+
+    def login(self):
+        login_method = self.login_method
+        self.s = sessions.FuturesSession()
+        auth_text = requests.get("http://rivalregions.com").text
+        web = Browser(showWindow=False)
+        if login_method == ("g" or "google"):
+            auth_text1 = auth_text.split('\t<a href="')
+            auth_text2 = auth_text1[1].split('" class="sa')
+
+            web.go_to(auth_text2[0])
+            web.type(self.username, into='Email')
+            web.click('Next')
+            time.sleep(5)
+            web.type(self.password, into='Password')
+            web.click('Next')
+            time.sleep(5)
+
+            web.click(css_selector=".sa_sn.float_left.imp.gogo")
+            time.sleep(5)
+        elif login_method == ("v" or "vk"):
+            auth_text1 = auth_text.split("(\'.vkvk\').attr(\'url\', \'")
+            auth_text2 = auth_text1[1].split('&response')
+            web = Browser(showWindow=False)
+
+            web.go_to(auth_text2[0])
+            web.type(self.username, into='email')
+            web.type(self.password, xpath="/html/body/div/div/div/div[2]/form/div/div/input[7]")
+            web.click('Log in')
+            time.sleep(5)
+
+        elif login_method == ("f" or "facebook"):
+            auth_text1 = auth_text.split('">\r\n\t\t\t\t<div class="sa_sn imp float_left" ')
+            auth_text2 = auth_text1[0].split('200px;"><a class="sa_link" href="')
+            url = auth_text2[1]
+
+            web.go_to(url)
+            web.type(self.username, into='Email')
+            web.type(self.password, into='Password')
+            web.click('Log In')
+            time.sleep(5)
+            web.click(css_selector='.sa_sn.imp.float_left')
+            time.sleep(5)
+
+        sessid = web.get_cookie('PHPSESSID')
+
+        expires = sessid.get('expiry', None)
+        sessid.pop('expiry', None)
+        sessid.pop('httpOnly', None)
+        sessid['expires'] = expires
+
+        web.close_current_tab()
+        self.expires = expires
+        self.session_id = sessid
+        self.s.cookies.set(**sessid)
+        self.set_c()
+
+    def set_c(self):
+        r = self.s.get('http://rivalregions.com/#overview')
+        response = r.result()
+        lines = response.text.split("\n")
+        for line in lines:
+            if re.match("(.*)var c_html(.*)", line):
+                self.c = line.split("'")[-2]
+                return
+
+    async def do_something(self):
+        #TODO Get some request done
+        pass
+

+ 2 - 0
requirements.txt

@@ -0,0 +1,2 @@
+requests_futures
+webbot

+ 7 - 0
testing/test_login.py

@@ -0,0 +1,7 @@
+from Client import Client
+user = input("User: ")
+passw = input("Pass: ")
+method = input("Method: ")
+
+cli = Client(method, user, passw)
+print(cli.c)