php:抓取各大平台音乐链接 ( QQ音乐、酷我、咪咕、网易云 )

最近闲来无事,就想写点东西,刚看到分享到微信朋友圈的音乐,就想自己也写个试试做一个同样的效果。我们都知道音乐平台在点击分享的时候,都有一个复制链接的按钮,我们根据分享的链接,获取歌曲信息(歌曲链接、封面、歌手等等),以下收费歌曲都不行哈;

注:纯属练练手,大家切勿用到商业用途。

 

目录

一、网易云音乐

二、酷我音乐

三、咪咕音乐

四、qq音乐

五、辅助方法

六、小结



 

一、网易云音乐

先来说说网易云,我感觉是最简单的,都不需要爬取什么,直接按照规律拼接。

例:

分享链接:分享林忆莲的单曲《伤痕》http://music.163.com/song/5255650/?userid=1347333548 (@网易云音乐)

很明显,ID是5255650

那么,这首歌的真实地址就是:

http://music.163.com/song/media/outer/url?id=5255650.mp3

这个地址不会失效的;

这就得到一个下载公式:

http://music.163.com/song/media/outer/url?id=ID数字.mp3

把上面红色部分ID数字换成网易云播放页面或者分享链接上的id即可。

 

 

二、酷我音乐

分享链接:https://m.kuwo.cn/yinyue/15519229?f=ip&t=usercopy

歌曲id为:15519229

根据酷我音乐的链接分析得出以下两个请求可以获取到我们想要的信息。

例如:http://www.kuwo.cn/url?format=mp3&rid=15519229&response=url&type=convert_url3&br=128kmp3&from=web&t=&reqId=88deb4f1-0692-11ea-94a9-91c1807c7d33

//获取歌曲播放地址(其中{$id}为分享的歌曲id,getMillisecond()获取13为时间戳)
$url = "http://www.kuwo.cn/url?format=mp3&rid={$id}&response=url&type=convert_url3&br=128kmp3&from=web&t=".getMillisecond()."&reqId=88deb4f1-0692-11ea-94a9-91c1807c7d33";
$headers[] = "Host: www.kuwo.cn";
$headers[] = "Referer: http://www.kuwo.cn";
$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36";
$headers[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$headers[] = "Accept-Language: zh-CN,zh;q=0.9";
$headers[] = "Connection: keep-alive";
$songData = $this->httpGet($url,$headers);
$songData = json_decode($songData,true);
//歌曲地址
$result['song_url'] = $songData['url'];

//获取歌曲信息
$headers[] = "csrf: HANM3CCFCN7";
$headers[] = "Cookie: Hm_lvt_cdb524f42f0ce19b169a8071123a4797=".time()."; kw_token=HANM3CCFCN7; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=".(time()+172800);
$songData = $this->httpGet("http://www.kuwo.cn/api/www/music/musicInfo?mid={$id}&reqId=19eaaa30-0693-11ea-966f-a32e1ddf0f36",$headers);
$songData = json_decode($songData,true);
//歌曲名称
$result['song_name'] = $songData['data']['name'];
//封面图
$result['song_cover'] = $songData['data']['pic'];
//歌手名
$result['artist_name'] = $songData['data']['artist'];
return $result;

 

 

三、咪咕音乐

分享链接:分享单曲 | 情深谊长http://c.migu.cn/003sST?ifrom=1d0582bb0148c334cfc5bdea0805ddd4 (@咪咕音乐)

其中有效信息id为:003sST

咪咕分享的链接其实并不是真实的播放页面链接,访问的时候会跳转。所以我们首先要拿到真实的页面地址。然后拿到相关信息

$url = "http://c.migu.cn/".$id;
$headers[] = "Host: c.migu.cn";
$headers[] = "ua: Android_migu";
$headers[] = "subchannel: 014000D";
$headers[] = "channel: 014000D";
$headers[] = "IMEI: h5page";
$headers[] = "IMSI: h5page";
$headers[] = "ogId: h5page[ac6c]";
$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0";
$headers[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$headers[] = "Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2";
$headers[] = "Connection: keep-alive"; 

//获取真实地址
$realUrl = $this->getRealURL($url);
//获取实际id
preg_match('/[^user]id=(\d+)/',$realUrl,$realIdArr);
$realId = $realIdArr[1];
$songData = $this->httpGet("https://c.musicapp.migu.cn/MIGUM2.0/v1.0/content/resourceinfo.do?resourceId={$realId}&resourceType={$resourceType}",$headers);
$songData = json_decode($songData,true);
$coverArr = array();
if (isset($songData['resource'][0]['albumImgs'])) {
	$coverArr = array_column($songData['resource'][0]['albumImgs'],null,'imgSizeType');
}
//歌曲名称
$result['song_name'] = $songData['resource'][0]['songName'];
//封面图
$result['song_cover'] = $coverArr['02']['img'];
//歌手名
$result['artist_name'] = $songData['resource'][0]['singer'];
//歌曲地址
$result['song_url'] = str_replace("ftp://218.200.160.122:21","http://freetyst.nf.migu.cn",$songData['resource'][0]['rateFormats'][1]['url']);
return $result;

 

 

四、qq音乐

分享链接:刘瑞琦《房间》 https://c.y.qq.com/base/fcgi-bin/u?__=KbNdw1S @QQ音乐

根据链接访问 https://c.y.qq.com/base/fcgi-bin/u?__=KbNdw1S ,并查看源代码,我们发现很多信息其实已经存在。只要匹配出来即可。得到歌曲名称、歌手名 、 songmid ,然后跟songmid 获取歌曲链接

//url为分享链接跳转之后的url,所以需要获取302跳转之后的真实地址,后面会给获取方法。
$content = @file_get_contents($url);
preg_match("/\"songmid\":\"(.*)\"/U",$content,$songMidArr);
preg_match("/\"songname\":\"(.*)\"/U",$content,$songNameArr);
preg_match("/\"singername\":\"(.*)\"/U",$content,$singerNameArr);
preg_match("/\"albummid\":\"(.*)\"/U",$content,$albumMidArr);
$songName = $songNameArr[1];
$singerName = $singerNameArr[1];

//获取歌曲地址
$headers[] = "Host: u.y.qq.com";
$headers[] = "Origin: https://y.qq.com";
$headers[] = "accept: application/json, text/plain, */*";
$headers[] = "Accept-Language: zh-CN,zh;q=0.9";
$headers[] = "Upgrade-Insecure-Requests: 1";
$headers[] = "user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36";
$songData = $this->httpGet('https://u.y.qq.com/cgi-bin/musicu.fcg?-=getplaysongvkey26506224079476026&g_tk=275700055&loginUin=492653269&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0&data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"111893668","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"111893668","songmid":["'.$songMidArr[1].'"],"songtype":[0],"uin":"800180106","loginflag":1,"platform":"20"}},"comm":{"uin":800180106,"format":"json","ct":24,"cv":0}}',$headers);
$songData = json_decode($songData,true);
//歌曲名称
$result['song_name'] = $songName;
//封面图
$result['song_cover'] = "http://y.gtimg.cn/music/photo_new/T002R300x300M000{$albumMidArr[1]}.jpg";
//歌手名
$result['artist_name'] = $singerName;
//歌曲地址
$result['song_url'] = "http://220.194.231.146/amobile.music.tc.qq.com/".$songData['req_0']['data']['midurlinfo'][0]['purl'];
return $result;

 

五、辅助方法

//模拟请求-get
public function httpGet($url,$headers)
{
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); //从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    $tmpInfo = curl_exec($curl);     
    //关闭URL请求
    curl_close($curl);
    return $tmpInfo;
}


//获取重定向地址
public function getRealURL($url)
{
   $header = get_headers($url,1);
    if (strpos($header[0],'301') || strpos($header[0],'302')) {
        if(is_array($header['Location'])) {
            return $header['Location'][count($header['Location'])-1];
        }else{
            return $header['Location'];
        }
    }else {
        return $url;
    }
}

 

六、小结

其实还有虾米音乐和酷狗等平台

虾米:需要登陆和输入验证码才行,比较复杂,小编也没有过度研究,本来淘宝开放平台以前有免费虾米api,直接sdk对接就行,但是现在关闭了。

酷狗:酷狗拿到了播放链接,但是我没有写出来,是因为酷狗链接过期很快,而且酷狗会根据请求次数和ip做了防盗链,比较恶心,哈哈。(对了在这里要提下qq音乐链接也会过期,过期时间是1天,1天之后需要重新获取,其他平台暂时没发现异常)

总的来说,希望可以帮到大家。

威盘音乐外链-SQL数据库版 v3.0,该程序调用vdisk威盘上传接口,再将vdisk那边返回的文件信息进行解析。获得解析地址,可实现在线播放以及调用到QQ空间背景音乐播放,免去了开绿钻的烦恼。根据网友特别要求 特建立QQ群50095717 以便交流 入群验证:i6x.cn 该程序调用vdisk威盘上传接口,再将vdisk那边返回的文件信息进行解析 获得解析地址,可实现在线播放以及调用到QQ空间背景音乐播放,免去了开绿钻的烦恼。 后台帐号密码在admin/conn.php里修改 $CS_url= "http://up.i6x.cn/"; //网站地址,必须以/结束 你把源码存那里,这个地址就写那里 $CS_ADMIN = "123"; //后台帐号 $CS_PASS = "000"; //后台密码 $user = "i6xcn"; //填写数据库用户名 $pws = "www.i6x.cn"; //填写数据库密码 $db = "i6xcn"; //填写数据库表名称 //微博通可以同时绑定多个微博,将消息同步发送到多个微博平台,帐号申请:http://www.wbto.cn/ $api_i6x_user="111"; //你的微博通帐号 同步微博必须填写正确的帐号和密码,不同步就不用写 $api_i6x_pass="111"; //你的微博通密码 $api_i6x_pic="http://t2.qpic.cn/mblogpic/5c4486a768fc7070e986/2000"; //同步图片,可有可无! //---------------网站配置结束----------------// 不会的请看说明书 http://pan.baidu.com/share/link?shareid=2341014961&uk=1695321326 本站地址:http://up.i6x.cn/ 欢迎站长们加入【音乐外链网交流群50095717】交流经验!共同探讨! --赠送14条数据 -- 本站地址:http://up.i6x.cn/ 欢迎站长们加入【音乐外链网交流群50095717】交流经验!共同探讨!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值