我一直是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:
"周傑倫"
,
//歌手名
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>