MUSIC PHP,music.php

该代码实现了一个简单的接口,用于与网易云音乐API交互,包括获取播放列表详情、获取指定ID的音乐数据以及进行音乐搜索。使用了PHP进行HTTP请求,并对请求参数进行了AES加密。同时,代码处理了加密后的响应数据,返回音乐的播放URL和比特率。
摘要由CSDN通过智能技术生成

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2017/6/28 0028

* Time: 下午 2:48

*/

//头部数据

$BASE = array(

'referer' => 'https://music.163.com/',

'cookie' => 'os=linux; appver=1.0.0.1026; osver=Ubuntu%2016.10; MUSIC_U=78d411095f4b022667bc8ec49e9a44cca088df057d987f5feaf066d37458e41c4a7d9447977352cf27ea9fee03f6ec4441049cea1c6bb9b6; __remember_me=true',

'useragent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',

);

if($_REQUEST['act'] == 'playlist')

{

$res = get_playlist_info(776508496);

echo $res;

}

elseif($_REQUEST['act'] == 'musicData')

{

$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : 0;

$API = array(

'method' => 'POST',

'url' => 'http://music.163.com/api/linux/forward',

'body' => array(

'method' => 'POST',

'params' => array(

'ids' => array($id),

'br' => 128000,

),

'url' => 'http://music.163.com/api/song/enhance/player/url',

),

'encode' => 'netease_AESECB',

'decode' => 'netease_url',

);

$musicData = curl($API, $BASE);

echo $musicData;

}

elseif($_REQUEST['act'] == 'musicSearch')

{

$page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1;

$search = isset($_REQUEST['search']) ? $_REQUEST['search'] : "";

$SearchAPI=array(

'method' => 'POST',

'url' => 'http://music.163.com/api/linux/forward',

'body' => array(

'method' => 'POST',

'params' => array(

's' => $search,

'type' => 1,

'limit' => 30,

'total' => 'true',

'offset' => $page,

),

'url' => 'http://music.163.com/api/cloudsearch/pc',

),

'encode' => 'netease_AESECB',

'format' => 'result#songs',

);

echo curl($SearchAPI, $BASE);

}

function get_playlist_info($playlist_id)

{

$url = "http://music.163.com/api/playlist/detail?id=" . $playlist_id;

return curl_get($url);

}

//普通请求

function curl_get($url)

{

$refer = "http://music.163.com/";

$header[] = "Cookie: " . "appver=1.5.0.75771;";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

curl_setopt($ch, CURLOPT_REFERER, $refer);

$output = curl_exec($ch);

curl_close($ch);

return $output;

}

//加密请求请求

function curl($API, $BASE)

{

$API = netease_AESECB($API);

$curl = curl_init();

if (is_array($API['body'])) {

$API['body']=http_build_query($API['body']);

}

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $API['body']);

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_TIMEOUT, 20);

curl_setopt($curl, CURLOPT_ENCODING, 'gzip');

curl_setopt($curl, CURLOPT_IPRESOLVE, 1);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);

curl_setopt($curl, CURLOPT_URL, $API['url']);

curl_setopt($curl, CURLOPT_COOKIE, $BASE['cookie']);

curl_setopt($curl, CURLOPT_REFERER, $BASE['referer']);

curl_setopt($curl, CURLOPT_USERAGENT, $BASE['useragent']);

for ($i=0;$i <= 3;$i++) {

$data=curl_exec($curl);

$info=curl_getinfo($curl);

$error=curl_errno($curl);

$status=$error?curl_error($curl):'';

if (!$error) {

break;

}

}

curl_close($curl);

if ($error) {

return json_encode(

array(

'error' => $error,

'info' => $info,

'status' => $status,

)

);

}

// $data = netease_url($data);

return $data;

}

function netease_AESECB($API)

{

$KEY='7246674226682325323F5E6544673A51';

$body=json_encode($API['body']);

if (function_exists('openssl_encrypt')) {

$body=openssl_encrypt($body, 'aes-128-ecb', pack('H*', $KEY));

} else {

$PAD=16-(strlen($body)%16);

$body=base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, hex2bin($KEY), $body.str_repeat(chr($PAD), $PAD), MCRYPT_MODE_ECB));

}

$body=strtoupper(bin2hex(base64_decode($body)));

$API['body']=array(

'eparams'=>$body,

);

return $API;

}

function netease_url($result)

{

$data=json_decode($result, 1);

if($data['data'][0]['uf'] != null) {

$url=array(

'url' => str_replace('http://m8', 'https://m8', $data['data'][0]['uf']['url']),

'br' =>$data['data'][0]['uf']['br']/1000,

);

}

else{

$url=array(

'url' => str_replace('http://m8', 'https://m8', $data['data'][0]['url']),

'br' => $data['data'][0]['br']/1000,

);

}

return json_encode($url);

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值