mirror of
https://github.com/exituser/prosto-sms-python.git
synced 2026-09-17 03:48:57 +00:00
80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
from typing import Optional
|
|
|
|
import requests
|
|
from loguru import logger
|
|
|
|
from . import exceptions
|
|
from . import methods
|
|
|
|
|
|
class API:
|
|
"""
|
|
Main api class
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
email: str = None,
|
|
password: str = None,
|
|
key: str = None
|
|
):
|
|
"""
|
|
Initializing the API
|
|
|
|
:param email: account email address
|
|
:param password: account password
|
|
:param key: api key
|
|
"""
|
|
|
|
self.email = email
|
|
self.password = password
|
|
self.key = key
|
|
self.api_url = "https://ssl.bs00.ru"
|
|
self.methods = methods.Methods(self)
|
|
|
|
def request(self, method: str, data: dict = None) -> Optional[dict]:
|
|
"""
|
|
Method for requesting information
|
|
|
|
:param method: required method
|
|
:param data: request parameters
|
|
:return: response data
|
|
"""
|
|
|
|
if data is None:
|
|
data = {}
|
|
|
|
data["format"] = "json"
|
|
if not data.get("method"):
|
|
data["method"] = method
|
|
|
|
if self.key and not (self.email and self.password):
|
|
data["key"] = self.key
|
|
elif (self.email and self.password) and not self.key:
|
|
data["email"] = self.email
|
|
data["password"] = self.password
|
|
else:
|
|
raise exceptions.NoAuthData(
|
|
"email and password OR key is required"
|
|
)
|
|
|
|
try:
|
|
result = requests.get(
|
|
url=self.api_url,
|
|
params=data,
|
|
timeout=30
|
|
)
|
|
result.raise_for_status()
|
|
|
|
result = result.json()
|
|
except Exception as err:
|
|
logger.exception(err)
|
|
return
|
|
|
|
if result["response"]["msg"].get("type") == "error":
|
|
raise exceptions.ApiError(
|
|
result["response"]["msg"]["text"]
|
|
)
|
|
|
|
return result["data"]
|