87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
|
import re
|
|||
|
from bs4 import BeautifulSoup
|
|||
|
from requests import Session
|
|||
|
|
|||
|
|
|||
|
def _findData(soup):
|
|||
|
for tag in soup.find_all("script"):
|
|||
|
contents = tag.contents
|
|||
|
for content in contents:
|
|||
|
if "sentryData" in content:
|
|||
|
return content
|
|||
|
|
|||
|
|
|||
|
def _checkStatus(err, url):
|
|||
|
if not err.status_code:
|
|||
|
return {"error": {"error_code": -102,
|
|||
|
"error_msg": f"Возникла ошибка при отправке запроса по ссылке {url}"}}
|
|||
|
if err.status_code >= 400:
|
|||
|
return {"error": {"error_code": -102,
|
|||
|
"error_msg": f"Возникла ошибка {err.status_code} при отправке запроса по ссылке {url}"}}
|
|||
|
else:
|
|||
|
return {"answer": "Ok",
|
|||
|
"result": True}
|
|||
|
|
|||
|
|
|||
|
def _checkSubdomain(subdomain):
|
|||
|
subdomain = re.search(r"[a-zA-Z0-9]+", subdomain)
|
|||
|
if not subdomain:
|
|||
|
return {"error": {"error_code": -101,
|
|||
|
"error_msg": "Поддомен не найден"}}
|
|||
|
else:
|
|||
|
return subdomain[0]
|
|||
|
|
|||
|
|
|||
|
def _checkInstance(obj, cls):
|
|||
|
if not isinstance(obj, cls):
|
|||
|
return {"error": {"error_code": -201,
|
|||
|
"error_msg": f"Экземпляр не пренадлежит к классу. {type(obj)} - {type(cls)}"}}
|
|||
|
else:
|
|||
|
return {"answer": "Ok",
|
|||
|
"result": True}
|
|||
|
|
|||
|
|
|||
|
def _fullCheck(subdomain, session, url, data=None):
|
|||
|
subdomain = _checkSubdomain(subdomain)
|
|||
|
if "error" in subdomain:
|
|||
|
return subdomain
|
|||
|
|
|||
|
checkSession = _checkInstance(session, Session)
|
|||
|
if "error" in checkSession:
|
|||
|
return checkSession
|
|||
|
del checkSession
|
|||
|
|
|||
|
getInfo = session.post(url=url, data=data)
|
|||
|
|
|||
|
checkStatus = _checkStatus(getInfo, url)
|
|||
|
if "error" in checkStatus:
|
|||
|
return checkStatus
|
|||
|
del checkStatus
|
|||
|
|
|||
|
soup = BeautifulSoup(getInfo.text, 'lxml')
|
|||
|
del getInfo, url
|
|||
|
|
|||
|
sentryData = _findData(soup)
|
|||
|
if not sentryData:
|
|||
|
return {"error": {"error_code": -104,
|
|||
|
"error_msg": "Данные о пользователе не найдены."}}
|
|||
|
del sentryData
|
|||
|
|
|||
|
return soup
|
|||
|
|
|||
|
|
|||
|
def _smallCheck(subdomain, session, args):
|
|||
|
subdomain = _checkSubdomain(subdomain)
|
|||
|
if "error" in subdomain:
|
|||
|
return subdomain
|
|||
|
|
|||
|
checkSession = _checkInstance(session, Session)
|
|||
|
if "error" in checkSession:
|
|||
|
return checkSession
|
|||
|
del checkSession
|
|||
|
|
|||
|
checkDict = _checkInstance(args, dict)
|
|||
|
if "error" in checkDict:
|
|||
|
return checkDict
|
|||
|
del checkDict
|