sign_request.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import base64
  2. import datetime
  3. import hashlib
  4. import hmac
  5. from dataclasses import dataclass
  6. from typing import Union
  7. from yandex_music.utils.convert_track_id import convert_track_id_to_number
  8. DEFAULT_SIGN_KEY = 'p93jhgh689SBReK6ghtw62'
  9. """:obj:`str`: Ключ для подписи из Android приложения."""
  10. @dataclass
  11. class Sign:
  12. """Подпись запроса.
  13. Attributes:
  14. timestamp (:obj:`int`): Время создания подписи.
  15. value (:obj:`str`): Подпись.
  16. """
  17. timestamp: int
  18. value: str
  19. def get_sign_request(track_id: Union[int, str], key: str = DEFAULT_SIGN_KEY) -> Sign:
  20. """Создает подпись для запроса.
  21. Args:
  22. track_id (:obj:`str` | :obj:`int`): Уникальный идентификатора трека.
  23. key (:obj:`str`, optional): Ключ для подписи.
  24. Returns:
  25. :obj:`Sign`: Подпись.
  26. """
  27. track_id = convert_track_id_to_number(track_id)
  28. timestamp = int(datetime.datetime.now().timestamp())
  29. message = f'{track_id}{timestamp}'
  30. hmac_sign = hmac.new(key.encode('UTF-8'), message.encode('UTF-8'), hashlib.sha256).digest()
  31. sign = base64.b64encode(hmac_sign).decode('UTF-8')
  32. return Sign(timestamp, sign)