admin管理员组

文章数量:1650873

酷狗音乐关键字搜索并生成下载url

1. 获取搜索的歌单信息

​ 通过在酷狗音乐进行关键字搜索,并通过F12检测,发现网页给网站发送了get请求。

https://complexsearch.kugou/v2/search/song?callback=callback123&keyword=%E7%A8%BB%E9%A6%99&page=1&pagesize=30&bitrate=0&isfuzzy=0&tag=em&inputtype=0&platform=WebFilter&userid=-1&clientver=2000&iscorrection=1&privilege_filter=0&srcappid=2919&clienttime=1598343363775&mid=1598343363775&uuid=1598343363775&dfid=-&signature=09553BE20E21CF594C911530E4F71A07 

​ 其中keyword是搜索关键字,clienttime,mid,uuid均是时间戳,其他数值除signature经过检查均为固定值,针对signature的解码过程如下:

通过设置断点,可以获得signature,其获取流程如下:

str = {"NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt"
"bitrate=0"
"callback=callback123"
"clienttime=1598347379352"
"clientver=2000"
"dfid=-"
"inputtype=0"
"iscorrection=1"
"isfuzzy=0"
"keyword=稻香"
"mid=1598347379352"
"page=1"
"pagesize=30"
"platform=WebFilter"
"privilege_filter=0"
"srcappid=2919"
"tag=em"
"userid=-1"
"uuid=1598347379352"
"NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt"}
md5 = hashlib.md5()
md5.update(''.join(str).encode())
signature = md5.hexdigest()
# keyword是搜索关键字,clienttime,mid,uuid均是时间戳

时间戳为毫秒级(13位),需要自己实现函数,于是本人为了省事直接使用了前人用过的搜索url,似乎还可以使用(这样可以增加处理速度):

https://songsearch.kugou/song_search_v2?keyword={}&platform=WebFilter

2. 获取下载外链

​ 类似于获取歌单信息,打开一首歌并播放,按传输数据的大小排序,可是我们并没有发现存在较大的数据量的请求,经过慢慢检查,筛选出这条信息内包含我们所需的播放url:

​ 通过对header中的url进行简化处理,发现获取音乐下载url的url形式如下所示:

https://wwwapi.kugou/yy/index.php?r=play/getdata&hash={}&mid={}

​ hash可以通过1中的json数据获得,mid可以通过在’abcdefghijklmnopqrstuvwxyz0123456789’中任选4个字符,并使用md5加密获得。

​ 由于没有酷狗VIP的账号,因此无法仅能下载VIP音乐片段。

3. 完整代码

 import urllib.request,os,json
from urllib.parse import quote
import random
import requests
import time
from selenium import webdriver

本文标签: 酷狗关键字搜索音乐url