支持第三方搜索

This commit is contained in:
shaonianzhetnan 2023-03-29 23:52:15 +08:00
parent c3fe6d17d6
commit 3a5188005b
2 changed files with 74 additions and 25 deletions

View File

@ -13,6 +13,8 @@ from .browse_media import (
async_media_next_track
)
from .music_parser import get_music, get_music2
def md5(data):
return hashlib.md5(data.encode('utf-8')).hexdigest()
@ -422,28 +424,11 @@ class CloudMusic():
return _list
async def async_music_source(self, keyword):
api = 'https://thewind.xyz/music/api/'
url = f'{api}search'
files = {
"src": (None, "KW"),
"keyword": (None, keyword),
"num": (None, 10)
}
response = await self.hass.async_add_executor_job(requests.post, url, files)
result = response.json()
# print(result)
if len(result) > 0:
result = list(filter(lambda x: x.get('songId') is not None and x.get('url', '') != '', result))
if len(result) > 0:
item = result[0]
albumName = item.get('albumName')
songSrc = item['songSrc']
songId = item['songId']
play_url = f'{api}player?shareId={songSrc}_{songId}'
# print(play_url)
response = await self.hass.async_add_executor_job(requests.get, play_url)
result = response.json()
# print(result)
if isinstance(result, list) and len(result) > 0:
info = result[0]
return MusicInfo(songId, info.get('title'), info.get('author'), albumName, 0, info.get('url'), info.get('pic'), MusicSource.URL.value)
result = await self.hass.async_add_executor_job(get_music, keyword)
if result is not None:
return result
result = await self.hass.async_add_executor_job(get_music2, keyword)
if result is not None:
return result

View File

@ -0,0 +1,64 @@
from bs4 import BeautifulSoup
import requests, re
from .models.music_info import MusicInfo, MusicSource
def get_music(keywords):
api = 'https://www.fangpi.net'
session = requests.Session()
try:
response = session.get(f'{api}/s/{keywords}')
soup = BeautifulSoup(response.text.encode(response.encoding), 'lxml')
items = soup.select('.table tbody tr')
if len(items) > 0:
a = items[0].select('a')
href = a[0].attrs['href']
song = a[0].string
singer = a[1].string
# print(href)
response = session.get(f'{api}{href}')
pattren = re.compile(r'https://[^\s]+.mp3')
url_lst = pattren.findall(response.text)
# print(url_lst)
if len(url_lst) > 0:
soup = BeautifulSoup(response.text.encode(response.encoding), 'lxml')
cover = soup.select('#cover')
# 封面
pic = cover[0].attrs['src']
songId = href.replace('/', '')
album = ''
audio_url = url_lst[0]
return MusicInfo(songId, song, singer, album, 0, audio_url, pic, MusicSource.URL.value)
except Exception as ex:
print(ex)
def get_music2(keywords):
api = 'https://thewind.xyz/music/api/'
url = f'{api}search'
files = {
"src": (None, "KW"),
"keyword": (None, keyword),
"num": (None, 10)
}
response = requests.post(url, files=files)
result = response.json()
# print(result)
if len(result) > 0:
result = list(filter(lambda x: x.get('songId') is not None, result))
if len(result) > 0:
item = result[0]
albumName = item.get('albumName')
songSrc = item['songSrc']
songId = item['songId']
play_url = f'{api}player?shareId={songSrc}_{songId}'
# print(play_url)
response = requests.get(play_url)
result = response.json()
# print(result)
if isinstance(result, list) and len(result) > 0:
info = result[0]
audio_url = info.get('url', '')
if audio_url != '':
return MusicInfo(songId, info.get('title'), info.get('author'), albumName, 0, audio_url, info.get('pic'), MusicSource.URL.value)