Skip to content

Commit 2dca89c

Browse files
committed
VkApi.security_check: fix (?)
1 parent 0a6bbba commit 2dca89c

1 file changed

Lines changed: 21 additions & 11 deletions

File tree

vk_api/vk_api.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,24 @@
2121
RE_CAPTCHAID = re.compile(r'sid=(\d+)')
2222
RE_NUMBER_HASH = re.compile(r'security_check.*?hash: \'(.*?)\'\};')
2323
RE_TOKEN_URL = re.compile(r'location\.href = "(.*?)"\+addr;')
24+
2425
RE_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

2830
class 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

341351
def 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

350360
def 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

Comments
 (0)