-
-
Notifications
You must be signed in to change notification settings - Fork 82
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Новый эндпоинт download-info #566
Comments
@glebliutsko А какой старый эндпоинт был на download info? |
Тот же самый кстати. Щас потестил. Если Причем приложение не использует |
@glebliutsko Которое приложение кстати смотришь? Чтобы я потом глянул как они подпись строят. Ведро или винда? |
Ведро |
|
Мне кажется можно оставть два. Кому-то и hls может пригодится. Тем более отличаются только параметрами |
Отреверсил подпись. Объяснять лень, поэтому вот код #!/usr/bin/python3
from datetime import datetime
import hmac
import hashlib
import base64
import requests
SECRET = 'p93jhgh689SBReK6ghtw62'
TRACK_ID = '108235280'
TIMESTAMP = int(datetime.now().timestamp())
hmac_sign = hmac.new(SECRET.encode('utf-8'), f'{TRACK_ID}{TIMESTAMP}'.encode('utf-8'), hashlib.sha256)
sign = base64.b64encode(hmac_sign.digest()).decode('utf-8')
print(TIMESTAMP)
print(sign)
print('-' * 15)
p = {'can_use_streaming': 'true', 'ts': TIMESTAMP, 'sign': sign}
h = {
'Authorization': 'TOP SECRET',
'X-Yandex-Music-Client': 'YandexMusicAndroid/24022571'
}
resp = requests.get(f'https://api.music.yandex.net/tracks/{TRACK_ID}/download-info', params=p, headers=h)
print(resp.text) |
Вопрос: переменная SECRET как-то изменяется, или она постоянная? |
@Ktilis Всегда была постоянной если говорить про текущую реализацию |
@glebliutsko Супер, спасибо! Полезная информация |
@Ktilis постоянная, она захардкоженна. Ну точнее как захардкожена. Там такой метод. public static String m13133if() {
return kx5.m15650goto() ? "OsXPlRyQHP39vlrJjTDYd6" : kx5.m15653this() ? "Me0wlJDNpnE0joknU0YLUF" : "p93jhgh689SBReK6ghtw62";
} Не знаю что делают |
Потыкал я в дебагере. Результаты такие Вот эти два метода public static String f17354if;
public static final boolean m27504goto() {
String str = f17354if;
if (str != null) {
return ln7.m7493do(str, "yauto");
}
ln7.m28062final("platformFlavor");
throw null;
}
public static final boolean m27506this() {
String str = f17354if;
if (str != null) {
return ln7.m7493do(str, "yango");
}
ln7.m28062final("platformFlavor");
throw null;
}
public static boolean m7493do(Object obj, Object obj2) {
return obj == null ? obj2 == null : obj.equals(obj2);
} Свойство kx5.f17353do = "prod";
kx5.f17354if = "gplay";
kx5.f61253for = "release"; Видимо у них разные ключи в зависимости от сборки
Думаю если всегда использовать в заголовках |
Эндпоинт
Параметры
URL-параметры:
GET-параметры
Ответ
Массив из объектов
Пример запроса-ответа
Запрос
Ответ
Ответ
The text was updated successfully, but these errors were encountered: