音乐播放器之QQ音乐最新api,亲测可用「建议收藏」

音乐播放器之QQ音乐最新api,亲测可用「建议收藏」大家好,前段时间重写了自己的音乐播放器,源码放在github上,源码地址和项目地址下面都有,如果喜欢记得star一下哈。由于之前给大家分享的api虽然可以用,但是版本太旧了,很多也没有了歌词,今天博主给大家分享一个最新的qq音乐api,亲测可用,话不多说直接上代码最新音乐leturl=’https://c.y.qq.com/v8/fcg-bin…

大家好,又见面了,我是你们的朋友全栈君。

大家好,前段时间重写了自己的音乐播放器,源码放在github上,源码地址和项目地址下面都有,如果喜欢记得star一下哈。

由于之前给大家分享的api虽然可以用,但是版本太旧了,很多也没有了歌词,今天博主给大家分享一个最新的qq音乐api,亲测可用,话不多说直接上代码

最新音乐

        let url = 'https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?g_tk=5381&uin=0&format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=h5&needNewCode=1&tpl=3&page=detail&type=top&topid=27&_=1519963122923';
        $.ajax({
          url:url,
          type:"get",
          dataType:'jsonp',
          jsonp: "jsonpCallback",
          scriptCharset: 'GBK',//解决中文乱码
          success: function(data){
            //最新音乐数据
          },
          error:function (e) {
            console.log('error');
          }
        });

这里用的是jsonp跨域,json数据获取成功后可以在数据中的songList数组下找到很多条数据,这些都是最新音乐的信息,打开其中一条,找到data并展开,找到两个重要参数字段songmid以及albummid,分别用获取歌曲源和歌词以及图片用的

推荐音乐

        let url = 'https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?g_tk=5381&uin=0&format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=h5&needNewCode=1&tpl=3&page=detail&type=top&topid=36&_=1520777874472';
        $.ajax({
          url:url,
          type:"get",
          dataType:'jsonp',
          jsonp: "jsonpCallback",
          scriptCharset: 'GBK',//解决中文乱码
          success: function(data){
          //推荐音乐数据
          },
          error:function (e) {
                console.log('error');
              }
        });

同样jsonp获取信息,得到数据和获取最新音乐差不多

歌曲

 
let url = 'https://api.bzqll.com/music/tencent/url?key=579621905&id='+songSmallMessage.songmid+'br=320''

这里的songmid就是上面所说过得啦,拿进来放到audio标签中就能直接听啦

搜索

let val = '青花瓷';
let url = 'https://c.y.qq.com/soso/fcgi-bin/search_for_qq_cp?g_tk=5381&uin=0&format=jsonp&inCharset=utf-8&outCharset=utf-8&notice=0&platform=h5&needNewCode=1&w='+val+'&zhidaqu=1&catZhida=1&t=0&flag=1&ie=utf-8&sem=1&aggr=0&perpage=20&n=20&p=1&remoteplace=txt.mqq.all&_=1520833663464';
$.ajax({
  url:url,
  type:"get",
  dataType:'jsonp',
  jsonp: "callback",
  jsonpCallback:'callback',
  scriptCharset: 'GBK',//解决中文乱码
  success: function(data){
    //获取搜索数据
  },
  error:function (e) {
    console.log('error');
    Indicator.close();
  }
});

歌词

获取歌词也算是个坎,因为QQ因为设置了防盗链我们需要伪装一下自己,单纯用js恐怕无法实现了,我们可以用后端语言去获取,博主用的是node,里有个request的依赖包,用来修改我们的header,从而得到数据

let url = "https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?callback=MusicJsonCallback_lrc&pcachetime=1494070301711&songmid="+songId+"&g_tk=5381&jsonpCallback=MusicJsonCallback_lrc&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0";
let options = {
    url: url,
    headers: {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36",
        "Accept": "*/*",
        "Referer": "https://y.qq.com/portal/player.html",
        "Accept-Language": "zh-CN,zh;q=0.8",
        "Cookie": "pgv_pvid=8455821612; ts_uid=1596880404; pgv_pvi=9708980224; yq_index=0; pgv_si=s3191448576; pgv_info=ssid=s8059271672; ts_refer=ADTAGmyqq; yq_playdata=s; ts_last=y.qq.com/portal/player.html; yqq_stat=0; yq_playschange=0; player_exist=1; qqmusic_fromtag=66; yplayer_open=1",
        "Host": "c.y.qq.com",
    }
};
request(options,(error, response, body)=>{
    if(!error && response.statusCode == 200){
    
        console.log(body);

    }else{
        console.log("error");
    }
});

上面获取的数据在body中,长这个样子

"MusicJsonCallback_lrc({\"retcode\":0,\"code\":0,\"subcode\":0,\"lyric\":\"W3RpOuaDs+S9oOS4gOaVtOWknF0NClthcjrlrZnlrZDmtrVdDQpbYWw65oOz5L2g5LiA5pW05aScXQ0KW2J5Ol0NCltvZmZzZXQ6MF0NClswMDowMC4yM13mg7PkvaDkuIDmlbTlpJwgLSDlrZnlrZDmtrUNClswMDowMS4wMF3or43vvJrlrZnlrZDmtrUNClswMDowMS4xNl3mm7LvvJrlrZnlrZDmtrUNClswMDowMS4zM13nvJbmm7LvvJrnjovmn4/puL8NClswMDowMS41Ml3liLbkvZzkurrvvJrotZbkvJ/plIsNClswMDowMS43NF3lkozlo7DnvJblhpkv5ZKM5aOw77ya6LWW5Lyf6ZSLDQpbMDA6MDIuNTdd5b2V6Z+z5biIL+W9lemfs+WupO+8muaxneaWh+WNmi9CaWcgSiBTdHVkaW8NClswMDowMy4wM13mt7fpn7PluIgv5re36Z+z5a6k77ya6LW16Z2WL0JpZyBKIFN0dWRpbw0KWzAwOjAzLjkzXeavjeW4puW3peeoi+W4iC/mr43luKblpITnkIblrqTvvJrlhajnm7jlvaYvT0ttYXN0ZXJpbmcgU3R1ZGlvDQpbMDA6MDQuNDldT1DvvJrljJfkuqznroDljZXlv6vkuZDmlofljJblj5HlsZXmnInpmZDlhazlj7gNClswMDowNS4wMV0KWzAwOjA1LjY0XeaDs+S9oCDmg7PkvaANClswMDowNy4wMV0KWzAwOjA4LjM2XeaDs+S9oOS4gOaVtOWknA0KWzAwOjEwLjcwXUNvbWUgb24NClswMDoxMS41OV0KWzAwOjEyLjU0XeS4iuS4gOenkuaIkeS7rOWkmuS5iOmAjemBpQ0KWzAwOjE1LjUzXeWDj+mmluatjOS4gOagtw0KWzAwOjE3LjUxXQpbMDA6MTguNDNd5bqf5LiA5byg54Gr6L2m56WoIOaKmOiFvuS4gOaZmuS4ig0KWzAwOjIxLjQ2XeWPquS4uuiDveaKseS4gOaKsQ0KWzAwOjIzLjU4XQpbMDA6MjQuMjJd5LiL5LiA56eS5oiR5Lus5aSa5LmI6K6h6L6DDQpbMDA6MjcuNDdd5YOP5a2p5a2Q5LiA5qC3DQpbMDA6MjkuNDddClswMDozMC40NV3ov5nlv4PotbfotbfkvI/kvI8g5LiN5piv5byA546p56yRDQpbMDA6MzMuNTBd5a6g5L2g5oiR5oiS5LiN5o6JDQpbMDA6MzUuNzVdClswMDozNy43NF3mg7PkvaDkuIDmlbTlpJwg5oiR6YO95rKh552hDQpbMDA6NDAuOTZd5YK755yL552A6L+Z5pif56m6DQpbMDA6NDMuMTNdClswMDo0My44NV3miJHnmoTlubznqJog5piv5oiR55qE6aKG6KKWDQpbMDA6NDYuOTdd5LiL5Luk5ZC75L2g6aKd5aS0DQpbMDA6NDkuMTFdClswMDo0OS43OV3niLHmg4XlsLHmmK/or6Ug55So5p2l56ew6aKCDQpbMDA6NTIuOTdd5b+D5Yqo5LiN5Lya5Y+Y5penDQpbMDA6NTUuMTVdClswMDo1NS44M13miYDosJPmhIEg5LiN6L+H5LiA56eN5b2i5a65DQpbMDA6NTguOThd5oiR5rKJ6YaJ5Zyo5byA5aS0DQpbMDE6MDEuMTBdClswMTowNC4wN13mg7PkvaAg5oOz5L2gDQpbMDE6MDUuNThdClswMTowNi45OV3mg7PkvaDkuIDmlbTlpJwNClswMTowOC42NV0KWzAxOjEzLjg0XeayoeeQhueUsea3i+mbqOmHjeeXheS4gOWcug0KWzAxOjE3LjAzXeaIkeWwseaYr+i/meagtw0KWzAxOjE5LjA3XQpbMDE6MTkuODVd5Ye65bGA6ICF55qE5L2Z5q+SIOi/mOmcgOimgemHiuaUvg0KWzAxOjIzLjA0XeaIkeeXm+eahOW+iOWao+W8oA0KWzAxOjI0Ljk3XQpbMDE6MjYuMDRd5Li65L2g5byD55aX5pyJ5LuA5LmI5aS45bygDQpbMDE6MjguOTZd5oiR5bCx5piv6L+Z5qC3DQpbMDE6MzAuODJdClswMTozMS45MV3mmK/ku5bku6zkuI3nn6XpgZMg5oiR5YaF5b+D5aSa5oOzDQpbMDE6MzQuOTdd5Li65LiA5Liq5Lq65Y+R54OnDQpbMDE6MzcuODJdClswMTozOS4yMV3mg7PkvaDkuIDmlbTlpJwg5oiR6YO95rKh552hDQpbMDE6NDIuNDdd5YK755yL552A6L+Z5pif56m6DQpbMDE6NDQuNjhdClswMTo0NS4yNV3miJHnmoTlubznqJog5piv5oiR55qE6aKG6KKWDQpbMDE6NDguNDhd5LiL5Luk5ZC75L2g6aKd5aS0DQpbMDE6NTAuNDhdClswMTo1MS4yMF3niLHmg4XlsLHmmK/or6Ug55So5p2l56ew6aKCDQpbMDE6NTQuNDZd5b+D5Yqo5LiN5Lya5Y+Y5penDQpbMDE6NTYuNjNdClswMTo1Ny4yNV3miYDosJPmhIEg5LiN6L+H5LiA56eN5b2i5a65DQpbMDI6MDAuNDNd5oiR5rKJ6YaJ5Zyo5byA5aS0DQpbMDI6MDIuODddClswMjowNC4xNF3mg7PkvaAg5oOz5L2gIOaDs+S9oA0KWzAyOjA3LjkzXQpbMDI6MDguNDdd5oOz5L2g5LiA5pW05aScDQpbMDI6MTAuMTFd5oOz5L2gIOaDs+S9oCDmg7PkvaANClswMjoxMy44MV0KWzAyOjE1LjA2XeaDs+S9oOS4gOaVtOWknCDmiJHpg73msqHnnaENClswMjoxOC40NF3lgrvnnIvnnYDov5nmmJ/nqboNClswMjoyMC41MF0KWzAyOjIxLjIyXeaIkeeahOW5vOeomiDmmK/miJHnmoTpooboopYNClswMjoyNC40NV3kuIvku6TlkLvkvaDpop3lpLQNClswMjoyNi42MF0KWzAyOjI3LjI0XeeIseaDheWwseaYr+ivpSDnlKjmnaXnp7DpooINClswMjozMC40OF3lv4PliqjkuI3kvJrlj5jml6cNClswMjozMi42M10KWzAyOjMzLjIxXeaJgOiwk+aEgSDkuI3ov4fkuIDnp43lvaLlrrkNClswMjozNi4zOV3miJHmsonphonlnKjlvIDlpLQ=\",\"trans\":\"\"})"

看到这串字符串了吗,不要方,我们先把这些数据拿到前台处理,其实他们是一个json串而已被函数MusicJsonCallback_lrc包着一同返回了,我们可以创建一个MusicJsonCallback_lrc函数并且在对这个字符串进行eval一下的得到的json字符串的lyric中的数据,这个数据是个base64形式的字符我们转换一下就可以看到歌词啦

import Base64 from 'js-base64'

eval(data);//把获取的字符串放进去,通过eval再次执行一次代码

//创建一个函数MusicJsonCallback_lrc
function MusicJsonCallback_lrc(data){
let lyric = Base64.Base64.decode(data.lyric);
console.log(lyric);//歌词
}

注意一下这里base64的解析用的是js-base64的所以记得先npm install js-base64 一下,然后引入,就可以看到歌词啦

博主自己做了一个音乐播放器如果喜欢记得star一下哈

github: https://github.com/hhzzcc/CMusic

项目地址:

音乐播放器之QQ音乐最新api,亲测可用「建议收藏」

效果图:

音乐播放器之QQ音乐最新api,亲测可用「建议收藏」

这些都是博主去QQ音乐上面一个个挖的以及参考一些大佬的博客得出来的心得,如果写的不好还请大家见谅,如果有疑问底下评论区可以提出来,或者私聊,博主会尽力即使给大家回复!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153177.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Oracle12c(PDB中) ORA-01017: invalid username/password; logon denied

    Oracle12c(PDB中) ORA-01017: invalid username/password; logon denied问题背景描述:SQL>altersessionsetcontainer=pdbwyzc;–切换pdbSQL>defineusername=eodaSQL>defineusernamepwd=fooSQL>createuser&&usernameidentifiedby&&usernamepwd;SQL>grantdbato&&username;

  • 【Python矩阵转置】| 试使用多方法实现[通俗易懂]

    【Python矩阵转置】| 试使用多方法实现[通俗易懂]矩阵的重要性:实际存储数据通常包含有特征根或是特征向量,是重要。借助Python实现矩阵运算不可或缺。在此过程中,矩阵的转置至关重要。下为几种常见的矩阵转置方法:方法一:(直接法)#step1:#初始化原始矩阵matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]#通过函数指出矩阵的行与列row=len(matrix)col=len(matrix[0])#step2:#交换矩阵的行与列ROW=

  • python二级考试报名_python语言程序设计二级考试真题

    python二级考试报名_python语言程序设计二级考试真题请注意看红色标识文字,图片均是超清图片,可以单击查看看见更大的世界,遇见更好的自己Seeabetterworldtomeetbetterforourselves.1.MMdnn—-MMdnn是一个深度学习的模型工具集,它能够互转模型文件、可视化模型结构、自动产生训练/推演的代码、辅助测试模型兼容性等。2.Matplotlib—-Matplotlib是一个高质…

  • vs安装本地nuget包(vs2015离线使用)

    今天想在项目中使用RestSharp,不过在nuget控制台中发现要么新版本不支持.net4.0,要么用老版本的下载不下来,最后没办法,在RestSharp网站上下载了离线安装包,怎样安装呢?方法之一,概括而言就是把安装包放在NuGet下载缓存目录下,下面就来打开目录:1.Tool-NuGetPackageManager-PackageManagerSettings2…

  • JS向数组添加元素,插入数据

    js中对于数组的操作很常见,下面记录一下js向数组添加元素的方法。letmyArray=[11,22,33];console.log(‘原数组:’,myArray);myArray.push(44,55);console.log(‘用push在数组后面插入元素:’,myArray);myArray.unshift(66,77);co…

  • 《TCP/IP具体解释卷2:实现》笔记–IP:网际协议

    《TCP/IP具体解释卷2:实现》笔记–IP:网际协议

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号