2121RE_CAPTCHAID = re .compile (r'sid=(\d+)' )
2222RE_NUMBER_HASH = re .compile (r'security_check.*?hash: \'(.*?)\'\};' )
2323RE_TOKEN_URL = re .compile (r'location\.href = "(.*?)"\+addr;' )
24+
2425RE_PHONE_PREFIX = re .compile (r'phone_number">(.*?)<' )
25- RE_PHONE_POSTFIX = re .compile (r'phone_postfix">(.*?)<' )
26+ RE_PHONE_PREFIX_2 = re .compile (r'label ta_r">\+(\d+)' )
27+ RE_PHONE_POSTFIX = re .compile (r'phone_postfix">.*?(\d+).*?<' )
2628
2729
2830class VkApi (object ):
2931
30- def __init__ (self , login = None , password = None , number = None , token = None ,
32+ def __init__ (self , login = None , password = None , number = None , sec_number = None ,
33+ token = None ,
3134 proxies = None , captcha_handler = None , config_filename = None ,
3235 api_version = '5.24' , app_id = 2895443 , scope = 2097151 ):
3336 """
3437 :param login: Логин ВКонтакте
3538 :param password: Пароль ВКонтакте
3639 :param number: Номер для проверке безопасности (указывать, если
3740 в качестве логина используется не номер)
41+ :param sec_number:
3842
3943 :param token: access_token
4044 :param proxies: proxy server
@@ -51,6 +55,7 @@ def __init__(self, login=None, password=None, number=None, token=None,
5155 self .login = login
5256 self .password = password
5357 self .number = number
58+ self .sec_number = sec_number
5459
5560 self .sid = None
5661 self .token = {'access_token' : token }
@@ -151,12 +156,17 @@ def security_check(self, url=None, response=None):
151156 if 'security_check' not in response .url :
152157 return
153158
154- phone_prefix = search_re (RE_PHONE_PREFIX , response .text ).strip ()
155- phone_postfix = search_re (RE_PHONE_POSTFIX , response .text ).strip ()
159+ phone_prefix = search_re (RE_PHONE_PREFIX , response .text )
160+ if not phone_prefix :
161+ phone_prefix = search_re (RE_PHONE_PREFIX_2 , response .text )
162+
163+ phone_postfix = search_re (RE_PHONE_POSTFIX , response .text )
156164
157- if self .number :
165+ if self .sec_number :
166+ code = self .sec_number
167+ elif self .number :
158168 code = code_from_number (phone_prefix , phone_postfix , self .number )
159- else :
169+ elif self . login :
160170 code = code_from_number (phone_prefix , phone_postfix , self .login )
161171
162172 if code :
@@ -340,19 +350,19 @@ def doc(method=None):
340350
341351def search_re (reg , string ):
342352 """ Поиск по регулярке """
343- m = reg .search (string )
344- groups = m .groups ()
353+ s = reg .search (string )
345354
346- if groups :
355+ if s :
356+ groups = s .groups ()
347357 return groups [0 ]
348358
349359
350360def code_from_number (phone_prefix , phone_postfix , number ):
351361 prefix_len = len (phone_prefix )
352362 postfix_len = len (phone_postfix )
353363
354- if number [0 ] ! = '+' :
355- number = '+' + number
364+ if number [0 ] = = '+' :
365+ number = number [ 1 :]
356366
357367 if (prefix_len + postfix_len ) >= len (number ):
358368 return
0 commit comments