99"""
1010
1111import re
12- import time
1312import threading
13+ import time
1414
1515import requests
1616
1717import jconfig
18+ from .utils import doc , code_from_number , search_re , clean_string
1819
1920DELAY = 0.34 # ~3 requests per second
2021TOO_MANY_RPS_CODE = 6
2930RE_AUTH_HASH = re .compile (r"hash: '([a-z_0-9]+)'" )
3031RE_TOKEN_URL = re .compile (r'location\.href = "(.*?)"\+addr;' )
3132
32- RE_PHONE_PREFIX = re .compile (r'phone_number">(.*?)<' )
33- RE_PHONE_PREFIX_2 = re .compile (r'label ta_r">\+(\d+)' )
33+ RE_PHONE_PREFIX = re .compile (r'label ta_r">\+(.*?)<' )
3434RE_PHONE_POSTFIX = re .compile (r'phone_postfix">.*?(\d+).*?<' )
3535
3636
@@ -134,6 +134,7 @@ def vk_login(self, captcha_sid=None, captcha_key=None):
134134 response = self .http .get ('https://vk.com/' )
135135
136136 values = {
137+ 'act' : 'login' ,
137138 'role' : 'al_frame' ,
138139 '_origin' : 'https://vk.com' ,
139140 'utf8' : '1' ,
@@ -148,18 +149,16 @@ def vk_login(self, captcha_sid=None, captcha_key=None):
148149 'captcha_key' : captcha_key
149150 })
150151
151- response = self .http .post ('https://login.vk.com/?act=login' , values )
152-
153- remixsid = None
152+ response = self .http .post ('https://login.vk.com/' , values )
154153
155154 if 'act=authcheck' in response .url : # TODO: test/fix
156155 code , remember_device = self .error_handlers [TWOFACTOR_CODE ]()
157156 response = self .twofactor (response , code , remember_device )
158157
159- if ' remixsid' in self . http . cookies :
160- remixsid = self .http .cookies [ 'remixsid' ]
161- elif 'remixsid6' in self .http .cookies : # ipv6?
162- remixsid = self . http . cookies [ 'remixsid6' ]
158+ remixsid = (
159+ self .http .cookies . get ( 'remixsid' ) or
160+ self .http .cookies . get ( 'remixsid6' )
161+ )
163162
164163 if remixsid :
165164 self .settings .remixsid = remixsid
@@ -228,11 +227,8 @@ def security_check(self, response=None):
228227 if 'security_check' not in response .url :
229228 return
230229
231- phone_prefix = search_re (RE_PHONE_PREFIX , response .text )
232- if not phone_prefix :
233- phone_prefix = search_re (RE_PHONE_PREFIX_2 , response .text )
234-
235- phone_postfix = search_re (RE_PHONE_POSTFIX , response .text )
230+ phone_prefix = clean_string (search_re (RE_PHONE_PREFIX , response .text ))
231+ phone_postfix = clean_string (search_re (RE_PHONE_POSTFIX , response .text ))
236232
237233 code = None
238234 if self .sec_number :
@@ -461,51 +457,6 @@ def get_doc(self):
461457 doc (self ._method )
462458
463459
464- def doc (method = None ):
465- """ Открывает документацию на метод или список всех методов
466-
467- :param method: метод
468- """
469-
470- if not method :
471- method = 'methods'
472-
473- url = 'https://vk.com/dev/{}' .format (method )
474-
475- import webbrowser
476- webbrowser .open (url )
477-
478-
479- def search_re (reg , string ):
480- """ Поиск по регулярке """
481- s = reg .search (string )
482-
483- if s :
484- groups = s .groups ()
485- return groups [0 ]
486-
487-
488- def code_from_number (phone_prefix , phone_postfix , number ):
489- prefix_len = len (phone_prefix )
490- postfix_len = len (phone_postfix )
491-
492- if number [0 ] == '+' :
493- number = number [1 :]
494-
495- if (prefix_len + postfix_len ) >= len (number ):
496- return
497-
498- # Сравниваем начало номера
499- if not number [:prefix_len ] == phone_prefix :
500- return
501-
502- # Сравниваем конец номера
503- if not number [- postfix_len :] == phone_postfix :
504- return
505-
506- return number [prefix_len :- postfix_len ]
507-
508-
509460class AuthorizationError (Exception ):
510461 pass
511462
0 commit comments