请问像用歌名搜索歌曲的url是从哪找的,还是自己抓的,我要访问类似排行榜数据应该去哪找呢
Closed this issue · 12 comments
在网页 QQ 音乐抓出来的,使用 Chrome 的控制台 network 。在点击某页面时分析其请求的 URL ,从中找出需要的那个。
比如点击巅峰榜,从网络请求中找到请求数据的那一条:https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?tpl=3&page=detail&date=2018_15&topid=26&type=top&song_begin=0&song_num=30 ,这里就是对应的数据了。
谢谢,我还有个问题,在调用get_music_url 方法的时候,返回的url在每天开机联网后的第一次点击的时候会 403 ,我每次都得在控制台找一个歌曲的链接正常打开后,才能打开返回的url,请问这个问题能解决吗
这个方法生成的 URL 是有有效期限的,您能具体的描述一下您的操作吗?我看一下能否复现并解决这个问题。
就有的时候单纯调用一下:
from home.QQMusic import QQMusic,Song
qqmusic=QQMusic()
song_list=qqmusic.search_song('佛系少女')
print(song_list[0].get_music_url())
返回的结果:http://dl.stream.qqmusic.qq.com/C400004Mkw5K1oI9K9.m4a?vkey=20F9B0E298AB87F12F10232133D012590823184219A9235AEA60F725F4B48787299D3AF571814F327BC2F50ECEE6175C69A5F336C0C11930&guid=5357384985
但是有时候会这样:
然后上QQ音乐随便抓个url打开之后:
这会儿上边返回的才不会403报错,就可以正常打开了。
感谢你帮忙看下这问题。谢谢
您好,通过 URL 直接获得音乐是需要先去注册一次 cookie 的,在代码中对应的位置:
class Song(object):
# 这个是九位的随机数,没有什么特殊意义,用其他方法生成也一样
guid = int(random() * 2147483647) * int(time() * 1000) % 10000000000
headers = {
"cookie": 'pgv_pvi=6725760000; pgv_si=s4324782080; pgv_pvid=%s; qqmusic_fromtag=66' % guid,
}
代码中将这个 cookie 进行了注册,但是如果您直接复制 URL 到浏览器的话,就是没有注册的。
如果您需要直接通过 URL 来访问的话,需要同时带上 headers 信息的。我近期写一个 cUrl 和 wget 的示例吧。
我的项目就是一个网页版的QQ音乐,不过我的主要功能是实现推荐功能。目前在前端这遇到了这个问题,我看您贴的这几行是在class类中写好的,也不是一个方法,所以该在哪添加header信息呢。。。。。请您能否具体描述一下注册cookie的具体过程?感谢。最近提了您不少问题,不好意思
您可以直接 print(Song.headers)
来获取代码自动注册的 cookie ,也可以 Song.headers['cookie'] = 'pgv_pvi=6725760000; pgv_si=s4324782080; pgv_pvid=123456789; qqmusic_fromtag=66'
来修改 cookie 为自己指定的值。
如果您想要不经过后端,直接前端访问 URL 来获取音乐,我将很快更新代码,以确保您可以通过直接访问 URL 的方式来获得歌曲。
您好,我的项目是可以经过后端的。您不用写只在前端请求的代码。请问,header是加在什么地方呢。这一点我目前不是很懂。。我第一次用Python写网站。。是不是有什么方法可以把url跟header连接在一起呢。。我现在已经写好的代码逻辑是这样的,前端post请求歌曲名,然后views.py返回歌曲的url.请问headers应该加在哪个位置呢
您好,我已经更新完了……
现在应该可以直接播放 URL 了,感谢您的反馈。如果后续还要其他问题的话,请再次联系我。
您好,又来打扰您,lrc_save()方法好像失效了,您有时间帮忙看下吧
错误:
AttributeError: 'Response' object has no attribute 'te5xt'
我这里测试是没有问题的,您可能不小心修改了代码里的某些地方。Response 有一个属性 'text' ,您可以看一下是不是误写成 'te5xt' 了。
不好意思,就是这个问题,这种错误真的烦人.