前提
首先参考一个ipad的qq音乐网页播放器:http://soso.music.qq.com/ipad/player.html,看到这个地址,里面有个“ipad”我的第一反应是“是 HTML5和JS写的”,我在iPhone上试用了一下,发现确实能用。由此得出,这个iPad版的QQ音乐不是Flash,我在电脑上打开了这个地址, 发现可以打开,于是果断动了歪点子。“既然是HTML和JS写的,我果断就可以分析出QQ音乐里面的API啦!!!”于是马上动手看代码。
得到QQ音乐列表:
1.通过这个可以获取到指定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 随机函数生成的随机数 目前没发现有什么作用随便输一个数就好
例子: GEThttp://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//歌曲长度 } ] })
备注: 经过测试,这个API只能获取用户开放的列表,如果用户设定过只有自己可见的话,只能登录后才能获取,
2.搜索qq音乐
HTTP请求格式:GET 返回格式:json API地址:
http://soso.music.qq.com/fcgi-bin/fcg_search_xmldata.fcg?source=0&w={搜索词} &type=qry_song&out=json&p=1&perpage=20&ie=utf-8
参数 source 资源 具体意义不明,设0好像是默认值
w 搜索词
p 当前页数
perpage 每页数量
ie=utf-8 固定编码
例子:http://soso.music.qq.com/fcgi-bin/fcg_search_xmldata.fcg?source=0&w=%E7%BB%85%E5%A3%AB&type=qry_song&out=json&p=1&perpage=2&ie=utf-8
返回 searchJsonCallback(
{retcode:0,
subcode:0,
totalnum:215,
curnum:2,
curpage:1,
keyword:"绅士",
qcnum:0,
g_searchid:"2382622035949641",
qc:[],
list:[{source:11,
songid:102425546,
songname:"<strong>绅士</strong>",
singerid:"5062",
singername:"薛之谦",
albumid:989994,
albumname:"<strong>绅士</strong>",
pubtime:1433433600,
songurl:"http://stream4.qqmusic.qq.com/114425546.wma",
conn:20,
fromat:"qqhq;common;mp3common;wmacommon;crcommon",
download:1,
size:2509366,
interval:290000,
songmid:"001CG3wA3QkuJS",
singermid:"002J4UUk29y8BY",
albummid:"003y8dsH2wBHlo"},{source:11,songid:7085699,songname:"Gentleman",singerid:"13143",singername:"PSY",albumid:426795,albumname:"Gentleman",pubtime:1365696000,songurl:"http://stream5.qqmusic.qq.com/19085699.wma",conn:20,fromat:"qqhq;common;mp3common;wmacommon;crcommon",download:1,size:1674194,interval:194000,songmid:"001EuFfn0UeKeE",singermid:"002vbc3A2bv88T",albummid:"001rLHLN3xARzn"}]})
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
例子: GEThttp://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号
例子: GEThttp://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
例子: GEThttp://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>