Управление плеером Yandex.Music в OSX, используя клавиатуру без медиа клавиш

в 19:18, , рубрики: applescript, MacOS, OS X, osx

Недавно я принял решение развернуть в офисе на рабочем компьютере Hackintosh. Все получилось. Единственное, что мне не нравилось это отсутствие медиа клавиш на офисной клавиатуре. Ими я привык управлять музыкой, в том числе на сервисе Yandex.Music. Данная статья посвящена тому, как я исправил ситуацию.

image

Используем Apple Script для управления плеером

У AppleScript есть возможность «общаться» с приложениями которые его поддерживают, для этого в нем предусмотрена конструкция tell. В числе таких приложений браузер Google Chrome. Ниже показан пример того, как попросить Google Chrome отрыть URL в новой вкладке:

tell application "Google Chrome" 
	open location "https://music.yandex.ru"
end tell

Теперь рассмотрим пример посложнее, попросим Google Chrome выполнить JavaScript в активной вкладке:

tell application "Google Chrome"
    execute front window's active tab javascript "alert('example');"
end tell

В результате увидим следующую картину:

image

Теперь напишем JavaScript вызывающий событие click на необходимом элементе, к примеру, на кнопке next плеера Yanded.Music. Для этого используем querySelector:

document.querySelector('.player-controls__btn_next').click();

Осталось попросить Google Chrome выполнить этот скрипт на вкладке с открытым Yandex.Music. Для этого, сначала находим необходимую вкладку:

tell application "Google Chrome"
    -- пробегаем по каждому открытому окну
    repeat with _w in (every window) 
        -- по каждой вкладке название которой содержит music.yandex.ru
        repeat with _t in (every tab whose URL contains "music.yandex.ru") of _w
            -- здесь далее будет наш код нажатия на кнопку
        end repeat
    end repeat
end tell

Затем просим выполнить на найденной вкладке наш скрипт:

tell application "Google Chrome"
    -- пробегаем по каждому открытому окну
    repeat with _w in (every window) 
        -- по каждой вкладке название которой содержит music.yandex.ru
        repeat with _t in (every tab whose URL contains "music.yandex.ru") of _w. 
            set s to "document.querySelector('.player-controls__btn_next').click();"
            tell _t to execute javascript s
        end repeat
    end repeat
end tell

В этом примере мы ищем div, класс которого '.player-controls__btn_next'. Чтобы выполнить другие действия, например приостановить воспроизведение, необходимо создать такой же AppleScript, но с селектором '.player-controls__btn_pause'. Необходимо понимать, что если Yandex изменит название класса, то в applescript его тоже необходимо будет поменять.

Вот и все, для того чтобы выполнить AppleScript по нажатию горячих клавиш, создаем сервис в Automator. Про то, как это сделать существует множество статей в интернете.

Готовые workflow для Automator вы можете скачать здесь:

P. S. Для того, чтобы описанное выше заработало в Safari, необходимо в скрипте заменить слово “execute” на слово “do”.

P. P. S. В плеерах вроде iTunes все проще. Они понимают команды типа play/pause

tell application "iTunes" to playpause

Автор: Артём Савкин

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js