import
requests
import
json
import
os
from
urllib.request
import
urlopen
from
tqdm
import
tqdm
headers
=
{
'user-agent'
:
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
music_list
=
[]
def
GetitemInfo():
search
=
input
(
"\033[1;45m请输入想搜索的歌\033[0m -==>:"
)
url1
=
'https://songsearch.kugou.com/song_search_v2?callback=jQuery112404852453033521309_1585374178035&keyword={}&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1585374178039'
.
format
(search)
r
=
requests.get(url1, headers
=
headers)
r.encoding
=
r.apparent_encoding
JsonText
=
json.loads(
str
(r.text).strip(
'jQuery112404852453033521309_1585374178035('
)[:
-
2
])
contents1
=
[]
tone_quality
=
input
(
"请选择音质;\033[1;45m1\033[0m = 无损音质 , \033[1;45m2\033[0m = 流畅音质 :\n"
)
if
tone_quality
=
=
"1"
:
for
i
in
JsonText[
"data"
][
"lists"
]:
quality_type
=
{}
SQFileHash
=
i[
'SQFileHash'
]
AlbumID
=
i[
'AlbumID'
]
downurl
=
'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery191012215974743400859_1585619590127&hash={}&album_id={}&dfid=0zI24KbQfP0cPOWD2MSu40&mid=415d42b77b039a48daf4f63d5b411ceb&platid=4&_=1585619590128'
.
format
(SQFileHash, AlbumID)
quality_type[
'type'
]
=
'.flac'
quality_type[
'url'
]
=
downurl
contents1.append(quality_type)
if
tone_quality
=
=
"2"
:
for
i
in
JsonText[
"data"
][
"lists"
]:
quality_type
=
{}
AlbumID
=
i[
'AlbumID'
]
FileHash
=
i[
'FileHash'
]
downurl1
=
'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery191012215974743400859_1585619590127&hash={}&album_id={}&dfid=0zI24KbQfP0cPOWD2MSu40&mid=415d42b77b039a48daf4f63d5b411ceb&platid=4&_=1585619590128'
.
format
(FileHash, AlbumID)
quality_type[
'type'
]
=
'.mp3'
quality_type[
'url'
]
=
downurl1
contents1.append(quality_type)
return
contents1
def
parser_json(data):
ss
=
0
for
data
in
data:
url
=
data[
'url'
]
ss
+
=
1
try
:
response
=
requests.get(url,headers
=
headers)
if
'play_url'
in
response.text:
music
=
{}
json_TEXt
=
json.loads(
str
(response.text).strip(
"jQuery19108584376284926096_1585328784250("
)[:
-
2
])[
'data'
]
url
=
json_TEXt[
'play_url'
]
url1
=
json_TEXt[
'play_backup_url'
]
music_mane
=
json_TEXt[
'album_name'
]
singer
=
json_TEXt[
'author_name'
]
music[
"音乐链接"
]
=
url
music[
"歌曲名字"
]
=
music_mane
music[
"歌手"
]
=
singer
music[
'歌曲类型'
]
=
data[
'type'
]
print
(
"音乐链接:"
,url)
print
(
"备份音乐链接:"
,url1)
print
(
"歌曲名字:"
,music_mane)
print
(
"歌手:"
,singer)
print
(
"下载歌曲的序号:"
,
"\033[1;45m {} \033[0m"
.
format
(ss))
print
(
"\033[1;45m=\033[0m"
*
41
,
"\033[1;45m分割线\033[0m"
,
"\033[1;45m=\033[0m"
*
41
)
music_list.append(music)
else
:
print
(
'\n该URL解析不了'
,
"或者出现滑动验证提示:\nhttps://www.kugou.com/song/#hash=C9B86DA7FE6F500D72A68FF7A705E1E0&album_id=12855831"
)
continue
except
Exception as e:
print
(e)
if_download
=
input
(
"请输入上面的\033[1;45m下载歌曲的序号\033[0m:"
)
slice
=
music_list[
int
(if_download)
-
1
:
int
(if_download)]
download_from_url(
slice
)
def
download_from_url(music_data):
for
data
in
music_data:
url
=
data[
'音乐链接'
]
music_mane
=
data[
'歌曲名字'
]
singer
=
data[
'歌手'
]
quality_type
=
data[
'歌曲类型'
]
dst
=
singer
+
" - "
+
music_mane
+
quality_type
file_size
=
int
(urlopen(url).info().get(
'Content-Length'
,
-
1
))
if
os.path.exists(dst):
first_byte
=
os.path.getsize(dst)
else
:
first_byte
=
0
if
first_byte >
=
file_size:
return
file_size
header
=
{
"Range"
:
"bytes=%s-%s"
%
(first_byte, file_size)}
pbar
=
tqdm(
total
=
file_size, initial
=
first_byte,
unit
=
'B'
, unit_scale
=
True
, desc
=
dst)
req
=
requests.get(url, headers
=
header, stream
=
True
)
with(
open
( dst,
'ab'
)) as f:
for
chunk
in
req.iter_content(chunk_size
=
1024
):
if
chunk:
f.write(chunk)
pbar.update(
1024
)
pbar.close()
return
file_size
if
__name__
=
=
'__main__'
:
parser_json(GetitemInfo())