From a22f634eb69a9fd7041bd2d939d6bdcc2f49e9a3 Mon Sep 17 00:00:00 2001 From: mengkun <1163540807@qq.com> Date: Sun, 1 Apr 2018 21:05:50 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=E7=BC=93=E5=AD=98=E7=BD=91=E6=98=93?= =?UTF-8?q?=E4=BA=91=E6=95=B0=E6=8D=AE=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=BF=AB?= =?UTF-8?q?=E6=8D=B7=E9=94=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 缓存网易云歌词及歌单数据,防止因请求频繁导致无法获取数据(请确保程序目录下的 cache 文件夹存在且可读写); 新增快捷键控制功能(Ctrl + 方向键 切歌,空格 暂停)感谢 @茗血。 --- api.php | 49 +++++++++++++++++++++++++++++++++++++++++++++--- cache/index.html | 0 js/player.js | 10 ++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 cache/index.html diff --git a/api.php b/api.php index 9994faa..aa3f378 100644 --- a/api.php +++ b/api.php @@ -24,6 +24,7 @@ $netease_cookie = ''; define('HTTPS', false); // 如果您的网站启用了https,请将此项置为“true”,如果你的网站未启用 https,建议将此项设置为“false” define('DEBUG', false); // 是否开启调试模式,正常使用时请将此项置为“false” +define('CACHE_PATH', 'cache/'); // 文件缓存目录,请确保该目录存在且有读写权限。如无需缓存,可将此行注释掉 /* 如果遇到程序不能正常运行,请开启调试模式,然后访问 http://你的网站/音乐播放器地址/api.php ,进入服务器运行环境检测。 @@ -52,7 +53,11 @@ if($source == 'kugou' || $source == 'baidu') { $API->cookie($netease_cookie); // 解决网易云 Cookie 失效 } -switch(getParam('types')) // 根据请求的 Api,执行相应操作 +// 没有缓存文件夹则创建 +if(defined('CACHE_PATH') && !is_dir(CACHE_PATH)) createFolders(CACHE_PATH); + +$types = getParam('types'); +switch($types) // 根据请求的 Api,执行相应操作 { case 'url': // 获取歌曲链接 $id = getParam('id'); // 歌曲ID @@ -73,7 +78,22 @@ switch(getParam('types')) // 根据请求的 Api,执行相应操作 case 'lyric': // 获取歌词 $id = getParam('id'); // 歌曲ID - $data = $API->lyric($id); + if(($source == 'netease') && defined('CACHE_PATH')) { + $cache = CACHE_PATH.$source.'_'.$types.'_'.$id.'.json'; + + if(file_exists($cache)) { // 缓存存在,则读取缓存 + $data = file_get_contents($cache); + } else { + $data = $API->lyric($id); + + // 只缓存链接获取成功的歌曲 + if(json_decode($data)->lyric !== '') { + file_put_contents($cache, $data); + } + } + } else { + $data = $API->lyric($id); + } echojson($data); break; @@ -97,7 +117,22 @@ switch(getParam('types')) // 根据请求的 Api,执行相应操作 case 'playlist': // 获取歌单中的歌曲 $id = getParam('id'); // 歌单ID - $data = $API->format(false)->playlist($id); + if(($source == 'netease') && defined('CACHE_PATH')) { + $cache = CACHE_PATH.$source.'_'.$types.'_'.$id.'.json'; + + if(file_exists($cache) && (date("Ymd", filemtime($cache)) == date("Ymd"))) { // 缓存存在,则读取缓存 + $data = file_get_contents($cache); + } else { + $data = $API->format(false)->playlist($id); + + // 只缓存链接获取成功的歌曲 + if(isset(json_decode($data)->playlist->tracks)) { + file_put_contents($cache, $data); + } + } + } else { + $data = $API->format(false)->playlist($id); + } echojson($data); break; @@ -135,6 +170,14 @@ switch(getParam('types')) // 根据请求的 Api,执行相应操作 echo ''; } +/** + * 创建多层文件夹 + * @param $dir 路径 + */ +function createFolders($dir) { + return is_dir($dir) or (createFolders(dirname($dir)) and mkdir($dir, 0755)); +} + /** * 检测服务器函数支持情况 * @param $f 函数名 diff --git a/cache/index.html b/cache/index.html new file mode 100644 index 0000000..e69de29 diff --git a/js/player.js b/js/player.js index 05aeb2e..27ba51d 100644 --- a/js/player.js +++ b/js/player.js @@ -461,3 +461,13 @@ mkpgb.prototype = { return true; } }; + +// 快捷键切歌,代码来自 @茗血(https://www.52benxi.cn/) +document.onkeydown = function showkey(e) { + var key = e.keyCode || e.which || e.charCode; + var ctrl = e.ctrlKey || e.metaKey; + var isFocus = $('input').is(":focus"); + if (ctrl && key == 37) playList(rem.playid - 1); // Ctrl+左方向键 切换上一首歌 + if (ctrl && key == 39) playList(rem.playid + 1); // Ctrl+右方向键 切换下一首歌 + if (key == 32 && isFocus == false) pause(); // 空格键 播放/暂停歌曲 +} \ No newline at end of file