zoukankan      html  css  js  c++  java
  • 音乐API之QQ音乐

    欢迎大家来到我的博客,这是我在博客园写的第一篇文章,但不会是最后一篇,希望大家多多关注我,支持我哦!
    正文开始,今天我们要讲的是QQ音乐的API,都是来源于官方的地址,以前我也想写一个,但百度谷歌之后都是一些很久以前的,而今天的是我从QQ音乐客户端抓包而来,希望大家喜欢。

    本教程的示例代码为C# WPF,其他语言也可以,最关键的还是API嘛。
    首先我们需要搜索到音乐,取出他的各类值,才能进行播放
    http://59.37.96.220/soso/fcgi-bin/client_search_cp?format=json&t=0&inCharset=GB2312&outCharset=utf-8&qqmusic_ver=1302&catZhida=0&p={0}&n={1}&w={2}&flag_qc=0&remoteplace=sizer.newclient.song&new_json=1&lossless=0&aggr=1&cr=1&sem=0&force_zonghe=0
    {0} :当前页码数,从1开始
    {1} :每次请求返回的数量
    {2} :搜索关键词
    我们就能得到一些json,在C#中 我熟悉使用Newtonsoft.Json来操作JSON.
    例如这样:

    C#示例代码:

     1 Music m = new Music();
     2 
     3 m.MusicName = o["data"]["song"]["list"][i]["name"].ToString();
     4 
     5 string Singer = "";
     6 
     7 for (int osxc = 0; osxc != o["data"]["song"]["list"][i]["singer"].Count(); osxc++)
     8 
     9 { Singer += o["data"]["song"]["list"][i]["singer"][osxc]["name"] + "/"; }
    10 
    11 m.Singer = Singer.Substring(0, Singer.LastIndexOf("/"));//歌手
    12 
    13 m.ZJ = o["data"]["song"]["list"][i]["album"]["name"].ToString();//专辑
    14 
    15 m.MusicID = o["data"]["song"]["list"][i]["mid"].ToString();//音乐ID
    16 
    17 m.ImageID = o["data"]["song"]["list"][i]["album"]["mid"].ToString();//专辑图ID
    18 
    19 m.GC = o["data"]["song"]["list"][i]["id"].ToString();//歌词ID
    20 
    21 m.Fotmat = o["data"]["song"]["list"][i]["file"]["size_flac"].ToString();//是否为FLAC,其实没有多大用
    22 
    23 m.HQFOTmat = o["data"]["song"]["list"][i]["file"]["size_ogg"].ToString();//HQ
    24 
    25 m.MV = o["data"]["song"]["list"][i]["mv"]["id"].ToString();//MV iD
    26 
    27 string Q = "";
    28 
    29 if (m.Fotmat != "0")
    30 
    31 Q = "SQ";
    32 
    33 if (m.HQFOTmat != "0")
    34 
    35 if (m.Fotmat == "0")
    36 
    37 Q = "HQ";
    38 
    39 //判断最高品质(SQ,HQ,标准)

    其中,Music是我的一个自定义类,你可以直接储存到string中。

    获取到了音乐信息,接下来就是使用了。

    专辑图 API:

    https://y.gtimg.cn/music/photo_new/T002R300x300M000{0}.jpg

    {0} :从上面获取到的专辑图ID

    接下来就是获取歌曲的步骤了,分别有3个品质,这要看歌曲是否支持(HQ,标准,经济),由于SQ的API加入了绿钻检测和QQ登陆检测,所以就无法破解SQ品质的歌曲。

    经济品质,大小最小,品质最低的,并且获取最简单:

    http://cc.stream.qqmusic.qq.com/C100{0}.m4a?fromtag=52

    {0} :上面获取到的音乐ID

    怎么样,很简单把~

    标准品质,大小一般,品质一般,由于需要KEY所以获取有点难:

    首先需要一下几样东西:

     Guid:20D919A4D7700FBC424740E8CED80C5F,用于获取KEY

    地址:

    http://59.37.96.220/base/fcgi-bin/fcg_musicexpress2.fcg?version=12&miniversion=92&key=19914AA57A96A9135541562F16DAD6B885AC8B8B5420AC567A0561D04540172E&guid={guid}

    {guid} :就是上面那一串

    我们可以用一个笨方法将key取出,就是取出中间文本:

    前面: "key=""  后面:"" speedrpttype"

    这样我们获取到了key就可以请求歌曲文件啦:

    http://182.247.250.19/streamoc.music.tc.qq.com/M500{musicid}.mp3?vkey={vkey}&guid={guid}

    {musicid} :上面获取的音乐ID

    {vkey} :上面获取的KEY

    {guid}: 上面获取的Guid

    这样就完成了标准品质的播放

    HQ品质,也就是高品质,获取难度同上,但一些歌曲不支持HQ。

    首先准备一只GUID:"20D919A4D7700FBC424740E8CED80C5F"

    再次发送请求:http://59.37.96.220/base/fcgi-bin/fcg_musicexpress2.fcg?version=12&miniversion=92&key=19914AA57A96A9135541562F16DAD6B885AC8B8B5420AC567A0561D04540172E&guid={guid}

    这些步骤其实和标准的获取方法是一样的。

    接着取出key

    取出中间文本:前面: "key=""  后面:"" speedrpttype"

    获取KEY我们就能拿到歌曲链接了:

    http://182.247.250.19/streamoc.music.tc.qq.com/O600{musicid}.ogg?vkey={vkey}&guid={guid}

    参数同上,其实就是M5和O6变了,其他都一样。

    其他的API,是我在y.qq.com抓包得来的

    获取个人歌单API,必须是开放的歌单才行.

    https://y.qq.com/n/yqq/playlist/{0}.html#stat=y_new.profile.create_playlist.click&dirid=6

    {0}:歌单ID ,从官网点进去就能看到

    接着取出JSON解析处理

    "{"list":" + 取出文本(s, "var getSongInfo = ", ";", 0) + "}"

    热搜关键词API:

    http://59.37.96.220/soso/fcgi-bin/dynamic_content?format=json&outCharset=utf-8

    没有任何需要更改的参数,尽情解析JSON就可以

    它位于JSON的["data"]["search_content"]处

    最终API--歌词+翻译

    这是我研究了很久的API,原先我是从QQ音乐客户端抓包,可是太复杂,于是又从y.qq.com下手,终于找到了梦寐以求的API。

    它是以BESE64加密的,不算太麻烦

    请求连接:

    由于设置了防盗链,你需要做些手脚,伪装自己。

    一下以C#代码为示例解说:

     1 WebClient c = new WebClient();
     2 
     3 .Headers.Add("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");
     4 
     5 c.Headers.Add("Accept", "*/*");
     6 
     7 c.Headers.Add("Referer", "https://y.qq.com/portal/player.html");
     8 
     9 c.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
    10 
    11 c.Headers.Add("Cookie", "tvfe_boss_uuid=c3db0dcc4d677c60; pac_uid=1_2728578956; qq_slist_autoplay=on; ts_refer=ADTAGh5_playsong; RK=pKOOKi2f1O; pgv_pvi=8927113216; o_cookie=2728578956; pgv_pvid=5107924810; ptui_loginuin=2728578956; ptcz=897c17d7e17ae9009e018ebf3f818355147a3a26c6c67a63ae949e24758baa2d; pt2gguin=o2728578956; pgv_si=s5715204096; qqmusic_fromtag=66; yplayer_open=1; ts_last=y.qq.com/portal/player.html; ts_uid=996779984; yq_index=0");
    12 
    13 c.Headers.Add("Host", "c.y.qq.com");

    加入一大串标头,哈哈

    https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?callback=MusicJsonCallback_lrc&pcachetime=1494070301711&songmid={McMind}&g_tk=5381&jsonpCallback=MusicJsonCallback_lrc&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0

    {McMind} :音乐ID

    首先用JSON的方法取出lyric和trans两个数据。

    接下来使用BASE64解密就可以得到歌词啦!

    示例代码:https://github.com/TwilightLemon/Lemon-App/tree/master/Lemon%20App/Music

    本次教程到这里就结束啦,希望大家喜欢,多多支持我!

  • 相关阅读:
    ssm框架之写一个springmvc拦截器
    面试中的谈谈对spring的理解
    idea导入maven项目,执行时报程序报找不到(对应的jar包都存在),解决方案
    安装 ttf mscorefonts安装程序后的软件安装"下载额外数据文件失败"
    WEB-INF文件访问问题
    Junit测试@FixMethodOrder调整测试顺序
    MySQL自增主键ID重新排序
    windows下mysql-8.0.13主从同步配置方案(读写分离)
    Linux下运行mysql命令提示command not found解决办法
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  • 原文地址:https://www.cnblogs.com/TwilightLemon/p/7076938.html
Copyright © 2011-2022 走看看