欢迎大家来到我的博客,这是我在博客园写的第一篇文章,但不会是最后一篇,希望大家多多关注我,支持我哦!
正文开始,今天我们要讲的是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#示例代码:

 Music m = new Music();

 m.MusicName = o["data"]["song"]["list"][i]["name"].ToString();

 string Singer = "";

 for (int osxc = ; osxc != o["data"]["song"]["list"][i]["singer"].Count(); osxc++)

 { Singer += o["data"]["song"]["list"][i]["singer"][osxc]["name"] + "/"; }

 m.Singer = Singer.Substring(, Singer.LastIndexOf("/"));//歌手

 m.ZJ = o["data"]["song"]["list"][i]["album"]["name"].ToString();//专辑

 m.MusicID = o["data"]["song"]["list"][i]["mid"].ToString();//音乐ID

 m.ImageID = o["data"]["song"]["list"][i]["album"]["mid"].ToString();//专辑图ID

 m.GC = o["data"]["song"]["list"][i]["id"].ToString();//歌词ID

 m.Fotmat = o["data"]["song"]["list"][i]["file"]["size_flac"].ToString();//是否为FLAC,其实没有多大用

 m.HQFOTmat = o["data"]["song"]["list"][i]["file"]["size_ogg"].ToString();//HQ

 m.MV = o["data"]["song"]["list"][i]["mv"]["id"].ToString();//MV iD

 string Q = "";

 if (m.Fotmat != "")

 Q = "SQ";

 if (m.HQFOTmat != "")

 if (m.Fotmat == "")

 Q = "HQ";

 //判断最高品质(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#代码为示例解说:

 WebClient c = new WebClient();

 .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");

 c.Headers.Add("Accept", "*/*");

 c.Headers.Add("Referer", "https://y.qq.com/portal/player.html");

 c.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");

 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");

 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

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

音乐API之QQ音乐的更多相关文章

  1. 使用网易云音乐,丢掉QQ音乐吧

    我是一个听音乐的重度用户,基本上每天大约有三分之一的时间里我在使用网易云音乐去听音乐.包括工作写代码的时候,跑步的时候,去上班的途中我都去听.首先需要声明的是,在这里我不是故意的去抹黑其他的音乐产品, ...

  2. Android 开发之网易云音乐(或QQ音乐)的播放界面转盘和自定义SeekBar的实现

    这个东西我在eoeAndroid上首发的,但没有详细的实现说明:http://www.eoeandroid.com/thread-317901-1-1.html 在csdn上进行详细的说明吧.(同时上 ...

  3. 个人作业2:QQ音乐APP案例分析

    APP案例分析 QQ音乐 选择理由:毕竟作为QQ音乐九年的资深老用户以及音乐爱好者 第一部分 调研 1.第一次上手的体验    我算是很早期的QQ音乐的用户,用QQ音乐七八年,除了体验各方面还不错之外 ...

  4. QQ音乐的各种相关API

    QQ音乐的各种相关API 分类: oc2014-01-29 15:34 2676人阅读 评论(2) 收藏 举报 基本上论坛里做在线音乐的都在用百度的API,进来发现百度的API不仅歌曲的质量不可以保证 ...

  5. 【QQ音乐Api】移花接木 打造自己的音乐电台

    最近突发奇想想做个在线音乐小网页.需求很简单,如下 搜索歌曲 或 歌手 在线播放音乐 借用qq 或者 百度的 音乐接口 需求明确那就直接动手了 我首先尝试的百度音乐,但是不能在线播放(提示forbid ...

  6. QQ音乐API

    今天分享的是QQ音乐API 搜索歌曲API:http://s.music.qq.com/fcgi-bin/music_search_new_platform?t=0& amp;n={2}&am ...

  7. QQ音乐API分析记录

    我一直是QQ音乐的用户,最近想做一个应用,想用QQ音乐的API,搜索了很久无果,于是就自己分析QQ音乐的API. 前不久发现QQ音乐出了网页版的,是Flash的,但是,我用iPhone打开这个链接的时 ...

  8. 调皮的QQ音乐API:修复无法获取歌单

    上一篇完整版:http://www.cnblogs.com/TwilightLemon/p/7076938.html QQ音乐的API真是太调皮了,获取歌单的API又更换了好多次,喵喵喵 旧版API( ...

  9. QQ音乐无损歌曲接口api

    1.打开QQ音乐官网 y.qq.com 2.选择你要的歌曲,进入后查看网址,以虎口脱险这个歌曲为例:http://y.qq.com/#type=song&mid=000Ib8E71sUNi7 ...

随机推荐

  1. POJ2635-The Embarrassed Cryptographer 大数求余

    题目链接:http://poj.org/problem?id=2635 题目分析: http://blog.csdn.net/lyy289065406/article/details/6648530

  2. js函数的使用

                           js函数应用   [函数的声明及调用]: 1.函数声明:    function 函数名(参数1,参数2,·····){    //函数体    retu ...

  3. Netflix Hystrix - 快速入门

    Hystrix最初是由Netflix的API team研发的,用于提高API的弹性和性能,2012年在公司内部广受好评. 如果你的应用是一个单独的应用,那几乎不用在意断路的问题. 但在分布式环境中,各 ...

  4. LeetCode:60. Permutation Sequence,n全排列的第k个子列

    LeetCode:60. Permutation Sequence,n全排列的第k个子列 : 题目: LeetCode:60. Permutation Sequence 描述: The set [1, ...

  5. [ios]quartz2d画板功功能实现核心代码

    //触摸开始 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //    1,获取对 ...

  6. Phaser类详解

    Phaser允许并发多阶段任务.Phaser类机制是在每一步结束的位置对线程进行同步,当所有的线程都完成了这一步,才允许执行下一步. 一个Phaser对象有两种状态: 活跃态(Active):当存在参 ...

  7. 深入理解Struts2----类型转换

         之前的一系列文章主要介绍了有关Struts2的一些基本用法和部分的简单原理,但是始终没有介绍有关拦截器的相关内容,从本篇开始我们将从另一个角度去深入理解框架的使用,核心还是拦截器,但本篇首先 ...

  8. HourRank 19

    https://www.hackerrank.com/contests/hourrank-19/challenges 第一题略. 第二题是nim博弈,问删掉一个区间的石子,使得先手败的方案有几种,明显 ...

  9. nfs+rsync+inotify实现文件的实时同步

    准备三台服务器进行测试: nfs_server:192.168.12.110 web_server:192.168.12.111 rsync_server:192.168.12.112 网络规划图: ...

  10. 2-SAT算法

    参考blog 参考论文 参考论文 题目 & 题解 裸2-SAT poj3683 poj3207 poj3678 poj3648 2-SAT + 二分法 poj2723 poj2749 hdu3 ...