支持第三方搜索
This commit is contained in:
parent
c3fe6d17d6
commit
3a5188005b
|
@ -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
|
|
@ -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)
|
Loading…
Reference in New Issue