完善搜索播放

This commit is contained in:
shaonianzhentan 2023-03-08 11:39:20 +08:00
parent 55ae0c7f7c
commit 6dc049862b
4 changed files with 34 additions and 16 deletions

View File

@ -32,25 +32,18 @@ https://github.com/Binaryify/NeteaseCloudMusicApi
> **指定ID播放**
- 播放网易云音乐歌单 `cloudmusic://163/playlist?id=25724904`
- cloudmusic://163/playlist?id=歌单ID
- 播放网易云音乐电台 `cloudmusic://163/radio/playlist?id=1008`
- cloudmusic://163/radio/playlist?id=电台ID
- 播放网易云音乐歌手 `cloudmusic://163/artist/playlist?id=2116`
- cloudmusic://163/artist/playlist?id=歌手ID
- 播放喜马拉雅专辑 `cloudmusic://xmly/playlist?id=258244`
- cloudmusic://xmly/playlist?id=专辑ID
> **搜索播放**(慎用,还在实现中...
> **搜索播放**
- [ ] 歌单搜索播放 `cloudmusic://play/song?kv=关键词`
- [ ] 歌单搜索播放 `cloudmusic://play/singer?kv=关键词`
- [x] 音乐搜索播放 `cloudmusic://play/song?kv=关键词`
- [x] 歌手搜索播放 `cloudmusic://play/singer?kv=关键词`
- [x] 歌单搜索播放 `cloudmusic://play/list?kv=关键词`
- [ ] 歌单搜索播放 `cloudmusic://play/radio?kv=关键词`
- [ ] 歌单搜索播放 `cloudmusic://play/xmly?kv=关键词`
- [ ] 歌单搜索播放 `cloudmusic://play/fm?kv=关键词`
- [x] 电台搜索播放 `cloudmusic://play/radio?kv=关键词`
- [ ] 喜马拉雅搜索播放 `cloudmusic://play/xmly?kv=关键词`
- [ ] FM搜索播放 `cloudmusic://play/fm?kv=关键词`
configuration.yaml
```yaml

View File

@ -106,6 +106,8 @@ class CloudMusicRouter():
search_play = f'{search_protocol}play'
# 播放
play_song = f'{play_protocol}song'
play_singer = f'{play_protocol}singer'
play_list = f'{play_protocol}list'
play_radio = f'{play_protocol}radio'
play_xmly = f'{play_protocol}xmly'
@ -715,9 +717,18 @@ async def async_play_media(media_player, cloud_music, media_content_id):
elif media_content_id.startswith(CloudMusicRouter.search_name):
playlist = await cloud_music.async_search_song(keywords)
elif media_content_id.startswith(CloudMusicRouter.search_play):
''' 外部接口搜索 '''
result = await cloud_music.async_music_source(keywords)
if result is not None:
playlist = [ result ]
elif media_content_id.startswith(CloudMusicRouter.play_song):
playlist = await cloud_music.async_play_song(keywords)
elif media_content_id.startswith(CloudMusicRouter.play_list):
playlist = await cloud_music.async_play_playlist(keywords)
elif media_content_id.startswith(CloudMusicRouter.play_radio):
playlist = await cloud_music.async_play_radio(keywords)
elif media_content_id.startswith(CloudMusicRouter.play_singer):
playlist = await cloud_music.async_play_singer(keywords)
if playlist is not None:

View File

@ -322,13 +322,27 @@ class CloudMusic():
music_info = MusicInfo(id, song, singer, album, duration, url, picUrl, MusicSource.URL.value)
return [ music_info ]
# 歌手
async def async_play_singer(self, keywords):
res = await self.netease_cloud_music(f'/search?limit=1&keywords={keywords}&type=100')
if res['code'] == 200:
playlists = res['result']['artists']
return await self.async_get_artists(playlists[0]['id'])
# 歌单
async def async_play_playlist(self, name):
res = await self.netease_cloud_music(f'/search?limit=1&keywords={name}&type=1000')
async def async_play_playlist(self, keywords):
res = await self.netease_cloud_music(f'/search?limit=1&keywords={keywords}&type=1000')
if res['code'] == 200:
playlists = res['result']['playlists']
return await self.async_get_playlist(playlists[0]['id'])
# 电台
async def async_play_radio(self, keywords):
res = await self.netease_cloud_music(f'/search?limit=1&keywords={keywords}&type=1009')
if res['code'] == 200:
playlists = res['result']['djRadios']
return await self.async_get_djradio(playlists[0]['id'])
# 音乐搜索
async def async_search_song(self, name):
ha_music_source = self.hass.data.get('ha_music_source')

View File

@ -1,7 +1,7 @@
{
"domain": "ha_cloud_music",
"name": "\u4E91\u97F3\u4E50",
"version": "2023.3.5",
"version": "2023.3.8",
"config_flow": true,
"documentation": "https://github.com/shaonianzhentan/ha_cloud_music",
"requirements": [],