特色

[Python][纯代码分享]QQ音乐解析,搜索等

源码,全部功能说明:https://github.com/MCQTSS/MCQTSS_QQMusic

代码仅用于学习交流

里面所有的_headers都是

{
  ‘Accept’: ‘*/*’,
  ‘Accept-Encoding’: ‘gzip, deflate, br’,
  ‘Accept-Language’: ‘zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6’,
  ‘Referer’: ‘https://y.qq.com/’,
  ‘User-Agent’: ‘Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (‘
                ‘KHTML, like Gecko) Mobile/17D50 UCBrowser/12.8.2.1268 Mobile AliApp(TUnionSDK/0.1.20.3) ‘
}

搜索:

最开始其实是想用电脑版的,不过最后还是发现手机版的网页简单点

不过现在电脑版貌似需要登录后才能搜索

搜索代码:

def search_music(name, limit=20):  # 搜索歌曲,name歌曲名,limit返回数量
  print(json.dumps({
     ‘w’: name,
     ‘t’: 0,
     ‘n’: limit,
     ‘page’: 1,
     ‘cr’: 1,
     ‘new_json’: 1,
     ‘format’: ‘json’,
     ‘platform’: ‘yqq.json’
  }))
  return requests.get(url=’https://c.y.qq.com/soso/fcgi-bin/client_search_cp’, params={
     ‘w’: name,
     ‘t’: 0,
     ‘n’: limit,
     ‘page’: 1,
     ‘cr’: 1,
     ‘new_json’: 1,
     ‘format’: ‘json’,
     ‘platform’: ‘yqq.json’
  }, timeout=1, headers=_headers).json()[‘data’][‘song’][‘list’]

除了这种记得还有这种方法

https://c.y.qq.com/soso/fcgi-bin/client_search_cp?n=长度&w=歌名

获取音乐下载地址:

万能提交接口:https://u.y.qq.com/cgi-bin/musicu.fcg?data=xxx

网页版还有个sign=xxx的方法,没研究明白

至于能不能解析VIP歌曲,看你_cookies填的是不是有绿钻的

代码:

def get_music_url(music_mid): 
  uin = ''.join(random.sample('1234567890', 10))
  data = {
     "req": {
        "module": "CDN.SrfCdnDispatchServer",
        "method": "GetCdnDispatch",
        "param": {
           "guid": "1535153710",
           "calltype": 0,
           "userip": ""
        }
     },
     "req_0": {
        "module": "vkey.GetVkeyServer",
        "method": "CgiGetVkey",
        "param": {
           "guid": "1535153710",
           "songmid": [music_mid],
           "songtype": [0],
           "uin": uin,
           "loginflag": 1,
           "platform": "20",
        }
     },
     "comm": {
        "uin": uin,
        "format": "json",
        "ct": 24,
        "cv": 0
     }
  }
  ret = json.loads(requests.get('https://u.y.qq.com/cgi-bin/musicu.fcg?data={}'.format(json.dumps(data)),
                                headers=_headers, cookies=_cookies).text)
  if ret['code'] == 500001: 
     return 'Error'
  return 'https://dl.stream.qqmusic.qq.com/{}'.format(ret['req_0']['data']['midurlinfo'][0]['purl'])

[Python]关于QQ音乐最新Sign算法

源码,全部功能说明:https://github.com/MCQTSS/MCQTSS_QQMusic

代码仅用于学习交流!

最近观察QQ音乐网页时发现Sign算法再次更新(开头由zzb变成了zzc)所以就有了这篇文章

可以观察到sign开头发生了改变

开头不卖关子,只需要将原来的var o = ventor(147).default;换成var o = ventor(350).default;即可解决

这次更新似乎修改了sign算法的函数位置以及新的API域名u6.y.qq.com

最后是闲的没事新增的但还没有上传到项目中的新搜索代码:

def search_music_2(self, name, limit=20):
"""
搜索歌曲
本函数使用前请设置Cookie,否则不会返回结果
:param name: 音乐名
:param limit: 搜索页数
:return:
"""
data = json.dumps({"comm": {"cv": 4747474, "ct": 24, "format": "json", "inCharset": "utf-8",
"outCharset": "utf-8", "notice": 0, "platform": "yqq.json", "needNewCode": 1,
"uin": ''.join(random.sample(string.digits, 10))},
"req_0": {"method": "DoSearchForQQMusicDesktop", "module": "music.search.SearchCgiService",
"param": {"remoteplace": "txt.yqq.top",
"searchid": "".join(random.sample(string.digits + string.digits, 17)),
"search_type": 0, "query": name, "page_num": 1, "num_per_page": limit}}},
ensure_ascii=False).encode('utf-8')
return requests.post(
url='https://u6.y.qq.com/cgi-bin/musics.fcg?_={}&sign={}'.format(
int(round(time.time() * 1000)), self.get_sign(data.decode('utf8'))),
headers={
'Referer': 'https://y.qq.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0',
'cookie':self._cookies},
data=data).json()['req_0']['data']['body']['song']['list']

注意,使用前请使用set_cookie函数设置Cookie才可使用,否则会因为无返回结果导致报错