
Однажды сидя за работой и параллельно слушая музыку на своей Яндекс станции, я обнаружил для себя интересную вещь - я не могу просто взять и переключить трек. Вы спросите: "Как так могло получится?", а я отвечу - вчера я сорвал голос в ожесточенной политической баталии, а телефон, как назло, лежал дальше, чем я мог бы дотянутся. В итоге такая неудачная ситуация побудила меня к созданию очередного велосипеда.
Взаимодействие со станцией
Первым делом я, как думаю и любой другой на моем месте, пошел гуглить. Я искал информацию как по уже существующим решениям, так и по всевозможным документациям и описаниям API. В итоге поиски привели меня лишь к модулю для Home Assistant, которым я, к своему сожалению, не пользуюсь. Однако данная реализация в значительной степени помогла понять как управлять станцией из кода. Во первых, есть два способа взаимодействия:
-
Не самый удобный (ИМХО) websocket API
-
Закрытый и почти не задокументированный HTTP API
По итогу размышлений мною был выбран HTTP API, поскольку он проще в реализации и может работать из любой сети.
Собственно реализация
Дальше не было ничего особенно сложного, как и с любым другим закрытым API пришлось сделать вход через логин и пароль, с последующим вытаскиванием cookie из сессии. После входа доставался список устройств и для выбранной колонки создавалась пачка сценариев для дальнейшего взаимодействия. В итоге на данный момент возможен вызов нескольких базовых действий:
-
Старт (запуск избранной музыки)
-
Стоп
-
Следующий трек
-
Предыдущий трек
-
Тише
-
Громче
-
Включи песню (включает песню после ввода названия)
В планах добавление некоторого функционала, на который не способна даже сама станция - например очередь воспроизведения. Исходный код вы можете найти на github
Автор: Белоусов Дмитрий