当前位置: 首页 > 编程日记 > 正文

QQ音乐API分析记录

我一直是QQ音乐的用户,最近想做一个应用,想用QQ音乐的API,搜索了很久无果,于是就自己分析QQ音乐的API。 前不久发现QQ音乐出了网页版的,是Flash的,但是,我用iPhone打开这个链接的时候,它居然自动跳转到一个地址了,居然跳转到http://soso.music.qq.com/ipad/player.html,看到这个地址,里面有个“ipad”我的第一反应是“难道是HTML5和JS写的”,我在iPhone上试用了一下,发现确实能用。由此得出,这个iPad版的QQ音乐不是Flash,我在电脑上打开了这个地址,发现可以打开,于是果断动了歪点子。“既然是HTML和JS写的,我果断就可以分析出QQ音乐里面的API啦!!!”于是马上动手看代码。

分析的过程就不说了,很快就初步得出下面的一个API了,通过这个可以获取到指定QQ号的QQ音乐列表:

HTTP请求格式:GET

返回格式:json

API地址:http://qzone-music.qq.com/fcg-bin/fcg_music_fav_getinfo.fcg

参数

意义

备注

dirinfo

是否返回用户音乐列表名称与id

为1时返回,为0时不返回

dirid

QQ音乐用户的列表id

uin

用户的QQ号码

p

随机函数生成的随机数

目前没发现有什么作用随便输一个数就好

例子:

?
1
GET http://qzone-music.qq.com/fcg-bin/fcg_music_fav_getinfo.fcg?dirinfo=1&dirid=1&uin=81549201&p=1212121

返回:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
jsonCallback({
    code:0,
    msg:"",
    uin:81549201,
    DirList:[
        {
            DirID:1,                //列表id
            DirName:"我最爱听",//列表名
            DirShow:1,//是否开放,1是,0否
            DirTime:1323078355//时间
        }
    ],
    SongDirID:2,//返回的列表id
    SongNum:1,//列表内歌曲数量
    CurNum:1,//当前播放歌曲排序
    SongList:[
        {
            i:1,//列表内歌曲的id
            type:13,//类型
            id:680277,//歌曲在曲库中id
            songname:"跨时代",//歌名
            singerid:4558,//歌手id
            singername:"周杰伦",//歌手名
            url:"http://stream5.qqmusic.qq.com/12680277.wma",歌曲地址
            diskid:56705,//专辑id
            diskname:"跨时代",//专辑名
            playtime:194//歌曲长度
        }
    ]
})

备注:

经过测试,这个API只能获取用户开放的列表,如果用户设定过只有自己可见的话,只能登录后才能获取,

1.获取用户列表

HTTP请求格式:GET

返回格式:json

API地址:http://qzone-music.qq.com/fcg-bin/fcg_music_fav_getinfo.fcg

参数

意义

备注

dirinfo

是否返回用户音乐列表名称与id

为1时返回,为0时不返回

dirid

QQ音乐用户的列表id

uin

用户的QQ号码

p

随机函数生成的随机数

目前没发现有什么作用随便输一个数就好

例子

GET http://qzone-music.qq.com/fcg-bin/fcg_music_fav_getinfo.fcg?dirinfo=1&dirid=1&uin=81549201&p=1212121

返回

jsonCallback({

code:0,

msg:”",

uin:81549201,

DirList:[

{

DirID:1,                //列表id

DirName:"我最爱听",//列表名

DirShow:1,//是否开放,1是,0否

DirTime:1323078355//时间

}

],

SongDirID:2,//返回的列表id

SongNum:1,//列表内歌曲数量

CurNum:1,//当前播放歌曲排序

SongList:[

{

i:1,//列表内歌曲的id

type:13,//类型

id:680277,//歌曲在曲库中id

songname:"跨时代",//歌名

singerid:4558,//歌手id

singername:"周杰伦",//歌手名

url:"http://stream5.qqmusic.qq.com/12680277.wma",歌曲地址

diskid:56705,//专辑id

diskname:"跨时代",//专辑名

playtime:194//歌曲长度

}

]

})

2.返回用户绿钻等级

HTTP请求格式:GET

返回类型:XML/json

API地址:http://qzone-music.qq.com/fcg-bin/fcg_vip_getlevel.fcg

参数

意义

备注

json

返回格式

为1时json,为0时XML

uin

用户的QQ号码

例子

GET http://qzone-music.qq.com/fcg-bin/fcg_vip_getlevel.fcg?json=1&uin=8549201

返回

getVipLevelCallback(

{

level:3,//绿钻等级

vip:0,//是否绿钻

score:0,//。。。

place:0,//。。。

payway:8,//支付方式

isyear:0//是否年费

}

)

3.随便听听列表

HTTP请求格式:GET

返回类型:json

API地址:http://music.qq.com/musicbox/shop/v3/data/random/{type}/random{num}.js?p={random}

参数

意义

备注

type

歌曲类型/曲风

具体对应关系待分析

num

序号

待分析

random

随机函数生成的随机数

目前没发现有什么作用随便输一个数就好

例子:

GET http://music.qq.com/musicbox/shop/v3/data/random/1/random1.js?p=12

返回:

JsonCallback(

{

retcode:”1″,

songlist:

[

{

id:"449205",//id

type:3,//类型

url:"http://stream9.qqmusic.qq.com:0/449205.wma",//试听地址

songName:"稻香",//歌曲名

singerId:"4558",//歌曲id

singerName:"周杰伦",//歌手名

albumId:"36062",//专辑id

albumName:"魔杰座",//专辑名

albumLink:"http://shop.qqmusic.qq.com/static/album/62/album_36062.htm",//专辑链接

playtime:"223"//歌曲长度,单位秒

},

]

}

)

4.获取专辑封面

HTTP请求格式:GET

返回类型:图片

API地址:http://imgcache.qq.com/music/photo/album/{albumid%100}/albumpic_{albumid}_0.jpg

参数

意义

备注

{albumid%100}

专辑id对100取余

{albumid}

专辑id

例子:

GET http://imgcache.qq.com/music/photo/album/62/albumpic_36062_0.jpg

返回:

周杰伦跨时代专辑封面

5.获取用户QQ空间音乐

HTTP请求格式:GET

返回类型:XML

API地址:http://qzone-music.qq.com/fcg-bin/cgi_playlist_xml.fcg

参数

意义

备注

uin

QQ号

例子:

GET http://qzone-music.qq.com/fcg-bin/cgi_playlist_xml.fcg?uin=81549201

返回:

<qqmusic>

<curtime>1323091348</curtime>

<issmarter>1</issmarter>

<xmusicnum>1</xmusicnum>

<playlist>

<song>

<xqusic_id>678348</xqusic_id>

<xctype>3</xctype>

<xexpire_time>0</xexpire_time>

<xdesc>

<![CDATA[ ]]>

</xdesc>

<xsong_name>

<![CDATA[ 迷人的危险 - 紫色迷情 ]]>

</xsong_name>

<xsinger_name>

<![CDATA[ Dance Flow ]]>

</xsinger_name>

<xsong_url>

<![CDATA[ http://stream3.qqmusic.qq.com/12678348.wma ]]>

</xsong_url>

<xsong_size>1675201</xsong_size>

<xsong_playtime>206</xsong_playtime>

<xsong_diskname>

<![CDATA[ df 1 ]]>

</xsong_diskname>

<xsong_dissid>57209</xsong_dissid>

<xis_word>0</xis_word>

<xcopy_right>0</xcopy_right>

<xsinger_id>3594</xsinger_id>

</song>

</playlist>

<systemtime>1323091348</systemtime>

</qqmusic>

6.获取歌曲歌词

HTTP请求格式:GET

返回类型:图片

API地址:http://imgcache.qq.com/music/photo/album/songid%100}/albumpic_{songid}_0.jpg

参数

意义

备注

{songid%100}

歌曲id对100取余

{songid}

歌曲id

例子:

GET http://music.qq.com/miniportal/static/lyric/5/449205.xml

返回:

<lyric>

<![CDATA[

[00:00.50] 稻香

[00:02.03] 稻香

[00:07.24]

[00:10.08]作词:周杰伦 作曲:周杰伦

[00:15.55]

[00:26.63]

[00:30.61]对这个世界如果你有太多的抱怨

[00:34.15]跌倒了 就不敢继续往前走

[00:36.98]为什么 人要这么的脆弱 堕落

[00:41.11]请你打开

]]>

<![CDATA[

电视看看

[00:42.94]多少人为生命在努力勇敢的走下去

[00:46.87]我们是不是该知足

[00:49.38]珍惜一切 就算没有拥有

[00:53.01]

[00:53.90]还记得你说家是唯一的城堡

[00:57.50]随着稻香河流继续奔跑

[01:00.43]微微笑 小时候的梦我知道

[01:05.53]不要哭让萤火虫带著你逃跑

[01:09.33]乡间的歌谣永远的依靠

[01:12.13]回家吧 回到最初的美好

[01:17.68]

[01:40.86]不要这么容易就想放弃 就像我说的

[01:44.21]追不到的梦想 换个梦不就得了

[01:47.43]为自己的人生鲜艳上色

[01:49.69]先把爱涂上喜欢的颜色

[01:51.77]

[01:52.57]笑一个吧 功成名就不是目的

[01:55.54]让自己快乐快乐这才叫做意义

[01:58.52]童年的纸飞机 现在终于飞回我手里

[02:02.90]

[02:04.16]所谓的那快乐 赤脚在田里追蜻蜓追到累了

[02:08.16]偷摘水果被蜜蜂给叮到怕了

[02:11.42]谁在偷笑呢

[02:13.16]我靠着稻草人吹着风唱着歌睡着了

[02:16.62]哦 哦 午后吉它在虫鸣中更清脆

[02:19.53]哦 哦 阳光洒在路上就不怕心碎

[02:22.62]珍惜一切 就算没有拥有

[02:26.57]

[02:27.38]还记得你说家是唯一的城堡

[02:31.13]随着稻香河流继续奔跑

[02:34.05]微微笑 小时候的梦我知道

[02:39.07]不要哭让萤火虫带著你逃跑

[02:42.81]乡间的歌谣永远的依靠

[02:45.74]回家吧 回到最初的美好

[02:49.90]

[02:51.02]还记得你说家是唯一的城堡

[02:54.49]随着稻香河流继续奔跑

[02:57.50]微微笑 小时候的梦我知道

[03:02.70]不要哭让萤火虫带著你逃跑

[03:06.20]乡间的歌谣永远的依靠

[03:09.35]回家吧 回到最初的美好

[03:15.01]

[al:]摩羯座

[ar:]周杰伦

[ti:]稻香

]]>

</lyric>

转载于:https://www.cnblogs.com/SoraAoi/p/3311771.html

相关文章:

Vision 圖像識別框架的使用

阅读 137收藏 102017-10-18原文链接&#xff1a;www.itread01.comGoogle无人车之父、MIT/斯坦福/耶鲁专家带你进入无人驾驶之域 http://cn.udacity.com/course/intro-to-self-driving-cars--nd113 本文為CocoaChina網友 品位生活 投稿 北京時間2017.6.6日淩晨1點&#xff0c;新…

Jmeter性能测试 入门

Jmeter性能测试 入门 原文:Jmeter性能测试 入门Jmeter是一款优秀的开源测试工具&#xff0c; 是每个资深测试工程师&#xff0c;必须掌握的测试工具&#xff0c;熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后&#xff0c; 能用Jmeter搞定的事情&#xff0c;你就不会使用…

Hadoop集群搭建(二:集群主机间免密登录配置)

实验目的及要求&#xff1a; 静态网络地址配置&#xff1b;主机名的配置&#xff1b;防火墙的配置&#xff0c;使平台相关软件的常用端口能够远程正常访问&#xff1b;主机地址映射的配置&#xff0c;使所有主机能够通过主机名相互正常访问&#xff1b;免密码登录的配置&#…

你真的会用 CocoaPods 吗?

CocoaPods 可以说是 iOS 开发应用最广泛的包管理工具&#xff0c;本篇文章主要介绍 CocoaPods 的第三方库是怎样从网络集成到我们本地的项目当中&#xff0c;也是制作私有库、开源库和 iOS 项目组件化的一个知识铺垫。 让我们从一张图片开始&#xff1a; CocoaPods 工作流程 …

【spring 5】AOP:spring中对于AOP的的实现

在前两篇博客中&#xff0c;介绍了AOP实现的基础&#xff1a;静态代理和动态代理&#xff0c;这篇博客介绍spring中AOP的实现。 一、采用Annotation方式 首先引入jar包&#xff1a;aspectjrt.jar && aspectweaver.jar applicationContext配置文件&#xff1a; <span…

通过BeanShell获取UUID并将参数传递给Jmeter

有些HTTPS请求报文的报文体中包含由客户端生成的UUID&#xff0c;在用Jmeter做接口自动化测试的时候&#xff0c;因为越过了客户端&#xff0c;直接向服务器端发送报文&#xff0c;所以&#xff0c;需要在Jmeter中通过beanshell获取UUID&#xff0c;并能将参数传递给Jmeter&…

Hadoop集群搭建(四:Zookeeper环境安装)

实验 目的 要求 目的&#xff1a; 1、掌握在完全分布模式的整合平台中Zookeeper的完全分布模式的安装 要求&#xff1a; 完成Zookeeper的完全分布农事的安装&#xff1b;Zookeeper服务能够正常启动和连接&#xff1b;Zookeeper控制台能够正常进入&#xff1b;Zookeeper控制台命…

史上第二走心的 iOS11-Drag Drop 教程

原文链接&#xff1a;www.jianshu.com只需完成个人实名注册&#xff0c;即可获得腾讯云免费套餐&#xff01;云服务器CVM、云数据库 MYSQL、文件存储 CFS.....应有尽有&#xff01;https://cloud.tencent.com/act/free 话不多说&#xff0c;先上效果图 普通view拖拽效果 TableV…

指针的各式定义

1&#xff0c;一个整形数&#xff1a; int a; 2&#xff0c;一个指向整形数的指针&#xff1a; int *a; 3&#xff0c;一个指向指针的指针&#xff0c;它指向的指针指向一个整形数&#xff1a; int **a; 4&#xff0c;一个有10个整形数的数组&#xff1a; int a[10]; 5&#…

AS 400 常用命令

转自&#xff1a;http://blog.chinaunix.net/uid-22375044-id-3049793.html 一、命令技巧 命令构成&#xff1a; CRT* (Creat) 创建 WRK* (Work With) 操作 RMV* (Remove) 去除 DSP* (Display) 显示 ADD* (Add) 添加 CHG* (Change) 改变 DLT* (Delete) 删除 CFG* (Config) 配置…

Hadoop集群搭建(五:Hadoop HA集群模式的安装)

实验 目的 要求 目的&#xff1a; 1、Hadoop的高可用完全分布模式的安装和验证 要求&#xff1a; 完成Hadoop的高可用完全分布模式的安装&#xff1b;Hadoop的相关服务进程能够正常的启动&#xff1b;HDFS能够正常的使用&#xff1b;MapReduce示例程序能够正常运行&#xff1b…

iOS开发业界毒瘤 Hook

原文地址 为什么有这篇博文 不知道何时开始iOS面试开始流行起来询问什么是 Runtime&#xff0c;于是 iOSer 一听 Runtime 总是就提起 MethodSwizzling&#xff0c;开口闭口就是黑科技。但其实如果读者留意过C语言的 Hook 原理其实会发现所谓的钩子都是框架或者语言的设计者预留…

常用rsync命令操作梳理

作为一个运维工程师&#xff0c;经常可能会面对几十台、几百台甚至上千台服务器&#xff0c;除了批量操作外&#xff0c;环境同步、数据同步也是必不可少的技能。说到“同步”&#xff0c;不得不提的利器就是rsync。rsync不但可以在本机进行文件同步&#xff0c;也可以作为远程…

Word英文字符间距太大 中英文输入切换都不行

在Word中输入文字时会遇到这样的情况&#xff0c;就是说中文字符的间距是正常的&#xff0c;但是英文字符间的间距却不正常&#xff0c;总是太宽了&#xff0c;如图&#xff1a; 。 而且这时切换中英文输入都没用&#xff0c;Word的字体设置也正常。后来上网查了下&#xff0c;…

Hadoop集群搭建(六:HBase的安装配置)

实验 目的 要求 目的&#xff1a; 1、HBase的高可用完全分布模式的安装和验证 要求&#xff1a; 完成HBase的高可用完全分布模式的安装&#xff1b;HBase的相关服务进程能够正常的启动&#xff1b;HBase控制台能够正常使用&#xff1b;表创建、数据查询等数据库操作能够正常…

架构师的第一阶段:准备做(Pre-Architecture)

上节说到&#xff0c;做任何事情都可以分为三个阶段&#xff1a;准备做、做、做好。本文&#xff0c;就将进入第一个阶段&#xff0c;准备做阶段。 Pre-Architecture&#xff1a;准备架构 准备架构阶段&#xff0c;最最重要的是弄清楚要做什么东西&#xff0c;即掌握用户需求。…

iOS动画系列之八:使用CAShapeLayer绘画动态流量图

这篇文章通过使用CAShapeLayer和UIBezierPath来画出一个动态显示剩余流量的小动画。 最终实现的效果如下&#xff1a; Paste_Image.png 动态效果图&#xff1a; shapeLayerAni.gif 1. CAShapeLayer 实际中&#xff0c;能够用CALayer完成的任务是比较少的&#xff0c;如果使用这…

hiho_1139_二分+bfs搜索

题目 给定N个点和M条边&#xff0c;从点1出发&#xff0c;到达点T。寻找路径上边的个数小于等于K的路径&#xff0c;求出所有满足条件的路径中最长边长度的最小值。 题目链接:二分 最小化最大值&#xff0c;考虑采用二分搜索。对所有的边长进行排序&#xff0c;二分&#x…

Hadoop集群搭建(七:MySQL的安装配置)

实验 目的 要求 目的&#xff1a; 1、掌握MySQL在集群平台中的安装 要求&#xff1a; 完成MySQL的集群版的安装&#xff1b;MySQL集群的相关服务进程能够正常启动&#xff1b;MySQL集群的SQL服务能够作为系统服务开机自动启动&#xff1b;MySQL客户端能够远程连接MySQL集群的…

如何在VMware虚拟机上安装Linux操作系统(Ubuntu)

作为初学者想变为计算机大牛非一朝一夕&#xff0c;但掌握基本的计算机操作和常识却也不是多么难的事情。所以作为一名工科男&#xff0c;为了把握住接近女神的机会&#xff0c;也为了避免当白痴&#xff0c;学会装系统吧&#xff01;of course为避免把自己的电脑作为牺牲品&am…

cf #363 b

B. One Bombtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a description of a depot. It is a rectangular checkered field of n  m size. Each cell in a field can be empty (".") or…

swift-video-generator:图片加音频生成视频及多视频合并库及演示

阅读 80收藏 92017-11-07原文链接&#xff1a;github.com腾讯云学生优惠套餐&#xff0c;985高校学习云计算的主力机型&#xff0c;2G2核&#xff0c;1M带宽系统盘&#xff08;Linux 50G/Windows 50G&#xff09;免费赠送50GB对象存储空间还有.cn域名一年使用权&#xff01;不要…

Hadoop集群搭建(八:Hive的安装配置)

实验 目的 要求 目的&#xff1a; &#xff08;1&#xff09;掌握数据仓库工具Hive的安装和配置&#xff1b; 要求&#xff1a; 完成Hive工具的安装和配置&#xff1b;Hive工具能够正常启动运行&#xff1b;Hive控制台命令能够正常使用&#xff1b;能够正常操作数据库、表、…

iOS 富文本编辑工厂, 让书写更简便.

由于最近常用富文本, 在编辑一个富文本时需要操作很多的属性, 书写起来很不方便. 所以我将这些相关属性整理并使用链式方式将它简化了一下. 效果请看下面Demo. 项目工程 实现很简单, 我嘴太笨, 这里就不介绍了, 如有兴趣直接看源码吧. 同时可以通过cocoapods来使用它. pod SJAt…

ORACLE 数据的逻辑组成

数据块&#xff08;block&#xff09;Oracle数据块&#xff08;Data Block&#xff09;是一组连续的操作系统块。分配数据库块大小是在Oracle数据库创建时设置的&#xff0c;数据块是Oracle读写的基本单位。数据块的大小一般是操作系统块大小的整数倍&#xff0c;这样可以避免不…

Java 的zip压缩和解压缩

Java 的zip压缩和解压缩好久没有来这写东西了&#xff0c;今天中秋节&#xff0c;有个东西想拿出来分享&#xff0c;一来是工作中遇到的问题&#xff0c;一来是和csdn问候一下&#xff0c;下面就分享一个Java中的zip压缩技术&#xff0c;代码实现比较简单,代码如下&#xff1a;…

Hadoop集群搭建(九:各服务的启动)

1、查看Zookeeper服务状态&#xff0c;若集群中只有一个"leader"节点&#xff0c; 其余的均为"follower"节点&#xff0c;则集群的工作状态正常 $zkServer.sh status 2、在集群中所有主机上使用此命令&#xff0c;启动Zookeeper服务 $zkServer.sh start…

iOS 后台下载及管理库

说起下载第一个想起的就是ASI。一年前接手的新项目是核心功能是视频相关业务&#xff0c;在修改和解决视频下载相关的问题的时候让我体会到了ASI的下载的强大。后来新需求需要视频后台下载&#xff0c;使用NSURLSession的时候&#xff0c;更加深刻的体会到了ASI的强大好用。后来…

(转) 使用Speech SDK 5.1文字转音频

下载地址&#xff1a; http://www.microsoft.com/en-us/download/details.aspx?id10121 SeppchSDK51.exe 语音合成引擎 SpeechSDK51LangPack.exe 支持日语和简体中文需要这个支持。 SpeechSDK51MSM.exe 如果要将引擎作为产品的一部分发布需要这个。 Sp5TTintXP.exe XP下Mike和…

IE8下面的line-height的bug

当line-height小于正常值时&#xff0c;超出的部分将被剪裁掉转载于:https://www.cnblogs.com/jsingleegg/p/js_ie8.html