Giter Club home page Giter Club logo

hass-yandex-music-browser's Introduction

Браузер медиа для плагина Yandex Station

Включайте музыку, плейлисты и радио на Яндекс.Станции из Home Assistant!

hacs_badge Лицензия Поддержка

Пожертвование Yandex Пожертвование PayPal

Скриншот

Корневой раздел: Библиотека Библиотека
Раздел: Жанры Жанры
Раздел: Новые релизы Новые релизы
Работа компонента с плеером сторонней интеграции - Медиацентр Kodi:
Медиацентр Kodi

Введение

Проект вырос из Pull-request-а: AlexxIT/YandexStation#133.

Установка

⚠️ Для полноценной работы компонента сперва потребуется установить: AlexxIT/YandexStation и настроить авторизацию. Информация по установке и конфигурации доступна по ссылке.

Установка посредством HACS

👍 ️Рекомендованный способ

  1. Откройте HACS (через Extensions в боковой панели)
  2. Добавьте новый произвольный репозиторий:
    1. Выберите Integration (Интеграция) в качестве типа репозитория
    2. Введите ссылку на репозиторий: https://github.com/alryaz/hass-yandex-music-browser
    3. Нажмите кнопку Add (Добавить)
    4. Дождитесь добавления репозитория (занимает до 10 секунд)
    5. Теперь вы должны видеть доступную интеграцию Yandex Music Browser (Браузер Яндекс Музыки) в списке новых интеграций.
  3. Нажмите кнопку Install чтобы увидеть доступные версии
  4. Установите последнюю версию нажатием кнопки Install
  5. Перезапустите HomeAssistant

Вручную

⚠️ Не рекомендуется

Клонируйте репозиторий во временный каталог, затем создайте каталог custom_components внутри папки конфигурации вашего HomeAssistant (если она еще не существует). Затем переместите папку yandex_music_browser из папки custom_components репозитория в папку custom_components внутри папки конфигурации HomeAssistant. Пример (при условии, что конфигурация HomeAssistant доступна по адресу /mnt/homeassistant/config) для Unix-систем:

git clone https://github.com/alryaz/hass-yandex-music-browser.git hass-yandex-music-browser
mkdir -p /mnt/homeassistant/config/custom_components
mv hass-yandex-music-browser/custom_components/yandex_music_browser /mnt/homeassistant/config/custom_components/

Конфигурация

Из меню Интеграции

  1. Найдите интеграцию Yandex Music Browser (Браузер Яндекс Музыки) в списке интеграций
  2. Нажмите на найденную интеграцию
  3. Следуйте инструкциям на экране для завершения настройки

Используя configuration.yaml

  1. Добавьте yandex_music_browser: куда-нибудь в Ваш файл configuration.yaml (двоеточие на конце обязательно!)
  2. Перезапустите Home Assistant

Возможная конфигурация

# Конфигурация интеграции
yandex_music_browser:
  # Язык для отображения
  # Поддерживаемые языки:
  # - en: Английский (поддерживается интеграцией)
  # - ru: Русский (поддерживается интеграцией)
  # - uk: Украинский (поддерживается интеграцией)
  # - az: Азербайджанский
  # - be: Белорусский
  # - he: Иврит
  # - hy: Армянский
  # - ka: Грузинский
  # - kk: Казахский
  # - tr: Турецкий
  # - uz: Узбекский
  #
  # Языки, не поддерживаемые интеграцией, будут отображать контент на выбранном языке,
  # но элементы управления будут на английском.
  language: ru
  
  # Опции для меню браузера
  menu_options:
    # Предустановка: Новые релизы
    - new_releases
    
    # Создание папки в корне:
    - title: "Юзвери"
      image: "http://www.pngall.com/wp-content/uploads/2016/06/Nyan-Cat-Free-Download-PNG.png"
      items:
        - user(abcd.ef)  # Добавление по имени пользователя: [email protected]
        - user(#12345)  # Добавление по ID
        
        # Иерархия многоуровневая и многотипная.
        - title: "И их любимые альбомы"
          class: "albums"
          items:
            # На одном уровне может находиться сколько угодно объектов каких-либо типов.
            - album(10413482)  # Carpenter Brut - Blood Machines
            - album(448629)  # The Karaoke Machine Presents - Gwen Stefani
            - track(24945454)  # Five Finger Death Punch - Wrong Side of Heaven
Скиншоты результирующей иерархии
Корневой раздел Корневой раздел
Папка "Юзвери" Папка "Юзвери"
Папка "И их любимые альбомы" Папка "И их любимые альбомы"

Перечень доступных предустановок

Код Аргумент Вид аргумента Пример вызова
album r'\d+' Согласно REGEX-шаблону album(r'\d+')
artist r'\d+' Согласно REGEX-шаблону artist(r'\d+')
genre r'.+' Согласно REGEX-шаблону genre(r'.+')
genres None Обязательно без значения genres
mix_tag <mix_tag_id> Необязательный параметр mix_tag(<mix_tag_id>),
mix_tag
new_playlists None Обязательно без значения new_playlists
new_releases None Обязательно без значения new_releases
personal_mixes None Обязательно без значения personal_mixes
playlist r'(\d+:)?\d+' Согласно REGEX-шаблону playlist(r'(\d+:)?\d+')
radio <radio_id> Необязательный параметр radio(<radio_id>),
radio
track r'\d+' Согласно REGEX-шаблону track(r'\d+')
user <username>,
#<user_id>
Имя пользователя / UID user(abcd.ef),
user(#12345)
user_liked_albums <username>,
#<user_id>
Имя пользователя / UID user_liked_albums(abcd.ef),
user_liked_albums(#12345)
user_liked_artists <username>,
#<user_id>
Имя пользователя / UID user_liked_artists(abcd.ef),
user_liked_artists(#12345)
user_liked_playlists <username>,
#<user_id>
Имя пользователя / UID user_liked_playlists(abcd.ef),
user_liked_playlists(#12345)
user_liked_tracks <username>,
#<user_id>
Имя пользователя / UID user_liked_tracks(abcd.ef),
user_liked_tracks(#12345)
user_likes <username>,
#<user_id>
Имя пользователя / UID user_likes(abcd.ef),
user_likes(#12345)
user_playlists <username>,
#<user_id>
Имя пользователя / UID user_playlists(abcd.ef),
user_playlists(#12345)
yandex_mixes None Обязательно без значения yandex_mixes

Примечание: Вызовы к функции library (при фактической доступности таковой) невозможны. Это обусловлено внутренней обработкой иерархии. Вызовы library с числовым аргументом выполняют роль навигации по иерархии.

Что поддерживается

Проект поддерживает проигрывание почти всех типов медиа, которые получаемы библиотекой yandex-music.

Яндекс станции (Мини, колонки, и т.д.)

В локальном режиме

  • Треки (любые)
  • Альбомы (любые)
  • Плейлисты (любые)
  • Исполнители (любые)
  • Радио (некоторые не воспроизводятся / не отображаются)

В облачном режиме

В облачном режиме есть множество огрехов относительно воспроизведения. При этом, доступны:

  • Треки (некоторые; если трек не поддерживается, включится Skrillex...)
  • Альбомы (некоторые)
  • Плейлисты (только пользователя, авторизованного под станцией)
  • Исполнители (некоторые)
  • Радио (как повезёт!)

Другие плееры

Плееры, принимающие на вход ссылку в службу media_player.play_media, смогут воспроизводить треки.

Протестировано на следующих интеграциях:

  • kodi - открытие по ссылке работает
  • onkyo - открытие по ссылке работает

Также плееры могут перехватывать media_type == yandex. В качестве media_id будет использоваться тип и идентификатор объекта, к примеру: track:12345. Компонент попробует разобраться, что к чему.

hass-yandex-music-browser's People

Contributors

alryaz avatar skrashevich avatar theskillz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

hass-yandex-music-browser's Issues

Проблемы с добавлением интеграции

После установки интеграции по инструкции для HACS, при добавлении интеграции в меню Home Assistant, установка крутится несколько минут, после чего завершается с ошибкой "Не удалось загрузить мастер настройки". HA перезагружал.

Использую Home Assistant OS последней версии (свежая установка), развернута на Raspberry Pi 3B+. При этом уже установлены (и настроены, работают) интеграции Yandex.Station и Yandex Smart Home.

Ошибка при попытке воспроизведения плейлиста.

Трек из плейлиста воспроизводит, но при попытке воспроизвести плейлист появляется ошибка.

`Logger: homeassistant.components.websocket_api.http.connection
Source: components/squeezebox/media_player.py:486
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 08:58:18 (2 occurrences)
Last logged: 08:59:35

[139811790874992] Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 189, in handle_call_service
await hass.services.async_call(
File "/usr/src/homeassistant/homeassistant/core.py", line 1627, in async_call
task.result()
File "/usr/src/homeassistant/homeassistant/core.py", line 1664, in _execute_service
await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 204, in handle_service
await service.entity_service_call(
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 677, in entity_service_call
future.result() # pop exception if have
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 964, in async_request_call
await coro
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 714, in _handle_entity_call
await result
File "/config/custom_components/yandex_music_browser/patches/generic.py", line 84, in _patch_generic_async_play_media
return await object.getattribute(self, "async_play_media")(
File "/usr/src/homeassistant/homeassistant/components/squeezebox/media_player.py", line 486, in async_play_media
content = json.loads(media_id)
File "/usr/local/lib/python3.9/json/init.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python3.9/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/lib/python3.9/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
`

Интеграция оверрайдит список источников на вкладке Мультимедиа в HA 2022.5

Если интеграция активирована, то можно запустить мультимедиа только из нее, а из YandexStation нельзя.
Так должно быть:
image
А так открывается:
image
Проявляется только на медиаплеерах колонок Яндекса. На mpd работает нормально.

PLS закройте ишью если трабл в YandexStaion =)

Отображение не больше 20 альбомов

Добавил исполнителя из Яндекс.Музыки, в Мультимедиа он отобразился, но при переходе у него стоит только 20 альбомов, хотя их значительно больше. Как отобразить все альбомы исполнителя?

Поиск по альбомам, исполнителям и т.д.

Спасибо за компонент, круто. Получилось транслировать музыку на плеера из LogitechMediaServer.

Не пойму как (возможно ли) искать по каталогам с музыкой? В частности на первой странице появляются пункты:
Artists
Albums
Tracks
Playlists
Genres
Яндекс.Музыка

Захожу например в Albums, вываливает я так понимаю все имеющиеся альбомы, до буквы D, далее наверное ограничение какое то срабатывает. А остальные как?

В идеале нужен поиск по базе альбомов, треков, исполнителей.

Интеграция перестала работать?

Есть ощущение, что Яндекс ужесточает использование своих сервисов.
Яндекс браузер - не исключение: у меня также перестали работать Yandex Maps, Yandex Transport.

У всех так? Это привет нам от Алексея Кудрина? )))

Не открывает понравившиеся исполнители

Не открывает понравившиеся исполнители ни в папке юзеры, ни в отдельном элементе, прописанным вручную.
Интеграция настроена через configuration.yaml.
Home Assistant Supervised 2022.3.5, версия компонента 0.0.7.

В логах две ошибки:
1.

Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/yandex_music_browser/media_browser.py:802
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 12:45:53 (1 occurrences)
Last logged: 12:45:53

[2707639696] Error handling message: Unknown error
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 27, in _handle_async_response
    await func(hass, connection, msg)
  File "/usr/src/homeassistant/homeassistant/components/media_player/__init__.py", line 1162, in websocket_browse_media
    payload = await player.async_browse_media(media_content_type, media_content_id)
  File "/config/custom_components/yandex_music_browser/patches/yandex_station.py", line 148, in _patch_yandex_station_async_browse_media
    response = await _patch_root_async_browse_media(self, media_content_type, media_content_id)
  File "/config/custom_components/yandex_music_browser/patches/_base.py", line 25, in _patch_root_async_browse_media
    response = await (
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 802, in generate_browse_from_media
    del self._response_cache[cache_key]
KeyError: ('library', '3')
Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/yandex_music_browser/media_browser.py:1542
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 22 марта 2022 г., 18:04:54 (6 occurrences)
Last logged: 12:26:51

[2723201280] Error handling message: Unknown error
[2778459248] Error handling message: Unknown error
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 27, in _handle_async_response
    await func(hass, connection, msg)
  File "/usr/src/homeassistant/homeassistant/components/media_player/__init__.py", line 1162, in websocket_browse_media
    payload = await player.async_browse_media(media_content_type, media_content_id)
  File "/config/custom_components/yandex_music_browser/patches/yandex_station.py", line 148, in _patch_yandex_station_async_browse_media
    response = await _patch_root_async_browse_media(self, media_content_type, media_content_id)
  File "/config/custom_components/yandex_music_browser/patches/_base.py", line 25, in _patch_root_async_browse_media
    response = await (
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 780, in generate_browse_from_media
    browse_object = processor(self, media_object, fetch_children)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 1100, in wrapped_function
    browse_object = func(browser, media_object, fetch_children)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 1431, in media_link_processor
    return browse_generator(browser, media_content_id, fetch_children)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 920, in wrapped_function
    browse_object = func(browser, media_content_id, fetch_children)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 969, in wrapped_function
    return func(browser, f"#{user_id}", fetch_children)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 1019, in wrapped_function
    children = browser.generate_browse_list_from_media_list(
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 825, in generate_browse_list_from_media_list
    browse_object = self.generate_browse_from_media(
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 780, in generate_browse_from_media
    browse_object = processor(self, media_object, fetch_children)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 1100, in wrapped_function
    browse_object = func(browser, media_object, fetch_children)
  File "/config/custom_components/yandex_music_browser/media_browser.py", line 1542, in artist_media_processor
    thumbnail=media_object.cover.uri,
AttributeError: 'NoneType' object has no attribute 'uri'

Вот так выглядит в веб-интерфейсе:
Screenshot-2.png

После установки интеграции не открывается мультимедиа браузер

После установки интеграции перестал работать мультимедиа-браузер. При его открытии появляется ошибка "Unknown error".
Устанавливал по инструкции.
Интеграция AlexIT установлена, авторизация пройдена.
Данную интеграцию через YAML не настраивал - настраивал через GUI.

Лог:

2022-06-17 18:17:20 ERROR (MainThread) [custom_components.yandex_music_browser.default] Default authentication failed: No credentials provided
2022-06-17 18:17:20 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [140409586161456] Error handling message: Unknown error (unknown_error)
Traceback (most recent call last):
File "/config/custom_components/yandex_music_browser/default.py", line 98, in async_get_music_browser
authentication = await async_authenticate_using_config_credentials(hass)
File "/config/custom_components/yandex_music_browser/default.py", line 51, in async_authenticate_using_config_credentials
raise YandexMusicBrowserAuthenticationError("No credentials provided")
custom_components.yandex_music_browser.media_browser.YandexMusicBrowserAuthenticationError: No credentials provided
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 27, in _handle_async_response
await func(hass, connection, msg)
File "/usr/src/homeassistant/homeassistant/components/media_player/__init__.py", line 1217, in websocket_browse_media
payload = await player.async_browse_media(media_content_type, media_content_id)
File "/config/custom_components/yandex_music_browser/patches/generic.py", line 138, in _patch_generic_async_browse_media
yandex_browse_object = await _patch_root_async_browse_media(
File "/config/custom_components/yandex_music_browser/patches/_base.py", line 19, in _patch_root_async_browse_media
music_browser = await async_get_music_browser(self)
File "/config/custom_components/yandex_music_browser/default.py", line 102, in async_get_music_browser
raise YandexMusicBrowserAuthenticationError(
custom_components.yandex_music_browser.media_browser.YandexMusicBrowserAuthenticationError: Could not authenticate with any of the provided patches

Несовместимость если несколько источников?

Почему то в мобильном приложении HA отображается только яндекс музыка. Других источников нет
Screenshot_20220329_100914_io homeassistant companion android

В тоже время chrome на ПК прямо наоборот
Другие источники есть, а яндекс музыки нет

image

Home assistant 2022.3.4
Стоит как HA OS на Debian
Плагины yandex-music-browser и Яндекс Станции последние из HACS

Проблемы с авторизацией (No credentials provided)

Установил все по инструкции, вместе с интеграцией яндекс станции (в ней авторизовался), но при попытке транслировать контент на устройство появляется ошибка "Unknown error", а в логах "No credentials provided". Попытки добавить поле credentials в configuration.yaml не помогла. При установке интеграции вопросов о токене/логин-пароле не было. Помогло только ручное добавление токена в core.config_entries (логику чтения конфигов понять не смог, уже ни питон не помню, ни доки по HA читать неохота).

Home Assistant 2021.8.2

Ошибка при обновлении на версию 0.3

интеграции.

Logger: custom_components.yandex_music_browser
Source: custom_components/yandex_music_browser/init.py:311
Integration: Браузер Яндекс Музыки (documentation, issues)
First occurred: 18:59:10 (2 occurrences)
Last logged: 18:59:59

No patches enabled, component will shut down

Error doing job: Future exception was never retrieved - No credentials provided

Добрый день!
Почему перестала работать интеграция? Что нужно изменить?

Вот лог:

Logger: homeassistant
Source: custom_components/yandex_music_browser/default.py:102
Integration: Браузер Яндекс Музыки (documentation, issues)
First occurred: 15:35:17 (1 occurrences)
Last logged: 15:35:17
Error doing job: Future exception was never retrieved

Traceback (most recent call last):
File "/config/custom_components/yandex_music_browser/default.py", line 98, in async_get_music_browser
authentication = await async_authenticate_using_config_credentials(hass)
File "/config/custom_components/yandex_music_browser/default.py", line 51, in async_authenticate_using_config_credentials
raise YandexMusicBrowserAuthenticationError("No credentials provided")
custom_components.yandex_music_browser.media_browser.YandexMusicBrowserAuthenticationError: No credentials provided

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 26, in _handle_async_response
await func(hass, connection, msg)
File "/usr/src/homeassistant/homeassistant/components/media_player/init.py", line 1223, in websocket_browse_media
payload = await player.async_browse_media(media_content_type, media_content_id)
File "/config/custom_components/yandex_music_browser/patches/generic.py", line 138, in _patch_generic_async_browse_media
yandex_browse_object = await _patch_root_async_browse_media(
File "/config/custom_components/yandex_music_browser/patches/_base.py", line 19, in _patch_root_async_browse_media
music_browser = await async_get_music_browser(self)
File "/config/custom_components/yandex_music_browser/default.py", line 102, in async_get_music_browser
raise YandexMusicBrowserAuthenticationError(
custom_components.yandex_music_browser.media_browser.YandexMusicBrowserAuthenticationError: Could not authenticate with any of the provided patches

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.