Browse Source

+ few comments

main
Fsoky 4 years ago
parent
commit
c927e80558
  1. 26
      donationalerts_api.py

26
donationalerts_api.py

@ -6,6 +6,7 @@ import socketio
class Scopes: class Scopes:
"""Удобный класс, для простого указания прав в приложении"""
USER_SHOW = "oauth-user-show" USER_SHOW = "oauth-user-show"
@ -22,6 +23,7 @@ class Scopes:
class Channels: class Channels:
"""Права для подписки на каналы Centrifugo"""
NEW_DONATION_ALERTS = "$alerts:donation_" NEW_DONATION_ALERTS = "$alerts:donation_"
@ -33,9 +35,7 @@ class Channels:
class DonationAlertsApi: class DonationAlertsApi:
""" """Основной класс для работы с DA API"""
This class describes work with Donation Alerts API
"""
def __init__(self, client_id, client_secret, redirect_uri, scopes): def __init__(self, client_id, client_secret, redirect_uri, scopes):
symbols = [",", ", ", " ", "%20"] symbols = [",", ", ", " ", "%20"]
@ -68,9 +68,15 @@ class DonationAlertsApi:
return self.login_url return self.login_url
def get_code(self): def get_code(self):
return request.args.get("code") return request.args.get("code") # Получаем аргмент "code" из адресной строки
def get_access_token(self, code, full=False): def get_access_token(self, code, full=False):
""" Параметр full=False
Если True, то выводит весь json объект, а не только access_token
"""
payload = { payload = {
"client_id": self.client_id, "client_id": self.client_id,
"client_secret": self.client_secret, "client_secret": self.client_secret,
@ -136,6 +142,7 @@ class DonationAlertsApi:
class Centrifugo: class Centrifugo:
"""Получение событий в реальном времени (Oauth2)"""
def __init__(self, socket_connection_token, access_token, user_id): def __init__(self, socket_connection_token, access_token, user_id):
self.socket_connection_token = socket_connection_token self.socket_connection_token = socket_connection_token
@ -145,7 +152,7 @@ class Centrifugo:
self.uri = "wss://centrifugo.donationalerts.com/connection/websocket" self.uri = "wss://centrifugo.donationalerts.com/connection/websocket"
def connect(self): def connect(self):
self.ws = create_connection(self.uri) self.ws = create_connection(self.uri) # Подключаемся к серверу
self.ws.send(json.dumps( self.ws.send(json.dumps(
{ {
"params": { "params": {
@ -189,18 +196,19 @@ class Centrifugo:
)) ))
answer = {"response": self.ws.recv(), "sec_response": self.ws.recv()} answer = {"response": self.ws.recv(), "sec_response": self.ws.recv()}
return answer return answer # Возвращаем первые два ответа от сервера
def listen(self): def listen(self):
return json.loads(self.ws.recv())["result"]["data"]["data"] return json.loads(self.ws.recv())["result"]["data"]["data"] # Возвращаем 3-й ответ от сервера
sio = socketio.Client() sio = socketio.Client()
class Alert: class Alert:
"""Получение донатов в реальном времени без Oauth2"""
def __init__(self, token): def __init__(self, token):
self.token = token self.token = token # TOKEN можно скопировать здесь - https://www.donationalerts.com/dashboard/general
def event(self): def event(self):
def wrapper(function): def wrapper(function):
@ -210,7 +218,7 @@ class Alert:
@sio.on("donation") @sio.on("donation")
def on_message(data): def on_message(data):
function(json.loads(data)) function(json.loads(data)) # Отправляем полученные данные в функцию
sio.connect("wss://socket.donationalerts.ru:443", transports="websocket") sio.connect("wss://socket.donationalerts.ru:443", transports="websocket")
return wrapper return wrapper
Loading…
Cancel
Save