From 17279aaae04d67b78672c955c8d93d08d232cedf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=B5=E6=9B=A6?= Date: Thu, 27 Jun 2024 05:27:28 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EXIAOMUSIC=5FUSE=5FMUSIC=5FAPI?= =?UTF-8?q?=3Dtrue=E6=97=B6=E4=BD=BF=E7=94=A8player=5Fplay=5Fmusic?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=85=BC=E5=AE=B9=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E6=92=AD=E6=94=BE=E7=9A=84=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=9E=8B=E5=8F=B7=20see=20#30?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xiaomusic/config.py | 3 +++ xiaomusic/utils.py | 6 ++++++ xiaomusic/xiaomusic.py | 22 +++++++++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/xiaomusic/config.py b/xiaomusic/config.py index c0f3b00..74c9f69 100644 --- a/xiaomusic/config.py +++ b/xiaomusic/config.py @@ -86,6 +86,9 @@ class Config: ) key_word_dict = DEFAULT_KEY_WORD_DICT.copy() key_match_order = DEFAULT_KEY_MATCH_ORDER.copy() + use_music_api: bool = ( + os.getenv("XIAOMUSIC_USE_MUSIC_API", "false").lower() == "true" + ) def append_keyword(self, keys, action): for key in keys.split(","): diff --git a/xiaomusic/utils.py b/xiaomusic/utils.py index b0fe2fb..bed0bcc 100644 --- a/xiaomusic/utils.py +++ b/xiaomusic/utils.py @@ -3,7 +3,9 @@ from __future__ import annotations import difflib import os +import random import re +import string import tempfile from collections.abc import AsyncIterator from http.cookies import SimpleCookie @@ -213,3 +215,7 @@ def get_local_music_duration(filename): except Exception: pass return duration + + +def get_random(length): + return "".join(random.sample(string.ascii_letters + string.digits, length)) diff --git a/xiaomusic/xiaomusic.py b/xiaomusic/xiaomusic.py index 87cf8fc..0616ecc 100644 --- a/xiaomusic/xiaomusic.py +++ b/xiaomusic/xiaomusic.py @@ -29,6 +29,7 @@ from xiaomusic.utils import ( custom_sort_key, fuzzyfinder, get_local_music_duration, + get_random, get_web_music_duration, parse_cookie_string, walk_to_depth, @@ -622,6 +623,25 @@ class XiaoMusic: return True return False + async def play_url(self, url): + if self.config.use_music_api: + audio_id = get_random(30) + music = { + "payload": { + "audio_items": [ + {"item_id": {"audio_id": audio_id}, "stream": {"url": url}} + ], + } + } + return await self.mina_service.ubus_request( + self.device_id, + "player_play_music", + "mediaplayer", + {"startaudioid": audio_id, "music": json.dumps(music)}, + ) + else: + await self.mina_service.play_by_url(self.device_id, url) + # 播放本地歌曲 async def playlocal(self, **kwargs): name = kwargs.get("arg1", "") @@ -647,7 +667,7 @@ class XiaoMusic: url = self.get_music_url(name) self.log.info(f"播放 {url}") await self.force_stop_xiaoai() - await self.mina_service.play_by_url(self.device_id, url) + await self.play_url(url) self.log.info("已经开始播放了") # 设置下一首歌曲的播放定时器 await self.set_next_music_timeout()