昨日通过Freebuf上某大神分析,实现了解析某狗音乐无损格式下载,那么今天这篇文章则使用PHP几十行代码实现某狗音乐无损格式营业的搜索+下载。当然了,本篇文章中所提供的一切代码资源,仅供学习交流,严禁用于商业用途,请于24小时内删除。

一。接口的准备

  根据Freebuf上某大神分析出来的结果,一共得到4个接口,分别如下:
搜索地址: http://songsearch.kugou.com/song_search_v2?keyword={关键字}page=1
无损音乐下载地址:

# V2版系统,pc版,加密方式为md5(hash +"kgcloudv2")
Music_api_1 = 'http://trackercdnbj.kugou.com/i/v2/?cmd=23&pid=1&behavior=download'
# V2版系统,手机版,加密方式为md5(hash +"kgcloudv2") (备用)
Music_api_2 = 'http://trackercdn.kugou.com/i/v2/?appid=1005&pid=2&cmd=25&behavior=play'
# 老版系统,加密方式为md5(hash +"kgcloud")(备用)
Music_api_3 = 'http://trackercdn.kugou.com/i/?cmd=4&pid=1&forceDown=0&vip=1'

二。解析过程

QQ截图20180204142212.png

三。完整代码

<?php
/**
* 解析酷狗无损音乐下载
* @author Wigiesen - 心语难诉
* @version v1.0
* @link https://xinyu19.com
*/
class KuGou
{
    # 下载url 加密方式md5(hash +"kgcloudv2")
    private $kugou_v2_pc = 'http://trackercdnbj.kugou.com/i/v2/?cmd=23&pid=1&behavior=download';
    # 搜索url
    private $search_api = 'http://songsearch.kugou.com/song_search_v2';

    public function search($song_name){
        # 搜索音乐资源,将返回的json歌曲信息解析
        $res = json_decode(file_get_contents($this->search_api.'?keyword='.$song_name.'page=1'),true);
        # 判断搜索返回的列表是否为空,不为空则有资源。
        if (!empty($res['data']['lists'])) {
            $Songs = [];
            $SongsCount = 0;
            foreach ($res['data']['lists'] as $value) {
                # SQLFileHash = 32个0说明没有无损音质的资源,排除掉。
                if ($value['SQFileHash'] != '00000000000000000000000000000000') {
                    # 通过得到的SQFileHash加密key后去请求单个无损音质音乐的资源信息
                    $Song_res = json_decode(file_get_contents($this->kugou_v2_pc.'&hash='.$value['SQFileHash'].'&key='.md5($value['SQFileHash'].'kgcloudv2')),true);
                    $Songs[$SongsCount] = [
                        'SongName' => $value['SongName'],        //歌曲名称
                        'SingerName' => $value['SingerName'],    //歌手名字
                        'SongExt' => $Song_res['extName'],        //歌曲后缀
                        'SongSize' => round($Song_res['fileSize'] /1024/1024,2).' MB',    //歌曲资源大小
                        'SongTime' => ltrim(date('i:s', $Song_res['timeLength']),0),    //歌曲的时长
                        'SongUrl' => $Song_res['url']    //下载URL
                    ];
                    $SongsCount++;
                }
            }
            echo json_encode(['status' => true, 'message' => '加载资源成功', 'count' => count($Songs), 'data' => $Songs]);
        }else{
            echo json_encode(['status' => false, 'message' => '找不到相关匹配的资源']);
        }
    }
}
$KuGou = new KuGou();
$KuGou->search($_GET['song_name']);
?>  

四。案例展示。

QQ截图20180204142823.png

五。完结

  案例上我用Bootstrap套了一个简易的搜索列表页,使用AJAX请求返回歌曲列表,可以看到资源的详细的参数+一键下载,与上面代码所用的代码是一模一样的。相关注释已经写入到代码中,这里就不再逐步分析了。当然还有一个问题是无法搜素英文歌曲,至于为什么,我也不知道咯~最后需要说的本篇文章中所提供的一切代码资源,仅供学习交流,严禁用于商业用途,请于24小时内删除。

最后修改:2019 年 04 月 15 日 02 : 13 PM