Press "Enter" to skip to content

QQMusic研究筆記

緣由:

QQMusic研究筆記

QQMusic研究筆記

雖然我平常不用 , 但正好晚上沒事干 , 剛好一晚上搞定

經過分析之後發現 , 播放或下載音樂只需要2個變數 , 分別是vKey和mid

mid是什麼:

在qqmusic點進隨便一首歌後 , 查看url , 被反白的地方就是mid

QQMusic研究筆記

vKey的取得:

http://base.music.qq.com/fcgi-bin/fcg_musicexpress2.fcg?version=12&miniversion=53&uin=859823114&guid=CFBD477A9B6A9624E683A383291E896F&musicfile=0http://i.y.qq.com/s.plcloud/fcgi-bin/fcg_list_songinfo_cp.fcg?url=1&midlist={{$musicID}}.m4a

在填上mid之後訪問該網址 , 然後查看源代碼 , 我們可以看到很多key

其實這就是vKey , 隨便拿一個就好

QQMusic研究筆記

code:

public function getMusicKey($musicID){

$baseUrl = "....";

$keyContents =file_get_contents($baseUrl);

$array = array();

preg_match( '/key="([^"]*)"/i', $keyContents,$array ) ;

returnstr_replace(""","",str_replace("key=","",$array[0]));

}

取得音樂檔案:

有了vKey和mid之後 , 我們就可以直接訪問存放在伺服器的檔案

code:

public function getMusicResource($musicID){

$vKey = $this->getMusicKey($musicID);

$baseUrl ="http://ws.stream.qqmusic.qq.com/M800$musicID.mp3?vkey=$vKey&guid=CFBD477A9B6A9624E683A383291E896F&uin=859823114&fromtag=59";

$musicResources =file_get_contents($baseUrl);

return $musicResources;

}

試聽音樂:

先取得音樂檔案內容 , 再透過設定header在線上播放音樂

code:

public function listenMusic($musicID){

$musicResource =$this->getMusicResource($musicID);

$contents =View::make('/apiView/listenMusic')->with("musicResource",$musicResource);

$response = Response::make($contents,200);

$response->header('Content-Type','Content-Type: audio/mp3');

return $response;

}

下載音樂檔案:

先取得音樂檔案的內容 , 然後透過設定header來達成下載動作

code:

public function downloadMusic($musicID){

$musicResource =$this->getMusicResource($musicID);

$contents =View::make('/apiView/downloadMusic')->with("musicResource",$musicResource);

$response = Response::make($contents,200);

$response->header('Content-Type','Content-Type: application/octet-stream');

$response->header('Content-Disposition','attachment;filename='.$musicID.'.mp3');

return $response;

}

取得音樂資訊(JSON Format):

同樣是填上mid就可以了

QQMusic研究筆記

code:

public function getMusicInfo($musicID){

$baseUrl ="http://i.y.qq.com/s.plcloud/fcgi-bin/fcg_list_songinfo_cp.fcg?url=1&midlist=$musicID";

$infoContents =file_get_contents($baseUrl);

return $infoContents;

}

搜索歌曲API:

public function doSearchMusic(){

$musicName = Input::get('musicName');

$baseUrl ="http://s.music.qq.com/fcgi-bin/music_search_new_platform?t=0&n=50&aggr=1&cr=1&loginUin=0&format=json&inCharset=GB2312&outCharset=utf-8&notice=0&platform=jqminiframe.json&needNewCode=0&p=1&catZhida=0&remoteplace=sizer.newclient.next_song&w=$musicName";

$searchResult =json_decode(file_get_contents($baseUrl));

returnview('searchResult')->with('result',$searchResult);

}

其中的n=50 是代表顯示頭50個結果 , w=$musicName 則是搜索時的keywords

以下是回傳結果

QQMusic研究筆記
用紅色框住的分別是歌曲名 , 歌手名 , 專輯名 和 mid

有了以上的東西 , 足夠弄一個自己的音樂搜尋器了

QQMusic研究筆記

無聊的研究就到此為止了

Comments