精华内容
下载资源
问答
  • QQ音乐API

    千次阅读 2019-04-08 08:49:03
    QQ音乐API ** 效果图: URL: 通过这条接口查找到这10条歌曲每一条的Songmid https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=10&w=邓紫棋; 这条链接获取到QQ...

    **

    QQ音乐API

    **
    效果图:
    在这里插入图片描述

    URL:
    通过这条接口查找到这10条歌曲每一条的Songmid
    https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=10&w=邓紫棋;

    这条链接获取到QQ音乐当前使用的地址(QQ音乐不定期换地址,本人跳过这个坑)
    https://u.y.qq.com/cgi-bin/musicu.fcg?-=getplaysongvkey09489699031337162&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0&data={"req"%3A{"module"%3A"CDN.SrfCdnDispatchServer"%2C"method"%3A"GetCdnDispatch"%2C"param"%3A{"guid"%3A"9167391000"%2C"calltype"%3A0%2C"userip"%3A""}}%2C"req_0"%3A{"module"%3A"vkey.GetVkeyServer"%2C"method"%3A"CgiGetVkey"%2C"param"%3A{"guid"%3A"9167391000"%2C"songmid"%3A["001C1g8J0Tvpg1"]%2C"songtype"%3A[0]%2C"uin"%3A"0"%2C"loginflag"%3A1%2C"platform"%3A"20"}}%2C"comm"%3A{"uin"%3A0%2C"format"%3A"json"%2C"ct"%3A24%2C"cv"%3A0}}

    这条链接获取vkey 值
    https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?format=json205361747&platform=yqq&cid=205361747&songmid=songid&filename=C400songmid.m4a&guid=000000000

    拼接出来的完整链接

    http://183.60.131.112/amobile.music.tc.qq.com/C400003jjoM94WLiTf.m4a?guid=000000000&vkey=9913194CD49391D2EEB241160C526D16FFCED7067BA7EFFECB016827191DD9EBD6F9E7F79F72AA3921579C96FDBEFD67AC1BA8DB2FEA1A24&fromtag=0

    代码
    下图代码获取songmid,pagesize需要搜索多少条歌曲,text歌曲或歌手的名称
    在这里插入图片描述
    下图代码获取拼接获取到的数据
    在这里插入图片描述
    获取QQ音乐IP和vkey值,并将完整路径拼接

    在这里插入图片描述
    完整下载代码地址
    百度网盘链接:https://pan.baidu.com/s/1oR8XGHegGT9VvEmnbDgGGA
    提取码:4s48

    展开全文
  • qq音乐 api

    千次阅读 2013-07-30 20:49:02
    所以就想方设法弄到了QQ音乐API 已经用xCode尝试过并且可行的API: ★搜索音乐(歌词) http://shopcgi.qqmusic.qq.com/fcgi-bin/shopsearch.fcg?value= 歌曲名&artist=歌手名&type=qry_song&out=json&...

    http://www.cocoachina.com/bbs/read.php?tid=115028


    主题 : QQ音乐的各种相关API 推荐到问答系统
    级别: 侠客
    UID: 78402
    精华:0
    发帖: 124
    威望: 781 点
    贡献值: 0 点
    在线时间: 86(时)
    注册时间: 2011-06-29
    最后登录: 2013-07-18
    楼主 :发表于: 2012-09-08 21:10    发自: Web Page
    来源于 一般讨论 分类

    QQ音乐的各种相关API   

    基本上论坛里做在线音乐的都在用百度的API,进来发现百度的API不仅歌曲的质量不可以保证,而且返回信息里面只有URL,没有一些相关的属性信息。所以就想方设法弄到了QQ音乐的API

    已经用xCode尝试过并且可行的API:
    ★搜索音乐(歌词)
    http://shopcgi.qqmusic.qq.com/fcgi-bin/shopsearch.fcg?value=歌曲名&artist=歌手名&type=qry_song&out=json&page_no=页码&page_record_num=单页记录数量
    这个网上搜索不到的,自己用fiddler抓出来的,会返回一个json,注意的是返回的json的key没有用引号引起来而且需要对URL本身和返回的内容使用gb2312编(解)码
    看这样一个例子:
    复制代码
    1.         NSString *title=@"记得";
    2.         NSString *artist=@"林俊杰";
    3.         
    4.         //-使用歌名和歌手执行搜索
    5.         NSString *searchURLString=[NSString stringWithFormat:@"http://shopcgi.qqmusic.qq.com/fcgi-bin/shopsearch.fcg?value=%@&artist=%@&type=qry_song&out=json&page_no=%i&page_record_num=%i",title,artist,1,3];
    6.         searchURLString=[searchURLString stringByAddingPercentEscapesUsingEncoding:NSGB2312StringEndoding];
    7.         NSString *searchResult=[NSString stringWithContentsOfURL:[NSURL URLWithString:searchURLString] encoding:NSGB2312StringEndoding error:nil];
    8.         NSLog(@"%@",searchResult);

    就会得到这样的不标准json,之后的步骤简单的就说下,截取searchCallBack()中间的内容,对key进行加引号,然后就可以用json解码框架来解码
    复制代码
    1. searchCallBack({result:"0",msg:"",totalnum:"138",curnum:"3",search:"记得",songlist:[{idx:"1",song_id:"1679711",song_name:"记得",album_name:"上海老歌 CD07",singer_name:"欧阳飞莺(Chu Shia)",location:"8",singer_id:"16343",album_id:"133528",price:"250"},{idx:"2",song_id:"1516144",song_name:"记得",album_name:"小精选",singer_name:"刘浩龙",location:"3",singer_id:"4797",album_id:"122193",price:"250"},{idx:"3",song_id:"1512932",song_name:"记得(《爱情睡醒了》插曲)",album_name:"爱情睡醒了",singer_name:"林俊杰",location:"8",singer_id:"4286",album_id:"121988",price:"320"}]})


    ★下载歌词
    搜索完成后,每首歌曲会对应一个price属性,如果这个属性对应的值是250就说明没有歌词,确认有歌词,就可以用下面的接口下载歌词
    http://music.qq.com/miniportal/static/lyric/歌曲id求余100/歌曲id.xml
    如果正常会返回这样的xml(json的返回地址没抓到)

    看这个例子:
    前一个例子中返回的第三首歌有的price属性值为320,表示有歌词,如果下载这首歌的歌词,就用这个url:
    http://music.qq.com/miniportal/static/lyric/32/1512932.xml
    腾讯就会送回这样的xml
    复制代码
    1. <lyric>
    2. <![CDATA[
    3. [ti:记得]
    4. [ar:林俊杰]
    5. [al:288966]
    6. [offset:0]
    7. [00:17.55]谁还记得
    8. [00:19.33]是谁先说永远的爱我
    9. [00:26.03]以前的一句话
    10. [00:29.02]是我们以后的伤口
    11. [00:33.75]过了太久
    12. [00:35.47]没人记得当初那些温柔
    13. [00:42.40]我和你手牵手
    14. [00:45.36]说要一起走到最后
    15. [01:06.37]我们都忘了
    16. [01:11.05]这条路走了多久
    17. [01:15.11]心中是清楚的
    18. [01:17.49]有一天有一天都会停的
    19. [01:23.04]让时间说真话
    20. [01:26.94]虽然我也害怕
    21. [01:31.00]在天黑了以后
    22. [01:33.29]我们都不知道会不会有以后
    23. [01:41.82]谁还记得
    24. [01:43.61]是谁先说永远的爱我
    25. [01:50.24]以前的一句话
    26. [01:53.24]是我们以后的伤口
    27. [01:57.77]过了太久
    28. [01:59.44]没人记得当初那些温柔
    29. [02:06.20]我和你手牵手
    30. [02:09.07]说要一起走到最后
    31. [02:30.40]我们都累了
    32. [02:34.44]却没办法往回走
    33. [02:38.34]两颗心都迷惑
    34. [02:40.69]怎么说怎么说都没有救
    35. [02:46.22]亲爱的为什么
    36. [02:50.21]也许你也不懂
    37. [02:54.11]两个相爱的人
    38. [02:56.65]等着对方先说找分开的理由
    39. [03:05.15]谁还记得爱情开始变化的时候
    40. [03:13.52]我和你的眼中
    41. [03:16.49]看见了不同的天空
    42. [03:21.09]走的太远
    43. [03:22.77]终于走到分岔路的路口
    44. [03:29.40]是不是你和我
    45. [03:32.40]要有两个相反的梦
    46. [03:40.84]谁还记得
    47. [03:42.60]是谁先说永远的爱我
    48. [03:49.38]以前的一句话
    49. [03:52.22]是我们以后的伤口
    50. [03:56.82]过了太久
    51. [03:58.44]没人记得当初那些温柔
    52. [04:05.48]我和你手牵手
    53. [04:08.15]说要一起走到最后
    54. [04:21.42]我和你手牵手
    55. [04:24.36]说要一起走到以后
    56. ]]>
    57. </lyric>


    如果你用price为250的歌曲对应的id来搜索,比如第一个例子中的第一首歌,那么你使用的这个url:
    http://music.qq.com/miniportal/static/lyric/11/16797.xml

    那么就会送回404错误信息:
    复制代码
    1. The requested URL '/miniportal/static/lyric/11/1679711.xml' was not found on this server.


    ★获取专辑插图
    如果需要获取专辑插图,就可以使用下面的接口
    http://imgcache.qq.com/music/photo/album/专辑id求余100/albumpic_专辑id_0.jpg
    看这个例子:
    要获取第一个例子的中的第三个结果的专辑插图,就这么用:
    http://imgcache.qq.com/music/photo/album/88/albumpic_121988_0 .jpg
    就会返回500*500的插图(QQ音乐的插图清晰度很高)

    ★获取排行榜(尚未经过xCode测试)
    目前抓到两个排行榜的地址:
    新歌榜:http://music.qq.com/musicbox/shop/v3/data/hit/hit_newsong.js
    总榜:http://music.qq.com/musicbox/shop/v3/data/hit/hit_all.js

    因为还没有进行进一步的尝试就不放例子了

    ★获取音乐地址
    http://stream1歌曲信息中的location值.qqmusic.qq.com/3歌曲ID(7位数,不足在前面补0). mp3
    例如之前搜索出来的第一首歌的地址应该是:
    http://stream18.qqmusic.qq.com/31679711. mp3
    第二首歌的地址应该是
    http://stream13.qqmusic.qq.com/31516144. mp3

    这个仍然在测试中

    希望对和我一样正在努力做在线音乐的童鞋有些帮助

    [ 此帖被hxy060799在2012-09-09 11:20重新编辑 ]

    清空我的评分动态本帖最近评分记录: 共1条评分记录
    rainbird 可可豆 +5 2012-09-08 优秀文章  
    隐藏评分记录  
    级别: 侠客
    UID: 157939
    精华:0
    发帖: 96
    威望: 195 点
    贡献值: 0 点
    在线时间: 38(时)
    注册时间: 2012-07-29
    最后登录: 2013-07-27
    沙发 :发表于: 2012-09-08 22:15    发自: Web Page
    lz,赞一个~
    级别: 新手上路
    UID: 151522
    精华:0
    发帖: 38
    威望: 69 点
    贡献值: 0 点
    在线时间: 91(时)
    注册时间: 2012-06-29
    最后登录: 2013-07-30
    板凳 :发表于: 2012-09-10 08:50    发自: Web Page
    赞一个,强大
    级别: 新手上路
    UID: 79555
    精华:0
    发帖: 60
    威望: 78 点
    贡献值: 0 点
    在线时间: 289(时)
    注册时间: 2011-07-05
    最后登录: 2013-07-30
    3 楼: 发表于: 2012-09-10 09:38    发自: Web Page
    支持下楼主啊
    级别: 新手上路
    UID: 112261
    精华:0
    发帖: 42
    威望: 96 点
    贡献值: 0 点
    在线时间: 59(时)
    注册时间: 2011-12-12
    最后登录: 2013-07-30
    4 楼: 发表于: 2012-09-11 11:30    发自: Web Page
    收集调试还是需要花时间的,赞一个
    级别: 精灵王

    UID: 124167
    精华:0
    发帖: 1259
    威望: 3375 点
    贡献值: 1 点
    在线时间: 315(时)
    注册时间: 2012-02-17
    最后登录: 2013-07-29
    5 楼: 发表于: 2012-09-11 13:27    发自: Web Page
    楼主真心牛逼啊!!神童,学习也要抓紧啊!加油!
    级别: 侠客
    UID: 122331
    精华:0
    发帖: 100
    威望: 316 点
    贡献值: 0 点
    在线时间: 97(时)
    注册时间: 2012-02-08
    最后登录: 2013-07-30
    6 楼: 发表于: 2012-09-12 14:46    发自: Web Page
       初二的大神!!!Mark

    努力 +  努力 + 努力 .....

          ------  http://weibo.com/leeronchi
    级别: 新手上路
    UID: 154435
    精华:0
    发帖: 17
    威望: 44 点
    贡献值: 0 点
    在线时间: 7(时)
    注册时间: 2012-07-13
    最后登录: 2013-07-30
    7 楼: 发表于: 2012-09-12 17:44    发自: Web Page
    楼主犀利~
    级别: 新手上路
    UID: 167421
    精华:0
    发帖: 2
    威望: 2 点
    贡献值: 0 点
    在线时间: 3(时)
    注册时间: 2012-09-19
    最后登录: 2013-07-19
    8 楼: 发表于: 2012-09-24 16:57    发自: Web Page
    楼主啊,你说的对对key进行加引号怎么加呀,就这个我不太会呀,能教教我吧
    级别: 实习版主
    UID: 152587
    精华:0
    发帖: 459
    威望: 1128 点
    贡献值: 0 点
    在线时间: 80(时)
    注册时间: 2012-07-05
    最后登录: 2013-07-25
    9 楼: 发表于: 2012-09-24 17:35    发自: Web Page
    lz  赞一个
    我一直陪你在线,可你始终不知道。
    快速回复
    关注本帖(如果有新回复会站内信通知您)

    验证问题:
    CocoaChina成立于? 正确答案:2008
    按"Ctrl+Enter"直接提交

    展开全文
  • qq音乐api接口 安卓版

    2017-11-23 11:39:37
    qq音乐api接口 安卓版,有歌词和高品质音乐接口 资源略贵
  • QQ音乐API QQ音乐API koa2版本,通过Web网页版请求QQ音乐接口数据,有问题请提 当前代码仅共学习,不可做商业用途 API结构图 目前暂时没有时间做登录模块的接口,欢迎各位大佬给我PR ,阿里嘎多 环境要求 因为本...
  • 网易云QQ音乐API php解析源码亲测可用
  • QQ音乐API(python实现) 蜜蜂 QQ音乐API,仅实现部分功能 使用示例 use.py 统计歌手独唱歌曲(即singer列表里仅有一人)的收藏数,目前只包含接口第一页的歌曲(每年100首) use_multi_singer.py 包含了多人演唱的...
  • 2019最新QQ音乐Api

    万次阅读 多人点赞 2019-10-09 12:46:16
    不能获取到qq音乐的vip或者付费歌曲的播放地址,Api是通过fiddler4爬取网页端qq音乐获取的,如失效,请在评论指出 前言 最近重构了自己的安卓版的音乐播放器,主要是因为之前使用的音乐相关Api都失效了,索性自己来...

    下面的请求中如果参数有songmid,都是得经过搜索歌曲或歌手后才能获得songmid,然后进行请求。不能获取到qq音乐的vip或者付费歌曲的播放地址,Api是通过fiddler4爬取网页端qq音乐获取的,如失效,请在评论指出

    前言

    最近重构了自己的安卓版的音乐播放器,主要是因为之前使用的音乐相关Api都失效了,索性自己来找Api,于是利用fiddler4爬取网页端qq音乐获取到了项目所需要的Api,途中也遇到了许多坑,但是通过自己的努力解决了问题,所以在这里分享一波!

    一、 搜索

    1.搜索歌手/歌曲

    请求地址:https://c.y.qq.com

    请求示例:https://c.y.qq.com/soso/fcgi-bin/client_search_cp?p=1&n=2&w=泡沫&format=json

    说明:关键字为歌手就返回该歌手的歌曲,如果为歌曲就返回该歌曲列表

    参数 说明 是否必须 默认值
    p 分页 默认为1
    n 请求数量 默认为10
    w 关键字
    format 格式化 如果用Retrofit的Json解析的话记得一定要format=json

    2.搜索专辑

    请求地址:https://c.y.qq.com

    请求示例:https://c.y.qq.com/soso/fcgi-bin/client_search_cp?p=1&n=2&w=邓紫棋&format=json&t=8

    参数 说明 是否必须 默认值
    p 分页 默认为1
    n 请求数量 默认为10
    w 关键字
    format 格式化 如果用Retrofit的Json解析的话记得一定要format=json
    t 类别 没有默认值,如果为搜索专辑,则t为8。如果是搜索mv,t=12。

    二、 获取图片

    1.根据歌手获取图片

    请求地址:http://music.163.com

    请求示例:http://music.163.com/api/search/get/web?s=邓紫棋&type=100

    说明:请求后将有歌手图片的字段,请求后的picUrl和img1v1Url就是图片地址

    参数 说明 是否必须 默认值
    s 歌手
    type 类别 无,但必须为100

    !!!注意:有可能在网上能够请求到数据,但在实际代码中请求时却不能返回的情况(自己在开发中碰到),这时候别着急,只需要在网络请求时加上请求头**“User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36”**就能解决问题!

    2. 根据albumMID获取专辑图片

    请求地址:http://y.gtimg.cn

    请求示例:http://y.gtimg.cn/music/photo_new/T002R180x180M000003c616O2Zlswm.jpg

    说明:请求示例其实有两部分组成,即固定地址+albumMid。

    组成 说明
    固定地址 http://y.gtimg.cn/music/photo_new/T002R180x180M000 固定值,不需要改变
    albumMid 在搜索专辑后,或者搜索歌曲会有albumMid这个字段 需要先搜索后得到albumMid

    三、 获取播放地址

    如果用的是Retrofit请求,则需要在请求时加上encoded = true的参数,不然请求时会出现-500001的错误。代码示例:

    @GET(Api.SONG_URL)
    Observable<SongUrl> getSongUrl(@Query(value = "data",encoded = true) >String data);
    

    请求地址:https://u.y.qq.com

    请求示例:https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&data=%7B%22req_0%22%3A%7B%22module%22%3A%22vkey.GetVkeyServer%22%2C%22method%22%3A%22CgiGetVkey%22%2C%22param%22%3A%7B%22guid%22%3A%22358840384%22%2C%22songmid%22%3A%5B%22001X0PDf0W4lBq%22%5D%2C%22songtype%22%3A%5B0%5D%2C%22uin%22%3A%221443481947%22%2C%22loginflag%22%3A1%2C%22platform%22%3A%2220%22%7D%7D%2C%22comm%22%3A%7B%22uin%22%3A%2218585073516%22%2C%22format%22%3A%22json%22%2C%22ct%22%3A24%2C%22cv%22%3A0%7D%7D

    说明:这个是根据歌曲songmid来获得音乐播放地址的,请求示例很长,在经过多次尝试后,很遗憾的并不能缩减,要想获取播放地址,只需要更改上面蓝色字体的songmid后的001X0PDf0W4lBq即可,至于更改方法很多,比如直接用Java的字符串拼接。请求成功后请注意两个字段purl和sip(为数组),歌曲的播放地址就是sip数组里的其中一个加上pur,即sip[0]+purl(vip音乐或者版权音乐的purl为空)。

    1. 请求时的参数说明

    参数 说明
    songmid 歌曲的songmid怎么得到,必须通过上面搜索歌曲后得到,然后更改上面示例的001X0PDf0W4lBq(泡沫的songmid)即可,示例的其它地方都不能做更改,也不能删减

    2.请求后重要字段解释

    播放地址:sip[0]+purl

    示例:http://ws.stream.qqmusic.qq.com/C400000HjG8v1DTWRO.m4a?guid=358840384&vkey=852D30CD2DEA9E0AFF9CF700977FAFB413A06486CFE8F72502918665277C5407D8D5AD42039F02329401300003A2853B10816B83C3145159&uin=0&fromtag=66(泡沫)

    字段 说明 示例
    sip 播放接口地址,目前来说有两个地址,但是很有可能会改变 “sip”: [
    “http://ws.stream.qqmusic.qq.com/”,
    “http://isure.stream.qqmusic.qq.com/”
    ]
    purl 里面最重要的就是vkey的值,这个值每次请求都不一样 C400000HjG8v1DTWRO.m4a?guid=358840384&
    vkey=852D30CD2DEA9E0AFF9CF700977FAFB413A06486CFE8F7250
    2918665277C5407D8D5AD42039F02329401300003A2853B10816B83C3145159
    &uin=0&fromtag=66

    四、 获取歌词

    请求地址:https://c.y.qq.com

    请求示例:https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=000wocYU11tSzS&format=json&nobase64=1

    说明:如果你点击了上面的链接的话,你会发现返回的是-1310的错误码,这时候请别着急,并不是这个请求Api是无效的,只是因为这个获取歌词的Api有点特殊,在请求时需要在请求的header上加上Referer地址就可以了

    参数 说明
    songmid 歌曲songmid,需要在搜索歌曲后获取
    format 格式,建议加上format=json
    nobase64 敲重点!!!,一定要等于1,默认是0,如果没加上的话,返回的歌词将会是乱码,加上后就可以得到歌曲的动态歌词,即带有时间的歌词

    !!!敲重点:记得在请求头上加上Referer:https://y.qq.com/portal/player.html,不然请求会返回-1310

    加Header(安卓)

    1. OkHttp

    Request request = new Request.Builder()
                                .url(baseUrl)
                                .addHeader("Referer","https://y.qq.com/portal/player.html")
                                .build();
    

    2. Retrofit
    直接在@GET上面加上Headers注解

    @Headers(Referer:https://y.qq.com/portal/player.html)
    

    另外对音乐播放器自定义View歌词实现有兴趣的话可以看看这篇博客
    Android自定义View-简约风歌词控件

    展开全文
  • QQ音乐API爬取全过程

    2021-03-29 22:51:29
    QQ音乐API爬取全过程 1. 前序: 在以前的QQ音乐的API爬取中,是非常容易的,采用的是jsonp的请求方式,但现在QQ音乐请求已经全部改成XHR的ajax的方式发送请求,所以要爬取QQ音乐的数据就需要破解QQ音乐发送请求的...

    QQ音乐API爬取全过程

    1. 前序:

    在以前的QQ音乐的API爬取中,是非常容易的,采用的是jsonp的请求方式,但现在QQ音乐请求已经全部改成XHR的ajax的方式发送请求,所以要爬取QQ音乐的数据就需要破解QQ音乐发送请求的参数。

    2. 对于前端:

    在前端发送XHR请求的话会有请求端跨域限制,所以对于前端不能直接发送XHR请求到QQ音乐后端,而是要自己另外搭一个服务器,用我们的服务器去向QQ音乐发送请求。

    3. QQ音乐接口分析:

    以获取QQ音乐的焦点图为例。
    在这里插入图片描述
    这是我们要爬取的图片。在浏览器中按F12,然后查看network的xhr请求,可以看到。
    QQ音乐是从这里拿到的数据,所以对于这个接口分析。
    Request Header:
    在这里插入图片描述
    在这个请求的header中,是有服务端referer和origin限制的,所以为了骗过QQ音乐的服务器,我们在我们后台发的请求的header中也要把origin和referer设置成和QQ音乐一样。
    Query String Parameters:
    在这里插入图片描述
    可以看到QQ音乐的params中是有’-'和sign签名的,我们要拿到这个数据,首先就是要这两个的加密的获取方式,而在其他中,实际上都是一些静态数据,直接复制上去就好了。

    4. ‘-’和Sign的获取

    要知道怎么获取’-‘或者sign就必须知道这两个加密是怎么产生的,所以在浏览器的控制台中按ctrl+shift+f。
    首先我们搜索recom,在’-'中recom是一个不变的量。
    在ctrl+shift+f搜索到的文件中,先把它格式化,然后按ctrl+f就可以在文件中搜索我们要的数据。
    在这里插入图片描述
    在这里插入图片描述
    在这个请求中我们可以看到recom的获取是通过。

    'recom' + (Math.random() + '').replace('0.', '')
    

    这么一个方法。所以我们这个加在请求中就可以了。
    然后是sign的获取,sign的获取会些许麻烦。
    在这里插入图片描述
    用相同的方法,我们可以看到sign是从一个getSecuritySign获取的,然后这个方法使用通过一个js文件获取,链接挂在下面。

    '地址y.qq.com/component/m/qmfe-security-sign/index.umd.js?max_age=2592000'
    

    先把这个js格式化之后,可以大概的看一下这个js文件。
    在这里插入图片描述
    可以看到,封装了一个__sign_hash_20200305的function。
    所以我们把这个js复制下来,放到自己的文件当中,然后自己写一个方法去获取这个sign的值,然后把这个方法导出去。

    export default function getSecuritySign(data) {
      let str = 'abcdefghijklmnopqrstuvwxyz0123456789'
      let count = Math.floor(Math.random() * 7 + 10)
      let sign = 'zza'
      for (let i = 0; i < count; i++) {
        sign += str[Math.floor(Math.random() * 36)]
      }
      sign += window.__sign_hash_20200305('CJBPACrRuNy7' + JSON.stringify(data))
      return sign
    }
    

    这个data,就是我们在前面分析的Query String Parameters中的data数据。

    5.代码实现

    既然加密的数据我们都有自己的获取方式了,我们就可以写请求来获取数据了。
    笔者是是用vue-cli加上webpack打包写的,所以我前端的代码是封装了一个js文件,然后后端使用nodejs写在webpack.dev.config.js的before(app)中。
    前端:

    export function getRecommendAndDicsList () {
      const url = '/api/getTopBanner'
    
      let dataValue = {
        'comm': { 'ct': 24 },
        'category': { 'method': 'get_hot_category', 'param': { 'qq': '' }, 'module': 'music.web_category_svr' },
        'recomPlaylist': {
          'method': 'get_hot_recommend',
          'param': { 'async': 1, 'cmd': 2 },
          'module': 'playlist.HotRecommendServer'
        },
        'playlist': {
          'method': 'get_playlist_by_category',
          'param': { 'id': 8, 'curPage': 1, 'size': 40, 'order': 5, 'titleid': 8 },
          'module': 'playlist.PlayListPlazaServer'
        },
        'new_song': { 'module': 'newsong.NewSongServer', 'method': 'get_new_song_info', 'param': { 'type': 5 } },
        'new_album': {
          'module': 'newalbum.NewAlbumServer',
          'method': 'get_new_album_info',
          'param': { 'area': 1, 'sin': 0, 'num': 10 }
        },
        'new_album_tag': { 'module': 'newalbum.NewAlbumServer', 'method': 'get_new_album_area', 'param': {} },
        'toplist': { 'module': 'musicToplist.ToplistInfoServer', 'method': 'GetAll', 'param': {} },
        'focus': { 'module': 'music.musicHall.MusicHallPlatform', 'method': 'GetFocus', 'param': {} }
      }
      let sign = getSecuritySign(dataValue)
      const data = Object.assign({}, commonParams, {
        '-': 'recom' + (Math.random() + '').replace('0.', ''),
        platform: 'yqq.json',
        loginUin: 0,
        hostUin: 0,
        sign: sign,
        needNewCode: 0,
        inCharset: 'utf8',
        format: 'json',
        data: dataValue
      })
    
      return axios.get(url, {
        params: data
      }).then((res) => {
        return Promise.resolve(res.data)
      })
    }
    
    

    在这里是请求我们后端的一个/api/getTopBanner的接口。我们把需要的数据封装到请求的params中,然后在服务端,我们可以通过query来拿到需要的数据。
    在build/webpack.dev.config.js中写我们的nodejs代码

    app.get('/api/getTopBanner', function (req, res) {
            const url = 'https://u.y.qq.com/cgi-bin/musics.fcg'
            axios.get(url, {
              headers: {
                referer: 'https://y.qq.com/',
                origin: 'https://y.qq.com'
              },
              params: req.query
            }).then((response) => {
              response = response.data
              let category = response.category.data.category[0].items
              let dicsList = response.recomPlaylist.data.v_hot
              let content = response.focus.data && response.focus.data.shelf.v_niche[0].v_card
              let toplist = response.toplist.data.group
              if (dicsList.length > 10) {
                let newDicsList = []
                for (let i = 0; i < 10; i++) {
                  newDicsList[i] = dicsList[i]
                }
                dicsList = newDicsList
              }
              let newCategory = []
              let randomNumList = []
              while (newCategory.length < 4) {
                let randomNum = Math.floor(Math.random() * 16)
                if (randomNumList.indexOf(randomNum) > -1) {
                  continue
                }
                randomNumList.push(randomNum)
                newCategory.push(category[randomNum])
              }
              category = newCategory
              res.json({
                code: 0,
                data: {
                  slider: content,
                  dicsList: dicsList,
                  category: category,
                  toplist: toplist
                }
              })
            }).catch((e) => {
              console.log(e)
            })
          })
    

    在这里我们会拿到所需要的数据然后用res.json返回json数据给前端了。
    然后我们打印一下拿到的数据
    在这里插入图片描述
    这就是爬取QQ音乐的全过程了!
    from Tyreal

    展开全文
  • npm install axios -s
  • QQ音乐API整理

    2016-12-03 10:38:19
    QQ音乐API整理 blogmd 最近准备用vue做个音乐播放器,网上找了找音乐API,看了一圈,还是QQ音乐最合适,这里做个整理 歌曲搜索 接口地址 var num = 3, name = '王菲', urlString = `...
  • python调用QQ音乐API

    千次阅读 2019-08-08 00:36:13
    python调用QQ音乐API 1. 音乐搜索接口、其他接口 2. 获取token 3. 拼接播放地址 先上一份代码: import requests import pprint import json from selenium import webdriver # 音乐搜索接口 p, n, w = 1, 5, '碰'...
  • 怎么使用QQ音乐api搭建个人音乐站点

    千次阅读 2017-05-23 14:55:54
    怎么使用QQ音乐api搭建个人音乐站点最近经常有人在oschina上追问怎么用QQ音乐接口的问题。 闲得无聊,重新折腾了一下网页版QQ音乐压缩版源码,整理了一个完整音乐站点搭建的过程。 https://y.qq.com/ 话不多说,...
  • QQ音乐api在线文档 网易云音乐api在线文档 网易云音乐 网易云音乐提供了docker的镜像所以比较简单直接下面的命令启动就行了 注意镜像仓库配置为阿里云服务器地址其它没有什么要求 docker run -d -p 3000:3000 --name...
  • QQ音乐API分析2017

    2017-09-29 14:28:50
    官网提供API说明:此API主要针对移动端直接调用QQ音乐API用,API只能在QQAPP内执行,上线时间尚短。http://y.qq.com/m/api/api.html自己分析的API说明:根据官网https://y.qq.com/分析的API,经过测试,可以使用,...
  • 微信小程序调用qq音乐API接口

    千次阅读 2018-11-14 15:23:10
    微信小程序调用qq音乐API接口
  • QQ音乐API分析之-加密参数分析(sign计算)

    千次阅读 多人点赞 2020-12-21 17:28:42
    QQ音乐API加密参数分析1、背景2、QQ音乐sign计算3、Java代码实现4、总结 1、背景 不知道什么时候开始,各家音乐APP都开始对API进行加密,最近一段时间对六大音乐平台的加密算法进行了研究,逆向了网页端、安卓端等等...
  • 微信小程序使用QQ音乐API完整实例

    千次阅读 2020-03-25 12:18:38
    微信小程序使用QQ音乐API完整实例一、QQ音乐常用API接口:1.1、音乐搜索接口:1.2、最新音乐排行榜top1001.3. 随机推荐二、请求数据格式(以搜索为例)三、播放链接(重点)3.1、获取歌曲信息3.2 获取token3.3、拼接...
  • 2019最新版QQ音乐api调用(原创)

    万次阅读 多人点赞 2018-03-08 17:55:20
    下载QQ音乐任意歌曲方法: 1.首先在QQ音乐任意播放页面 2.进入开发者模式按F12即可 3.选择network,按ctrl+R进行筛选多媒体文件 4.优先选择大小排序右击最大的多媒体文件出来快捷菜单,选择如下图的...
  • QQ音乐API koa2实现 - 全接口实现

    千次阅读 2019-06-04 21:08:49
    QQ音乐API koa2 版本, 通过Web网页版请求QQ音乐接口数据, 有问题请提 issue, 或者你有其他想法欢迎PR. Github 知乎 掘金 环境要求 !> 因为本项目采用的是koa2, 所以请确保你的node版本是7.6.0+ node -v 安装 ...
  • MusicBee 歌词插件(基于QQ音乐API

    千次阅读 2017-08-03 12:48:51
    MusicBee 歌词插件(基于QQ音乐API)MusicBee 在初始情况下仅对外国的几个歌词数据库进行检索,得到的结果一般是不带时间轴的纯文本歌词,并且检索成功率并不高。自己写咯。
  • php开发个人音乐站 QQ音乐api

    千次阅读 2019-01-08 14:18:37
    做位一名优秀的程序员 工作时候戴耳机是不可避免的 然后又不知道该听什么好 下面小编就给大家简绍我自己听歌的神器 ... 话不多说 开撸! ...1.搜索歌曲API:http://s.music.qq.com/fcgi-bin/musi...
  • 分享qq音乐api

    千次阅读 2015-08-11 15:19:51
    1.通过这个可以获取到指定QQ号的QQ音乐列表: HTTP请求格式:GET 返回格式:json API地址: http://qzone-music.qq.com/fcg-bin/fcg_music_fav_getinfo.fcg 参数 dirinfo 是否返回用户音乐列表名称与id 为1时返回,为...
  • 今天在做项目的时候,发现调用QQ音乐轮播图的API一直失败 由于网易云服务器接口返回的数据类型并不是jsonp,是json,造成由于格式问题的报错。json是一种格式,jsonp是一种请求跨域资源的方式。 2、 浏览器拦截...
  • 这是一个apk文件可以直接使用 下载歌曲 只有搜索下载无播放功能 乐库为qq音乐 使用方法 1.先登陆,因为每个token每天有下载数量限制 可用小号测试 2.直接在toolbar中输入歌曲名 搜索 结果为list 单击选择需要的品质...
  • qq音乐api接口梳理

    千次阅读 2019-10-10 14:27:18
    注意:由于QQ音乐官方可能会更换接口地址或者修改某些参数,不能保证其接口随时的准确性,此博客只做学习参考使用,严禁用于商业用途。 一、推荐歌单 URL: ...g_tk=1278911659&jsonpCallback=recom34772972...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,172
精华内容 4,868
关键字:

qq音乐api