2017-05-19 12:56:04 +00:00
|
|
|
|
<?php
|
|
|
|
|
/**************************************************
|
2017-09-09 12:36:18 +00:00
|
|
|
|
* MKOnlinePlayer v2.3
|
2017-05-19 12:56:04 +00:00
|
|
|
|
* 后台音乐数据抓取模块
|
|
|
|
|
* 编写:mengkun(http://mkblog.cn)
|
2017-09-09 12:36:18 +00:00
|
|
|
|
* 时间:2017-9-9
|
|
|
|
|
* 特别感谢 @metowolf 提供的 Meting.php
|
2017-05-19 12:56:04 +00:00
|
|
|
|
*************************************************/
|
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
define('HTTPS', true); // 如果您的网站启用了https,请将此项置为“true”
|
|
|
|
|
define('DEBUG', false); // 是否开启调试模式,正常使用时请将此项置为“false”
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
/*****************************************************************************************************/
|
|
|
|
|
if(!defined('DEBUG') || DEBUG !== true) error_reporting(0); // 屏蔽服务器错误
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
require_once('plugns/Meting.php');
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
use Metowolf\Meting;
|
|
|
|
|
|
|
|
|
|
$source = getParam('source', 'netease'); // 歌曲源
|
|
|
|
|
if($source == 'kugou' || $source == 'baidu') define('NO_HTTPS', true); // 酷狗和百度音乐源暂不支持 https
|
|
|
|
|
$API = new Meting($source);
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
$API->format(true); // 启用格式化功能
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch(getParam('types')) // 根据请求的 Api,执行相应操作
|
2017-05-19 12:56:04 +00:00
|
|
|
|
{
|
2017-09-09 12:36:18 +00:00
|
|
|
|
case 'url': // 获取歌曲链接
|
|
|
|
|
$id = getParam('id'); // 歌曲ID
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
|
|
|
|
$data = $API->url($id);
|
|
|
|
|
|
|
|
|
|
echojson($data);
|
2017-09-09 12:36:18 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'pic': // 获取歌曲链接
|
|
|
|
|
$id = getParam('id'); // 歌曲ID
|
|
|
|
|
|
|
|
|
|
$data = $API->pic($id);
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
echojson($data);
|
2017-05-19 12:56:04 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
case 'lyric': // 获取歌词
|
|
|
|
|
$id = getParam('id'); // 歌曲ID
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
$data = $API->lyric($id);
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
echojson($data);
|
|
|
|
|
break;
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
case 'download': // 下载歌曲(弃用)
|
|
|
|
|
$fileurl = getParam('url'); // 链接
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
header('location:$fileurl');
|
2017-05-19 12:56:04 +00:00
|
|
|
|
exit();
|
|
|
|
|
break;
|
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
case 'userlist': // 获取用户歌单列表
|
|
|
|
|
$uid = getParam('uid'); // 用户ID
|
|
|
|
|
|
|
|
|
|
$url= 'http://music.163.com/api/user/playlist/?offset=0&limit=1001&uid='.$uid;
|
|
|
|
|
$data = file_get_contents($url);
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
echojson($data);
|
2017-05-19 12:56:04 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
case 'playlist': // 获取歌单中的歌曲
|
|
|
|
|
$id = getParam('id'); // 歌单ID
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
$data = $API->format(false)->playlist($id);
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
echojson($data);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'search': // 搜索歌曲
|
|
|
|
|
$s = getParam('name'); // 歌名
|
|
|
|
|
$limit = getParam('count', 20); // 每页显示数量
|
|
|
|
|
$pages = getParam('pages', 1); // 页码
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
$data = $API->search($s, $pages, $limit);
|
2017-05-19 12:56:04 +00:00
|
|
|
|
|
|
|
|
|
echojson($data);
|
|
|
|
|
break;
|
2017-09-09 12:36:18 +00:00
|
|
|
|
|
2017-05-19 12:56:04 +00:00
|
|
|
|
default:
|
2017-09-09 12:36:18 +00:00
|
|
|
|
echo '<!doctype html><html><head><meta charset="utf-8"><title>信息</title><style>* {font-family: microsoft yahei}</style></head><body> <h2>MKOnlinePlayer</h2><h3>Github: https://github.com/mengkunsoft/MKOnlineMusicPlayer</h3><br>';
|
|
|
|
|
if(!defined('DEBUG') || DEBUG !== true) { // 非调试模式
|
|
|
|
|
echo '<p>Api 调试模式已关闭</p>';
|
|
|
|
|
} else {
|
|
|
|
|
echo '<p><font color="red">您已开启 Api 调试功能,正常使用时请在 api.php 中关闭该选项!</font></p><br>';
|
|
|
|
|
|
|
|
|
|
echo '<p>PHP 版本:'.phpversion().' (本程序要求 PHP 5.4+)</p><br>';
|
|
|
|
|
|
|
|
|
|
echo '<p>服务器函数检查</p>';
|
|
|
|
|
echo '<p>curl_exec: '.checkfunc('curl_exec',true).' (用于获取音乐数据)</p>';
|
|
|
|
|
echo '<p>file_get_contents: '.checkfunc('file_get_contents',true).' (用于获取音乐数据)</p>';
|
|
|
|
|
echo '<p>json_decode: '.checkfunc('json_decode',true).' (用于后台数据格式化)</p>';
|
|
|
|
|
echo '<p>hex2bin: '.checkfunc('hex2bin',true).' (用于数据解析)</p>';
|
|
|
|
|
echo '<p>openssl_encrypt: '.checkfunc('openssl_encrypt',true).' (用于数据解析)</p>';
|
2017-05-19 12:56:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-09-09 12:36:18 +00:00
|
|
|
|
echo '</body></html>';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 检测服务器函数支持情况
|
|
|
|
|
* @param $f 函数名
|
|
|
|
|
* @param $m 是否为必须函数
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
function checkfunc($f,$m = false) {
|
|
|
|
|
if (function_exists($f)) {
|
|
|
|
|
return '<font color="green">可用</font>';
|
|
|
|
|
} else {
|
|
|
|
|
if ($m == false) {
|
|
|
|
|
return '<font color="black">不支持</font>';
|
|
|
|
|
} else {
|
|
|
|
|
return '<font color="red">不支持</font>';
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-05-19 12:56:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取GET或POST过来的参数
|
|
|
|
|
* @param $key 键值
|
|
|
|
|
* @param $default 默认值
|
|
|
|
|
* @return 获取到的内容(没有则为默认值)
|
|
|
|
|
*/
|
2017-09-09 12:36:18 +00:00
|
|
|
|
function getParam($key, $default='')
|
2017-05-19 12:56:04 +00:00
|
|
|
|
{
|
|
|
|
|
return trim($key && is_string($key) ? (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default)) : $default);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 输出一个json或jsonp格式的内容
|
|
|
|
|
* @param $data 数组内容
|
|
|
|
|
*/
|
|
|
|
|
function echojson($data) //json和jsonp通用
|
|
|
|
|
{
|
2017-09-09 12:36:18 +00:00
|
|
|
|
header('Content-type: application/json');
|
2017-05-19 12:56:04 +00:00
|
|
|
|
$callback = getParam('callback');
|
2017-09-09 12:36:18 +00:00
|
|
|
|
|
|
|
|
|
if(defined('HTTPS') && HTTPS === true && !defined('NO_HTTPS')) { // 替换链接为 https
|
|
|
|
|
$data = str_replace('http:\/\/', 'https:\/\/', $data);
|
|
|
|
|
$data = str_replace('http://', 'https://', $data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if($callback) //输出jsonp格式
|
2017-05-19 12:56:04 +00:00
|
|
|
|
{
|
2017-09-09 12:36:18 +00:00
|
|
|
|
die(htmlspecialchars($callback).'('.$data.')');
|
2017-05-19 12:56:04 +00:00
|
|
|
|
} else {
|
|
|
|
|
die($data);
|
|
|
|
|
}
|
2017-09-09 12:36:18 +00:00
|
|
|
|
}
|