Ajax

QQ音乐网页接口分析

2018-09-18  本文已影响813人  Yxisen

最近换了耳机,想把QQ音乐歌单里的歌下到电脑上,奈何无损要绿钻,解析虽然能整个歌单解析但是只能一首一首的下载。于是乎,抓了几个qq音乐网页版的api凑活着用。还有挺多优化的地方。

我已将QQ音乐解析写成接口

解析歌曲速度还凑活,歌单中歌曲较多的话速度较慢,后续根据需要会考虑使用多线程进行优化

请求地址: http://api.onecolour.cn/music/链接
请求方式: GET
请求示例: http://api.onecolour.cn/music/https://y.qq.com/n/yqq/song/000W9uty06xVPY.html
返回格式: json
返回示例:

 {'code': 1, 'datas': [{'name': '如同悲伤被下载了两次-陈珊妮&林宥嘉', 'link': {'flac': 'http://streamoc.music.tc.qq.com/F000000W9uty06xVPY.flac?guid=9354789579&vkey=B86F2718A37E86192210A8204675CB3F8B7306525A79A684008205B3D33CDCF32922CA5026B0EEB9531AFE33B410999F40F1E0BD7076C9AC&uin=0&fromtag=58', 'ape': 'http://streamoc.music.tc.qq.com/A000000W9uty06xVPY.ape?guid=9354789579&vkey=B86F2718A37E86192210A8204675CB3F8B7306525A79A684008205B3D33CDCF32922CA5026B0EEB9531AFE33B410999F40F1E0BD7076C9AC&uin=0&fromtag=58', '320mp3': 'http://streamoc.music.tc.qq.com/M800000W9uty06xVPY.mp3?guid=9354789579&vkey=B86F2718A37E86192210A8204675CB3F8B7306525A79A684008205B3D33CDCF32922CA5026B0EEB9531AFE33B410999F40F1E0BD7076C9AC&uin=0&fromtag=58', '128mp3': 'http://streamoc.music.tc.qq.com/M500000W9uty06xVPY.mp3?guid=9354789579&vkey=B86F2718A37E86192210A8204675CB3F8B7306525A79A684008205B3D33CDCF32922CA5026B0EEB9531AFE33B410999F40F1E0BD7076C9AC&uin=0&fromtag=58', 'm4a': 'http://streamoc.music.tc.qq.com/C400000W9uty06xVPY.m4a?guid=9354789579&vkey=B86F2718A37E86192210A8204675CB3F8B7306525A79A684008205B3D33CDCF32922CA5026B0EEB9531AFE33B410999F40F1E0BD7076C9AC&uin=0&fromtag=58'}}]}

code == 1,解析成功
code == -1,解析失败
code == -2,传入链接错误
传入链接格式:
单曲链接:https://y.qq.com/n/yqq/song/000W9uty06xVPY.html
专辑链接:https://y.qq.com/n/yqq/album/000ym9e23zZSBL.html
歌单链接:https://y.qq.com/n/yqq/playsquare/3846214337.htmlhttps://y.qq.com/n/yqq/playlist/3846214337.html

以下内容部分失效

1.歌单接口

qq音乐的歌单地址有两种

其一.:‘https://y.qq.com/n/yqq/playlist/’+歌单id+'.html'

其二:‘https://y.qq.com/n/yqq/playsquare/’+歌单id+'.html'

两种歌单地址可以相互转换,内容是完全相同的

https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?uin=0&format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=h5&needNewCode=1&new_format=1&pic=500&disstid=3719969047&type=1&json=1&utf8=1&onlysong=0&picmid=1&nosign=1&song_begin=0&song_num=1000&_=1537276176570

url参数中暂未验证哪些参数是必须的,其中disstid为歌单id,song_num为请求歌曲数量,经过测试只要数值填大一点就不用考虑歌曲数量的问题了。url最后的参数为unix十三位时间戳。

该接口必须构造请求头否则无法访问。

header = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
        'referer':'https://y.qq.com/portal/playlist.html'
    }

接口返回数据示例,其中包含了歌曲mid,歌手,歌曲名,QQ音乐乐库中各种音质文件的大小,等等。

{
    'code': 0,
    'subcode': 0,
    'accessed_plaza_cache': 1,
    'accessed_favbase': 1,
    'login': 'on**',
    'cdnum': 1,
    'cdlist': [{
        'disstid': '3719969047',
        'dirid': 4,
        'coveradurl': '',
        'dissid': 3719969,
        'login': 'on**',
        'uin': '7wEPowcl7w4l',
        'encrypt_uin': '7wEPowcl7w4l',
        'owndir': 0,
        'dissname': '月球',
        'logo': 'http://p.qpic.cn/music_cover/M9yfGQDpkIiacD2YAY0EbFPHwIO4qRfttIh2C6Zb9ciaIdyGibo1J1DkA/600?n=1',
        'pic_mid': '',
        'album_pic_mid': '',
        'pic_dpi': 500,
        'isAd': 0,
        'desc': '',
        'ctime': 1518242240,
        'mtime': 0,
        'headurl': 'http://thirdqq.qlogo.cn/g?b=sdk&k=4icib4Oc6f9AzUAb22VLP2KQ&s=140&t=1534384831',
        'ifpicurl': '',
        'nick': '沐昜灬',
        'nickname': '沐昜灬',
        'type': 0,
        'singerid': 0,
        'singermid': '',
        'isvip': 0,
        'isdj': 0,
        'tags': [],
        'songnum': 3,
        'songids': '1234505,105937539,444607',
        'songtypes': '13,13,13',
        'disstype': 0,
        'dir_pic_url2': '',
        'song_update_time': 0,
        'song_update_num': 0,
        'total_song_num': 3,
        'song_begin': 0,
        'cur_song_num': 3,
        'songlist': [{
            'id': 1234505,
            'type': 0,
            'songtype': 13,
            'mid': '001PpG3B0TR4UH',
            'name': '月球上的人',
            'title': '月球上的人',
            'subtitle': '',
            'interval': 222,
            'isonly': 1,
            'language': 1,
            'genre': 1,
            'index_cd': 1,
            'index_album': 19,
            'status': 0,
            'fnote': 4009,
            'url': 'http://stream6.qqmusic.qq.com/13234505.wma',
            'time_public': '2008-08-26',
            'singer': [{
                'id': 143,
                'mid': '003Nz2So3XXYek',
                'name': '陈奕迅',
                'title': '陈奕迅'
            }],
            'album': {
                'id': 35776,
                'mid': '000gpcQK4XrHUF',
                'name': 'Solidays',
                'title': 'Solidays',
                'subtitle': ''
            },
            'mv': {
                'id': 173503,
                'vid': 'q0011p39o55'
            },
            'ksong': {
                'id': 0,
                'mid': '001zoLqq2RrpFM'
            },
            'file': {
                'media_mid': '001PpG3B0TR4UH',
                'size_try': 0,
                'try_begin': 0,
                'try_end': 0,
                'size_24aac': 701277,
                'size_48aac': 1365567,
                'size_96aac': 2556612,
                'size_192aac': 4844247,
                'size_192ogg': 4543935,
                'size_128mp3': 3563740,
                'size_320mp3': 8909020,
                'size_aac': 1365567,
                'size_ogg': 4543935,
                'size_128': 3563740,
                'size_320': 8909020,
                'size_ape': 19537522,
                'size_flac': 19749952,
                'size_dts': 0
            },
            'volume': {
                'gain': 0.0,
                'peak': 0.0,
                'lra': 0.0
            },
            'pay': {
                'pay_month': 1,
                'price_track': 200,
                'price_album': 0,
                'pay_play': 0,
                'pay_down': 1,
                'pay_status': 0,
                'time_free': 0
            },
            'action': {
                'switch': 17413891,
                'msgid': 14,
                'msgpay': 6,
                'alert': 100021,
                'icons': 147324
            }
        }, {
            'id': 105937539,
            'type': 0,
            'songtype': 13,
            'mid': '0020rxSH2gkIjz',
            'name': '月球下的人',
            'title': '月球下的人',
            'subtitle': '',
            'interval': 283,
            'isonly': 1,
            'language': 1,
            'genre': 1,
            'index_cd': 0,
            'index_album': 5,
            'status': 0,
            'fnote': 4009,
            'url': 'http://stream3.qqmusic.qq.com/117937539.wma',
            'time_public': '2016-04-18',
            'singer': [{
                'id': 3860,
                'mid': '001qDxJb18rQ8c',
                'name': '李幸倪',
                'title': '李幸倪'
            }],
            'album': {
                'id': 1329523,
                'mid': '000tbCh12RdPbg',
                'name': 'beGin',
                'title': 'beGin',
                'subtitle': ''
            },
            'mv': {
                'id': 673449,
                'vid': 'j0019w7ruug'
            },
            'ksong': {
                'id': 0,
                'mid': '001RQrqE1Nkvy2'
            },
            'file': {
                'media_mid': '0020rxSH2gkIjz',
                'size_try': 0,
                'try_begin': 75048,
                'try_end': 115983,
                'size_24aac': 899262,
                'size_48aac': 1774417,
                'size_96aac': 3457827,
                'size_192aac': 6533798,
                'size_192ogg': 6153735,
                'size_128mp3': 4543836,
                'size_320mp3': 11359287,
                'size_aac': 1774417,
                'size_ogg': 6153735,
                'size_128': 4543836,
                'size_320': 11359287,
                'size_ape': 0,
                'size_flac': 0,
                'size_dts': 0
            },
            'volume': {
                'gain': 0.0,
                'peak': 0.0,
                'lra': 0.0
            },
            'pay': {
                'pay_month': 1,
                'price_track': 200,
                'price_album': 0,
                'pay_play': 0,
                'pay_down': 1,
                'pay_status': 0,
                'time_free': 0
            },
            'action': {
                'switch': 17413891,
                'msgid': 14,
                'msgpay': 6,
                'alert': 100021,
                'icons': 147324
            }
        }, {
            'id': 444607,
            'type': 0,
            'songtype': 13,
            'mid': '004QZYUH0NgqFp',
            'name': '捞月亮的人',
            'title': '捞月亮的人',
            'subtitle': '',
            'interval': 219,
            'isonly': 1,
            'language': 1,
            'genre': 1,
            'index_cd': 0,
            'index_album': 3,
            'status': 0,
            'fnote': 4009,
            'url': 'http://stream2.qqmusic.qq.com/12444607.wma',
            'time_public': '2008-09-26',
            'singer': [{
                'id': 171,
                'mid': '000xogLP35ayzS',
                'name': '杨千嬅',
                'title': '杨千嬅'
            }],
            'album': {
                'id': 36202,
                'mid': '002z6Gua0pfTBj',
                'name': 'Wonder Miriam',
                'title': 'Wonder Miriam',
                'subtitle': '《圆缺》粤语版'
            },
            'mv': {
                'id': 0,
                'vid': ''
            },
            'ksong': {
                'id': 0,
                'mid': '004UuTDn24Fe9y'
            },
            'file': {
                'media_mid': '001zpbA10dTMuK',
                'size_try': 0,
                'try_begin': 0,
                'try_end': 0,
                'size_24aac': 682883,
                'size_48aac': 1337759,
                'size_96aac': 2676559,
                'size_192aac': 5322633,
                'size_192ogg': 4789270,
                'size_128mp3': 3516926,
                'size_320mp3': 8791989,
                'size_aac': 1337759,
                'size_ogg': 4789270,
                'size_128': 3516926,
                'size_320': 8791989,
                'size_ape': 19929377,
                'size_flac': 20043239,
                'size_dts': 0
            },
            'volume': {
                'gain': 0.0,
                'peak': 0.0,
                'lra': 0.0
            },
            'pay': {
                'pay_month': 1,
                'price_track': 200,
                'price_album': 0,
                'pay_play': 0,
                'pay_down': 1,
                'pay_status': 0,
                'time_free': 0
            },
            'action': {
                'switch': 17413891,
                'msgid': 14,
                'msgpay': 6,
                'alert': 100002,
                'icons': 139132
            }
        }],
        'visitnum': 22,
        'cmtnum': 0,
        'buynum': 0,
        'scoreavage': '0.0',
        'scoreusercount': 0
    }],
    'realcdnum': 1
}

2.专辑接口

https://c.y.qq.com/v8/fcg-bin/fcg_v8_album_info_cp.fcg?albummid=000QXjVc1r7NQO

该接口请求地址中除了albummid是有效参数外,其余都是无效参数,甚至连请求头都不用构造,同样是返回json。
该接口同样返回很多数据,于我而言,只需要最好的音质以及songmid写一个json文件就行了
返回数据示例:

{
    'code': 0,
    'data': {
        'aDate': '2018-09-12',
        'albumTips': '',
        'color': 2305342,
        'company': '北京有此山文化传媒有限公司',
        'company_new': {
            'brief': '',
            'headPic': '',
            'id': 96238,
            'is_show': 1,
            'name': '北京有此山文化传媒有限公司'
        },
        'cur_song_num': 1,
        'desc': '自然固有潮汐\n热烈的、兴奋的,自然是欢欣鼓舞\n质疑的、哀怨的,也得要待到从头\n溯洄从之,道阻且长。也如流淌,也如生活。\n',
        'genre': 'Pop 流行',
        'id': 4605253,
        'lan': '国语',
        'list': [{
            'albumdesc': '',
            'albumid': 4605253,
            'albummid': '000QXjVc1r7NQO',
            'albumname': '从头',
            'alertid': 100002,
            'belongCD': 1,
            'cdIdx': 0,
            'interval': 208,
            'isonly': 0,
            'label': '0',
            'msgid': 14,
            'pay': {
                'payalbum': 0,
                'payalbumprice': 0,
                'paydownload': 1,
                'payinfo': 1,
                'payplay': 0,
                'paytrackmouth': 1,
                'paytrackprice': 200,
                'timefree': 0
            },
            'preview': {
                'trybegin': 0,
                'tryend': 0,
                'trysize': 0
            },
            'rate': 23,
            'singer': [{
                'id': 940748,
                'mid': '004WgCsE3KBddt',
                'name': '陈粒'
            }],
            'size128': 3335084,
            'size320': 8337429,
            'size5_1': 0,
            'sizeape': 0,
            'sizeflac': 43902080,
            'sizeogg': 4461478,
            'songid': 217139396,
            'songmid': '001hnH5h3NvqKx',
            'songname': '从头',
            'songorig': '从头',
            'songtype': 0,
            'strMediaMid': '000lOhOr0ektcd',
            'stream': 13,
            'switch': 17413891,
            'type': 0,
            'vid': ''
        }],
        'mid': '000QXjVc1r7NQO',
        'name': '从头',
        'radio_anchor': 0,
        'singerid': 940748,
        'singermblog': None,
        'singermid': '004WgCsE3KBddt',
        'singername': '陈粒',
        'song_begin': 0,
        'total': 1,
        'total_song_num': 1
    },
    'message': 'succ',
    'subcode': 0
}

3.歌曲接口
暂未去分析接口,接口带的数据太多,调试起来很麻烦。更改ua之后访问

https://i.y.qq.com/v8/playsong.html?songmid=000O4VzT4Md9S8

发现网页中有一个audio标签,包含了歌曲的试听链接,链接中就有歌曲的vkey,对于QQ音乐下载来说,vkey是最为关键的。
标签内容如下:

<audio id="h5audio_media" height="0" width="0" 
src="http://dl.stream.qqmusic.qq.com/C400000O4VzT4Md9S8.m4a?guid=8738455084&amp;vkey=CC599E2CA6F330E08889E5DF931A9E67DFAF118AF4B08D0D155ECE7E6C6E0F8E6A3C0D75D4DE45ACB6A46F345515B52ED4C83B37115B6E2D&amp;uin=7465&amp;fromtag=38" 
autoplay="" __idm_id__="378182657">
</audio>

能够在网页上试听的音乐能够很方便的获取到vkey,对于不能直接获取到vkey的,目前我正在尝试抓包,希望能发现其他接口

  1. 下载音乐
    有了歌曲的vkey之后,直接构造链接下载即可,audio标签里链接内含的各个参数除了修改fromtag=53之外,将链接中的song参数修改即可
ape地址构造:
“http://dl.stream.qqmusic.qq.com/A000” + songmid + “.ape” + “?vkey=” + vkey + “&guid=” + guid + “&uin=” + uin + “&fromtag=53
flac地址构造:
“http://dl.stream.qqmusic.qq.com/F000” + songmid + “.flac” + “?vkey=” + vkey + “&guid=” + guid + “&uin=” + uin + “&fromtag=53
320kbps mp3地址构造:
“http://dl.stream.qqmusic.qq.com/M800” + songmid + “.mp3” + “?vkey=” + vkey + “&guid=” + guid + “&uin=” + uin + “&fromtag=53
128kbps mp3地址构造:
“http://dl.stream.qqmusic.qq.com/M500” + songmid + “.mp3” + “?vkey=” + vkey + “&guid=” + guid + “&uin=” + uin + “&fromtag=53
上一篇下一篇

猜你喜欢

热点阅读