QQ音乐的歌曲真实地址解析

news/2024/11/20 0:22:49/

以QQ音乐的单曲页面URL https://y.qq.com/n/yqq/song/000YU69H3N55rZ.html 为例,说明如何解析得到真实的音频地址。

打开该页面地址,是这样的:

 

点击页面中的播放按钮,会在新页面的播放器里播放该音乐。在新页面中打开开发者工具的网络探测,重新刷新页面,会发现相关请求如下:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback39355320624659207&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback39355320624659207&uin=0&songmid=000YU69H3N55rZ&filename=C400000YU69H3N55rZ.m4a&guid=328569683http://dl.stream.qqmusic.qq.com/C400000YU69H3N55rZ.m4a?vkey=927C721D272189FED484EF874A8D646C6B13C20C53277FB99D496DA6804CDF1B64C33A4F049D24FFC4366605DB4755A6E9AB632AA770C09A&guid=328569683&uin=0&fromtag=66

其中,第二个请求就是音频的真实地址,该地址中主要有如下几个部分:

  • 文件名:C400000YU69H3N55rZ.m4a
  • vkey参数:927C721D272189FED484EF874A8D646C6B13C20C53277FB99D496DA6804CDF1B64C33A4F049D24FFC4366605DB4755A6E9AB632AA770C09A
  • guid参数:328569683
  • uin参数:0
  • fromtag参数:66

第一个请求的响应如下:

MusicJsonCallback39355320624659207({"code":0,"cid":205361747,"data":{"expiration":80400,"items":[{"subcode":0,"songmid":"000YU69H3N55rZ","filename":"C400000YU69H3N55rZ.m4a","vkey":"927C721D272189FED484EF874A8D646C6B13C20C53277FB99D496DA6804CDF1B64C33A4F049D24FFC4366605DB4755A6E9AB632AA770C09A"}]}})

我们发现,vkey参数值就在上述响应内容里面。songmid的值正好出现在单曲页面URL里面,通过字符串拼接可以得到文件名:"C400" + songmid + ".m4a"

只有文件名和vkey是不够的,还需要知道guid参数值是如何得来的,没有guid参数的话请求音频真实地址会返回响应码403。

在js文件 https://y.gtimg.cn/music/portal/js/common/pkg/player_module_b5739d0.js 中,搜索 fcg_music_express_mobile3 可找到如下jsonp请求代码:

r.length > 0 ? MUSIC.jQueryAjax.jsonp({url: location.protocol + "//c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg",data: {cid: 205361747,format: "json",callback: a,uin: g_user.getUin(),songmid: r.join(","),filename: n.join(","),guid: _getGuid()},...}) : t && t()

这段js代码正好写明了请求参数有哪些,guid是通过调用 _getGuid 得到的。_getGuid 方法的代码如下:

function _getGuid() {if (_guid.length > 0)return _guid;var e = MUSIC.cookie.get("pgv_pvid");if (e && e.length > 0)return _guid = e;var t = (new Date).getUTCMilliseconds();return _guid = Math.round(2147483647 * Math.random()) * t % 1e10,document.cookie = "pgv_pvid=" + _guid + "; Expires=Sun, 18 Jan 2038 00:00:00 GMT; PATH=/; DOMAIN=qq.com;",_guid}

由此可见,guid的核心构造代码是如下两行:

var t = (new Date).getUTCMilliseconds()
_guid = Math.round(2147483647 * Math.random()) * t % 1e10

Python代码示例

import re
import json
import time
import random
import requestsdef resolve(url):"""resolve audio url:param url: like 'https://y.qq.com/n/yqq/song/000YU69H3N55rZ.html':return:"""songmid = re.search('/(\w+).html$', url).groups()[0]filename = 'C400' + songmid + '.m4a'guid = int(random.random() * 2147483647) * int(time.time() * 1000) % 10000000000d = {'format': 'json','cid': 205361747,'uin': 0,'songmid': songmid,'filename': filename,'guid': guid,}r = requests.get('https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg', params=d, verify=False)vkey = json.loads(r.content)['data']['items'][0]['vkey']audio_url = 'http://dl.stream.qqmusic.qq.com/%s?vkey=%s&guid=%s&uin=0&fromtag=66' % (filename, vkey, guid)return audio_url

 

 


http://www.ppmy.cn/news/528667.html

相关文章

Python爬虫实战,QQ音乐爬取全部歌曲

前景介绍 最近小伙伴们听歌的兴趣大涨,网抑云综合症已经遍布各地。 咱们再来抬高一波QQ音乐的热度吧。很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人&…

qq音乐api android,QQ音乐

## 示例 **QQ音乐基本信息** * 请求URL:http://api.lmwljz.com/song * 请求方式:POST **请求参数** > 例:infoqq,003qv80Y1EiADB&keyaccess_token |参数名称|类型|说明| | --- | --- | --- | | info |string | qq,歌曲ID (参数以半角度…

QQ音乐 最新歌曲源 API(稳定)

//2019.04.19 这次我真的找到可用的api了, 兄弟们,http://ustbhuangyi.com/music/#/singer,可以先去这个地址研究一哈,大佬用vue写的 // 11.29 更新 http://isure.stream.qqmusic.qq.com/C400003tAqVn0Fj6BS.m4a?guid42080809…

【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息

本文对使用到的技术仅做简单的介绍,若想了解更多,请前往相应的官网网站进行学习。 本文适合对爬虫相关知识接触不多的新手,主要是普及Selenium如何做爬虫,大佬请跳过。 1.Selenium简单介绍 1.简介 Selenium是一个用于测试网站的自…

爬虫实战 -- QQ音乐爬取全部歌曲

前景介绍 最近小伙伴们听歌的兴趣大涨,网抑云综合症已经遍布各地。 咱们再来抬高一波QQ音乐的热度吧。 土豪充绿钻 和 刷永久绿钻的除外(me🤣) 爬它! 目标:歌手列表 任务:将A到Z的歌手以及全部页数的歌存到本地和数据…

如何选择合适的测评技术来提高亚马逊产品曝光和转化率

选择合适的测评系统是提高亚马逊产品曝光和转化率的关键。一个有效的测评技术可以帮助卖家增加产品的可见性,吸引更多潜在买家,并提高订单转化率。 合规性: 确保所选测评技术符合亚马逊的规则和政策。亚马逊对测评行为有明确规定&#xff0c…

在 Python 中打印度数符号

本篇文章将介绍如何用 Python 编写度数符号。 度数符号 度数符号是表示特定区域温度的符号。 例如,假设卡纳塔克邦的气温为 34 摄氏度; 它表明,在印度卡纳塔克邦,温度为 34 度。 度数也与华氏度和摄氏度一起使用。 使用 chr 函数…

用OpenCV进行模板匹配

1. 引言 今天我们来研究一种传统图像处理领域中对象检测和跟踪不可或缺的方法——模板匹配,其主要目的是为了在图像上找到我们需要的图案,这听起来十分令人兴奋。 所以,事不宜迟,让我们直接开始吧! 2. 概念 模板匹…