当前位置:   article > 正文

php:抓取各大平台音乐链接 ( QQ音乐、酷我、咪咕、网易云 )_get_music.php?key=b6qj5rc5is9bojfkfgbfmfgqafhyjp7p

get_music.php?key=b6qj5rc5is9bojfkfgbfmfgqafhyjp7pss2npgsp3a51mjnr0idzf2idg1

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

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

 

目录

一、网易云音乐

二、酷我音乐

三、咪咕音乐

四、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

  1. //获取歌曲播放地址(其中{$id}为分享的歌曲id,getMillisecond()获取13为时间戳)
  2. $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";
  3. $headers[] = "Host: www.kuwo.cn";
  4. $headers[] = "Referer: http://www.kuwo.cn";
  5. $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";
  6. $headers[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  7. $headers[] = "Accept-Language: zh-CN,zh;q=0.9";
  8. $headers[] = "Connection: keep-alive";
  9. $songData = $this->httpGet($url,$headers);
  10. $songData = json_decode($songData,true);
  11. //歌曲地址
  12. $result['song_url'] = $songData['url'];
  13. //获取歌曲信息
  14. $headers[] = "csrf: HANM3CCFCN7";
  15. $headers[] = "Cookie: Hm_lvt_cdb524f42f0ce19b169a8071123a4797=".time()."; kw_token=HANM3CCFCN7; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=".(time()+172800);
  16. $songData = $this->httpGet("http://www.kuwo.cn/api/www/music/musicInfo?mid={$id}&reqId=19eaaa30-0693-11ea-966f-a32e1ddf0f36",$headers);
  17. $songData = json_decode($songData,true);
  18. //歌曲名称
  19. $result['song_name'] = $songData['data']['name'];
  20. //封面图
  21. $result['song_cover'] = $songData['data']['pic'];
  22. //歌手名
  23. $result['artist_name'] = $songData['data']['artist'];
  24. return $result;

 

 

三、咪咕音乐

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

其中有效信息id为:003sST

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

  1. $url = "http://c.migu.cn/".$id;
  2. $headers[] = "Host: c.migu.cn";
  3. $headers[] = "ua: Android_migu";
  4. $headers[] = "subchannel: 014000D";
  5. $headers[] = "channel: 014000D";
  6. $headers[] = "IMEI: h5page";
  7. $headers[] = "IMSI: h5page";
  8. $headers[] = "ogId: h5page[ac6c]";
  9. $headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0";
  10. $headers[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  11. $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";
  12. $headers[] = "Connection: keep-alive";
  13. //获取真实地址
  14. $realUrl = $this->getRealURL($url);
  15. //获取实际id
  16. preg_match('/[^user]id=(\d+)/',$realUrl,$realIdArr);
  17. $realId = $realIdArr[1];
  18. $songData = $this->httpGet("https://c.musicapp.migu.cn/MIGUM2.0/v1.0/content/resourceinfo.do?resourceId={$realId}&resourceType={$resourceType}",$headers);
  19. $songData = json_decode($songData,true);
  20. $coverArr = array();
  21. if (isset($songData['resource'][0]['albumImgs'])) {
  22. $coverArr = array_column($songData['resource'][0]['albumImgs'],null,'imgSizeType');
  23. }
  24. //歌曲名称
  25. $result['song_name'] = $songData['resource'][0]['songName'];
  26. //封面图
  27. $result['song_cover'] = $coverArr['02']['img'];
  28. //歌手名
  29. $result['artist_name'] = $songData['resource'][0]['singer'];
  30. //歌曲地址
  31. $result['song_url'] = str_replace("ftp://218.200.160.122:21","http://freetyst.nf.migu.cn",$songData['resource'][0]['rateFormats'][1]['url']);
  32. 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 获取歌曲链接

  1. //url为分享链接跳转之后的url,所以需要获取302跳转之后的真实地址,后面会给获取方法。
  2. $content = @file_get_contents($url);
  3. preg_match("/\"songmid\":\"(.*)\"/U",$content,$songMidArr);
  4. preg_match("/\"songname\":\"(.*)\"/U",$content,$songNameArr);
  5. preg_match("/\"singername\":\"(.*)\"/U",$content,$singerNameArr);
  6. preg_match("/\"albummid\":\"(.*)\"/U",$content,$albumMidArr);
  7. $songName = $songNameArr[1];
  8. $singerName = $singerNameArr[1];
  9. //获取歌曲地址
  10. $headers[] = "Host: u.y.qq.com";
  11. $headers[] = "Origin: https://y.qq.com";
  12. $headers[] = "accept: application/json, text/plain, */*";
  13. $headers[] = "Accept-Language: zh-CN,zh;q=0.9";
  14. $headers[] = "Upgrade-Insecure-Requests: 1";
  15. $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";
  16. $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);
  17. $songData = json_decode($songData,true);
  18. //歌曲名称
  19. $result['song_name'] = $songName;
  20. //封面图
  21. $result['song_cover'] = "http://y.gtimg.cn/music/photo_new/T002R300x300M000{$albumMidArr[1]}.jpg";
  22. //歌手名
  23. $result['artist_name'] = $singerName;
  24. //歌曲地址
  25. $result['song_url'] = "http://220.194.231.146/amobile.music.tc.qq.com/".$songData['req_0']['data']['midurlinfo'][0]['purl'];
  26. return $result;

 

五、辅助方法

  1. //模拟请求-get
  2. public function httpGet($url,$headers)
  3. {
  4. $curl = curl_init(); // 启动一个CURL会话
  5. curl_setopt($curl, CURLOPT_URL, $url);
  6. curl_setopt($curl, CURLOPT_HEADER, 0);
  7. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  8. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
  9. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); //从证书中检查SSL加密算法是否存在
  10. curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  11. $tmpInfo = curl_exec($curl);
  12. //关闭URL请求
  13. curl_close($curl);
  14. return $tmpInfo;
  15. }
  16. //获取重定向地址
  17. public function getRealURL($url)
  18. {
  19. $header = get_headers($url,1);
  20. if (strpos($header[0],'301') || strpos($header[0],'302')) {
  21. if(is_array($header['Location'])) {
  22. return $header['Location'][count($header['Location'])-1];
  23. }else{
  24. return $header['Location'];
  25. }
  26. }else {
  27. return $url;
  28. }
  29. }

 

六、小结

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/141364?site
推荐阅读
相关标签
  

闽ICP备14008679号