优化获取播放时长的逻辑
This commit is contained in:
parent
88fbc503e7
commit
538ac1d485
@ -1,15 +1,10 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from xiaomusic.utils import validate_proxy
|
from xiaomusic.utils import validate_proxy
|
||||||
|
|
||||||
LATEST_ASK_API = "https://userprofile.mina.mi.com/device_profile/v2/conversation?source=dialogu&hardware={hardware}×tamp={timestamp}&limit=2"
|
|
||||||
COOKIE_TEMPLATE = "deviceId={device_id}; serviceToken={service_token}; userId={user_id}"
|
|
||||||
|
|
||||||
# 默认口令
|
# 默认口令
|
||||||
DEFAULT_KEY_WORD_DICT = {
|
DEFAULT_KEY_WORD_DICT = {
|
||||||
"播放歌曲": "play",
|
"播放歌曲": "play",
|
||||||
@ -46,14 +41,6 @@ DEFAULT_KEY_MATCH_ORDER = [
|
|||||||
"播放列表",
|
"播放列表",
|
||||||
]
|
]
|
||||||
|
|
||||||
SUPPORT_MUSIC_TYPE = [
|
|
||||||
".mp3",
|
|
||||||
".flac",
|
|
||||||
".wav",
|
|
||||||
".ape",
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Config:
|
class Config:
|
||||||
hardware: str = os.getenv("MI_HARDWARE", "L07A")
|
hardware: str = os.getenv("MI_HARDWARE", "L07A")
|
||||||
|
11
xiaomusic/const.py
Normal file
11
xiaomusic/const.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
SUPPORT_MUSIC_TYPE = [
|
||||||
|
".mp3",
|
||||||
|
".flac",
|
||||||
|
".wav",
|
||||||
|
".ape",
|
||||||
|
]
|
||||||
|
|
||||||
|
LATEST_ASK_API = "https://userprofile.mina.mi.com/device_profile/v2/conversation?source=dialogu&hardware={hardware}×tamp={timestamp}&limit=2"
|
||||||
|
COOKIE_TEMPLATE = "deviceId={device_id}; serviceToken={service_token}; userId={user_id}"
|
||||||
|
|
||||||
|
|
@ -16,6 +16,8 @@ import mutagen
|
|||||||
import requests
|
import requests
|
||||||
from requests.utils import cookiejar_from_dict
|
from requests.utils import cookiejar_from_dict
|
||||||
|
|
||||||
|
from xiaomusic.const import SUPPORT_MUSIC_TYPE
|
||||||
|
|
||||||
|
|
||||||
### HELP FUNCTION ###
|
### HELP FUNCTION ###
|
||||||
def parse_cookie_string(cookie_string):
|
def parse_cookie_string(cookie_string):
|
||||||
@ -193,6 +195,20 @@ async def _get_web_music_duration(session, url, start=0, end=500):
|
|||||||
async def get_web_music_duration(url, start=0, end=500):
|
async def get_web_music_duration(url, start=0, end=500):
|
||||||
duration = 0
|
duration = 0
|
||||||
try:
|
try:
|
||||||
|
parsed_url = urlparse(url)
|
||||||
|
file_path = parsed_url.path
|
||||||
|
_, extension = os.path.splitext(file_path)
|
||||||
|
if extension.lower() not in SUPPORT_MUSIC_TYPE:
|
||||||
|
cleaned_url = parsed_url.geturl()
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
async with session.get(
|
||||||
|
cleaned_url,
|
||||||
|
allow_redirects=True,
|
||||||
|
headers={
|
||||||
|
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"
|
||||||
|
},
|
||||||
|
) as response:
|
||||||
|
url = response.url
|
||||||
# 设置总超时时间为3秒
|
# 设置总超时时间为3秒
|
||||||
timeout = aiohttp.ClientTimeout(total=3)
|
timeout = aiohttp.ClientTimeout(total=3)
|
||||||
async with aiohttp.ClientSession(timeout=timeout) as session:
|
async with aiohttp.ClientSession(timeout=timeout) as session:
|
||||||
|
@ -10,18 +10,18 @@ import time
|
|||||||
import traceback
|
import traceback
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from aiohttp import ClientSession, ClientTimeout
|
from aiohttp import ClientSession, ClientTimeout
|
||||||
from miservice import MiAccount, MiIOService, MiNAService
|
from miservice import MiAccount, MiIOService, MiNAService
|
||||||
|
|
||||||
from xiaomusic import (
|
from xiaomusic import (
|
||||||
__version__,
|
__version__,
|
||||||
)
|
)
|
||||||
from xiaomusic.config import (
|
from xiaomusic.const import (
|
||||||
COOKIE_TEMPLATE,
|
COOKIE_TEMPLATE,
|
||||||
KEY_WORD_ARG_BEFORE_DICT,
|
|
||||||
LATEST_ASK_API,
|
LATEST_ASK_API,
|
||||||
SUPPORT_MUSIC_TYPE,
|
SUPPORT_MUSIC_TYPE,
|
||||||
|
)
|
||||||
|
from xiaomusic.config import (
|
||||||
|
KEY_WORD_ARG_BEFORE_DICT,
|
||||||
Config,
|
Config,
|
||||||
)
|
)
|
||||||
from xiaomusic.httpserver import StartHTTPServer
|
from xiaomusic.httpserver import StartHTTPServer
|
||||||
@ -359,7 +359,12 @@ class XiaoMusic:
|
|||||||
url = self._all_music[name]
|
url = self._all_music[name]
|
||||||
return url.startswith(("http://", "https://"))
|
return url.startswith(("http://", "https://"))
|
||||||
|
|
||||||
# 获取歌曲播放地址
|
# 获取歌曲播放地址和播放时长
|
||||||
|
def get_music_url_duration(self, name):
|
||||||
|
url = self.get_music_url(name)
|
||||||
|
duration = self.get_music_duration(name)
|
||||||
|
return url, duration
|
||||||
|
|
||||||
def get_music_url(self, name):
|
def get_music_url(self, name):
|
||||||
if self.is_web_music(name):
|
if self.is_web_music(name):
|
||||||
url = self._all_music[name]
|
url = self._all_music[name]
|
||||||
@ -495,6 +500,23 @@ class XiaoMusic:
|
|||||||
return self.get_next_music()
|
return self.get_next_music()
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
# 获取歌曲播放时长
|
||||||
|
async def get_music_duration(self, name):
|
||||||
|
if self.is_web_radio_music(name):
|
||||||
|
self.log.info("电台不会有播放时长")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if self.is_web_music(name):
|
||||||
|
url = self._all_music[name]
|
||||||
|
duration = await get_web_music_duration(url)
|
||||||
|
sec = int(duration)
|
||||||
|
self.log.info(f"网络歌曲 {name}下一首的定时器 的时长 {sec} 秒")
|
||||||
|
else:
|
||||||
|
filename = self.get_filename(name)
|
||||||
|
sec = int(get_local_music_duration(filename))
|
||||||
|
self.log.info(f"本地歌曲 {name} : {filename} 的时长 {sec} 秒")
|
||||||
|
|
||||||
|
|
||||||
# 设置下一首歌曲的播放定时器
|
# 设置下一首歌曲的播放定时器
|
||||||
async def set_next_music_timeout(self):
|
async def set_next_music_timeout(self):
|
||||||
name = self.cur_music
|
name = self.cur_music
|
||||||
@ -673,7 +695,7 @@ class XiaoMusic:
|
|||||||
self._playing = True
|
self._playing = True
|
||||||
self.cur_music = name
|
self.cur_music = name
|
||||||
self.log.info(f"cur_music {self.cur_music}")
|
self.log.info(f"cur_music {self.cur_music}")
|
||||||
url = self.get_music_url(name)
|
url, duration = self.get_music_url_duration(name)
|
||||||
self.log.info(f"播放 {url}")
|
self.log.info(f"播放 {url}")
|
||||||
await self.force_stop_xiaoai()
|
await self.force_stop_xiaoai()
|
||||||
await self.play_url(url)
|
await self.play_url(url)
|
||||||
|
Loading…
Reference in New Issue
Block a user