You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

191 lines
6.9 KiB

<?php
/**
* 发起请求数据,返回json
*/
require 'Meting.php';
use Metowolf\Meting;
/************ ↓↓↓↓↓ 如果网易云音乐歌曲获取失效,请将你的 COOKIE 放到这儿 ↓↓↓↓↓ ***************/
$netease_cookie = 'osver=%E7%89%88%E6%9C%AC%2010.13.3%EF%BC%88%E7%89%88%E5%8F%B7%2017D47%EF%BC%89; os=osx; appver=1.5.9; MUSIC_U=*****; channel=netease;';
/************ ↑↑↑↑↑ 如果网易云音乐歌曲获取失效,请将你的 COOKIE 放到这儿 ↑↑↑↑↑ ***************/
/**
* cookie 获取及使用方法见
* https://github.com/mengkunsoft/MKOnlineMusicPlayer/wiki/%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90%E9%97%AE%E9%A2%98
*
* 如果还有问题,可以联系主题作者
**/
if ($_SERVER["REQUEST_METHOD"] == "GET"){
if (!empty($_GET['id']) && !empty($_GET['type']) && !empty($_GET['media'])){
$id = $_GET['id'];
$type = $_GET['type'];
$media = $_GET['media'];
echo getMusicInfo($media,$type,$id);
}
}elseif ($_SERVER["REQUEST_METHOD"] == "POST"){
if (!empty($_POST['size']) && !empty($_POST['data'])){
$size = $_POST['size'];
$url = $_POST['data'];
if (!empty($_POST['autoplay'])){
if ($_POST['autoplay'] === "false"){
$autoplay = false;
}else{
$autoplay = true;
}
}else{
$autoplay = false;
}
parseMusicUrl($url,$size,$autoplay);
}
}
/**
* @param $url
* @param string $size
* @param $autoplay 是否自动播放
* @return void 返回是的歌单解析信息的数组
*/
function parseMusicUrl($url,$size="large",$autoplay){
$url=trim($url);
//echo $url;
//如果输入的地址为空,则返回空
if(empty($url))return;
$media='netease';$id='';$type='';
if ($autoplay){
$audoplayHtml = 'auto="true"';
}else{
$audoplayHtml = 'auto="false"';
}
if(strpos($url,'163.com')!==false){
$media='netease';
if(preg_match('/playlist\?id=(\d+)/i',$url,$id))list($id,$type)=array($id[1],'playlist');
elseif(preg_match('/toplist\?id=(\d+)/i',$url,$id))list($id,$type)=array($id[1],'playlist');
elseif(preg_match('/album\?id=(\d+)/i',$url,$id))list($id,$type)=array($id[1],'album');
elseif(preg_match('/song\?id=(\d+)/i',$url,$id))list($id,$type)=array($id[1],'song');
elseif(preg_match('/artist\?id=(\d+)/i',$url,$id))list($id,$type)=array($id[1],'artist');
}
elseif(strpos($url,'qq.com')!==false){
$media='tencent';
if(preg_match('/playlist\/([^\.]*)/i',$url,$id))list($id,$type)=array($id[1],'playlist');
elseif(preg_match('/album\/([^\.]*)/i',$url,$id))list($id,$type)=array($id[1],'album');
elseif(preg_match('/song\/([^\.]*)/i',$url,$id))list($id,$type)=array($id[1],'song');
elseif(preg_match('/singer\/([^\.]*)/i',$url,$id))list($id,$type)=array($id[1],'artist');
}
elseif(strpos($url,'xiami.com')!==false){
$media='xiami';
if(preg_match('/collect\/(\w+)/i',$url,$id))list($id,$type)=array($id[1],'playlist');
elseif(preg_match('/album\/(\w+)/i',$url,$id))list($id,$type)=array($id[1],'album');
elseif(preg_match('/[\/.]\w+\/[songdem]+\/(\w+)/i',$url,$id))list($id,$type)=array($id[1],'song');
elseif(preg_match('/artist\/(\w+)/i',$url,$id))list($id,$type)=array($id[1],'artist');
if(!preg_match('/^\d*$/i',$id,$t)){
$data=curl($url);
preg_match('/'.$type.'\/(\d+)/i',$data,$id);
$id=$id[1];
}
}
elseif(strpos($url,'kugou.com')!==false){
$media='kugou';
if(preg_match('/special\/single\/(\d+)/i',$url,$id))list($id,$type)=array($id[1],'playlist');
elseif(preg_match('/#hash\=(\w+)/i',$url,$id))list($id,$type)=array($id[1],'song');
elseif(preg_match('/album\/[single\/]*(\d+)/i',$url,$id))list($id,$type)=array($id[1],'album');
elseif(preg_match('/singer\/[home\/]*(\d+)/i',$url,$id))list($id,$type)=array($id[1],'artist');
}
elseif(strpos($url,'baidu.com')!==false){
$media='baidu';
if(preg_match('/songlist\/(\d+)/i',$url,$id))list($id,$type)=array($id[1],'playlist');
elseif(preg_match('/album\/(\d+)/i',$url,$id))list($id,$type)=array($id[1],'album');
elseif(preg_match('/song\/(\d+)/i',$url,$id))list($id,$type)=array($id[1],'song');
elseif(preg_match('/artist\/(\d+)/i',$url,$id))list($id,$type)=array($id[1],'artist');
}
else{//输入的地址不能匹配到上述的第三方音乐平台
$url = preg_replace('/\//','\\/',$url);
echo "[hplayer title=\"歌曲名\" author=\"歌手\" url=\"{$url}\" size=\"{$size}\" $audoplayHtml /]\n";
return;
}
echo "[hplayer media=\"{$media}\" id=\"{$id}\" type=\"{$type}\" size=\"{$size}\" $audoplayHtml /]\n";
}
function curl($url){
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl,CURLOPT_TIMEOUT,10);
curl_setopt($curl,CURLOPT_REFERER,$url);
$result=curl_exec($curl);
curl_close($curl);
return $result;
}
function getMusicInfo($media = 'netease', $type = 'song', $id = ''){
$api = new Meting($media);
global $netease_cookie;
if ($media == 'netease'){
$api->cookie($netease_cookie);
}
$info = array();
switch ($type){
case 'song':
$datas = $api->format(true)->song($id);
$datas = json_decode($datas,true);
$data = $datas[0];
$cover = json_decode($api->format(true)->pic($data['pic_id']),true)['url'];
$url = json_decode($api->format(true)->url($data['id']),true)['url'];
/**
* 修复网易云音乐防止盗链
*/
if ($media = 'netease'){
$url = str_replace("http://m7c","http://m7",$url);
$url = str_replace("http://m8c","http://m8",$url);
}
$url = str_replace("http://","https://", $url);
$info = array(
'name' => $data['name'],
'url' => $url,
'song_id' => $data['id'],
'cover' => $cover,
'author' => $data['artist'][0]
);
break;
case 'collect':
$datas = $api->format(true)->playlist($id);
$datas = json_decode($datas,true);
foreach ( $datas as $keys => $data){
$cover = json_decode($api->format(true)->pic($data['pic_id']),true)['url'];
$info[$keys] = array(
'name' => $data['name'],
'url' => '',
'song_id' => $data['id'],
'cover' => $cover,
'author' => $data['artist'][0]
);
}
break;
default:
$data = "";break;
}
return json_encode($info,true);
}