介绍
MKOnlinePlayer是由孟坤博主(https://mkblog.cn)开发的一款基于网易云音乐api的在线音乐播放器。具有音乐搜索、播放、下载、歌词同步显示、个人音乐播放列表同步等功能。

在github下载该项目并部署在网站上
github下载网址:
https://github.com/mengkunsoft/MKOnlineMusicPlayer
下载好之后,把整个解压文件放在网站运行目录下,并开启php 版本建议 5.5以上
更新Meting.php
由于本项目作者在2.4版本已经不再维护,因此无法使用歌曲搜索功能,我们需要将子文件夹plugns下的Meting.php更替。Meting.php下载地址如下:
https://github.com/metowolf/Meting/blob/master/src/Meting.php
此时网站的所有功能就都可以正常使用啦。
更改musicList.js
点击播放列表,可以看到我们自己设置了几个播放列表。而播放列表的设置就在子文件夹js的musicList.js中。

网易云歌单的添加
对于网易云歌单,添加方式非常简单,只需给出歌单id即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
var musicList = [ // 以下三个系统预留列表请勿更改,否则可能导致程序无法正常运行! // 预留列表:搜索结果 { name: "搜索结果", // 播放列表名字 cover: "", // 播放列表封面 creatorName: "", // 列表创建者名字 creatorAvatar: "", // 列表创建者头像 item: [] }, // 预留列表:正在播放 { name: "正在播放", // 播放列表名字 cover: "", // 播放列表封面 creatorName: "", // 列表创建者名字 creatorAvatar: "", // 列表创建者头像 item: [] }, // 预留列表:播放历史 { name: "播放历史", // 播放列表名字 cover: "images/history.png", // 播放列表封面 creatorName: "", // 列表创建者名字 creatorAvatar: "", // 列表创建者头像 item: [] }, // 以上三个系统预留列表请勿更改,否则可能导致程序无法正常运行! //********************************************* // 自定义列表开始,您可以自由添加您的自定义列表 { id: 4906984848// 网易云歌单ID } ]; |
QQ音乐歌单的添加
对于qq音乐的歌单,我们需要使用musicList.js中自定义歌单的那一部分,qq音乐歌曲js格式如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
{ name: "自定义列表", // 播放列表名字 cover: "https://p3.music.126.net/34YW1QtKxJ_3YnX9ZzKhzw==/2946691234868155.jpg", // 播放列表封面图像 creatorName: "", // 列表创建者名字(暂时没用到,可空) creatorAvatar: "", // 列表创建者头像(暂时没用到,可空) item: [ // 这里面放歌曲 { id: "436514312", // 音乐ID name: "成都", // 音乐名字 artist: "赵雷", // 艺术家名字 album: "成都", // 专辑名字 source: "netease", // 音乐来源 url_id: "436514312", // 链接ID pic_id: "2946691234868155", // 封面ID lyric_id: "436514312", // 歌词ID pic: "https://p3.music.126.net/34YW1QtKxJ_3YnX9ZzKhzw==/2946691234868155.jpg", // 专辑图片 url: "" // mp3链接(此项建议不填,除非你有该歌曲的比较稳定的外链) }, { id: "001JD1SR29d1hS", name: "特别的爱给特别的你", artist: "伍思凯", album: "特别的爱给特别的你", source: "tencent", // 腾讯 url_id: "001JD1SR29d1hS", pic_id: "004DYsvN2QCYcj", lyric_id: "001JD1SR29d1hS", pic: "https://y.gtimg.cn/music/photo_new/T002R300x300M000004DYsvN2QCYcj.jpg?max_age=2592000", url: "" // 腾讯的外链有效期较短,插入时 url [必须]设置空值,播放时再临时抓取 } }; |
因此,我们需要获取歌单中所有歌曲的信息,然后写入js中,可以使用python爬虫的方式进行获取并更新musicList.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import re import requests import json #歌单id ID = '8178501887' headers = {"referer": "https://y.qq.com/", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.37"} # json数据 url = f"https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&new_format=1&disstid={ID}&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0" res = requests.get(url, headers=headers).text res = json.loads(res) #歌曲信息均在此保存 data = res['cdlist'][0]['songlist'] with open('musicList.js','w',encoding='utf-8') as f: f.write('''// 建议修改前先备份一下 // 获取 歌曲的网易云音乐ID 或 网易云歌单ID 的方法: // 先在 js/player.js 中开启调试模式,然后按 F12 打开浏览器的控制台。播放歌曲或点开歌单即可看到相应信息 var musicList = [ // 以下三个系统预留列表请勿更改,否则可能导致程序无法正常运行! // 预留列表:搜索结果 { name: "搜索结果", // 播放列表名字 cover: "", // 播放列表封面 creatorName: "", // 列表创建者名字 creatorAvatar: "", // 列表创建者头像 item: [] }, // 预留列表:正在播放 { name: "正在播放", // 播放列表名字 cover: "", // 播放列表封面 creatorName: "", // 列表创建者名字 creatorAvatar: "", // 列表创建者头像 item: [] }, // 预留列表:播放历史 { name: "播放历史", // 播放列表名字 cover: "images/history.png", // 播放列表封面 creatorName: "", // 列表创建者名字 creatorAvatar: "", // 列表创建者头像 item: [] }, // 以上三个系统预留列表请勿更改,否则可能导致程序无法正常运行! //********************************************* // 自定义列表开始,您可以自由添加您的自定义列表 // 方式一:手动创建列表并添加歌曲信息 // 温馨提示:各大音乐平台获取到的外链有效期均较短,因此 url 值应该设置为空,以让程序临时抓取 { name: "巴涅波赫夫的QQ音乐列表", // 播放列表名字 cover: "http://halashuo.cn/static/images/943b491dac39419fb3994fe90bdeb864.gif", // 播放列表封面图像 creatorName: "", // 列表创建者名字(暂时没用到,可空) creatorAvatar: "", // 列表创建者头像(暂时没用到,可空) item: [ // 这里面放歌曲 ''') for i in range(len(data)-1): f.writelines(" {\n") f.writelines(f" id:\"{data[i]['mid']}\",\n")# 歌曲id f.writelines(f" name:\"{data[i]['name']}\",\n")# 歌名 f.writelines(f" artist:\"{data[i]['singer'][0]['name']}\",\n")# 歌手 f.writelines(f" album:\"{data[i]['album']['name']}\",\n")# 专辑名 f.writelines(f" source: \"tencent\",\n") f.writelines(f" url_id:\"{data[i]['mid']}\",\n") f.writelines(f" pic_id:\"{data[i]['album']['mid']}\",\n") f.writelines(f" lyric_id:\"{data[i]['mid']}\",\n") f.writelines(f" pic:\"https://y.gtimg.cn/music/photo_new/T002R300x300M000{data[i]['album']['mid']}.jpg?max_age=2592000\",\n") f.writelines(f" url: \"\"\n") f.writelines(" },\n") else: i += 1 f.writelines(" {\n") f.writelines(f" id:\"{data[i]['mid']}\",\n")# 歌曲id f.writelines(f" name:\"{data[i]['name']}\",\n")# 歌名 f.writelines(f" artist:\"{data[i]['singer'][0]['name']}\",\n")# 歌手 f.writelines(f" album:\"{data[i]['album']['name']}\",\n")# 专辑名 f.writelines(f" source: \"tencent\",\n") f.writelines(f" url_id:\"{data[i]['mid']}\",\n") f.writelines(f" pic_id:\"{data[i]['album']['mid']}\",\n") f.writelines(f" lyric_id:\"{data[i]['mid']}\",\n") f.writelines(f" pic:\"https://y.gtimg.cn/music/photo_new/T002R300x300M000{data[i]['album']['mid']}.jpg?max_age=2592000\",\n") f.writelines(f" url: \"\"\n") f.writelines(" }// 列表中最后一首歌大括号后面不要加逗号\n") f.write(''' ] }, // 方式二:直接提供网易云歌单ID { id: 2474604826 }, { id: 4906984848// 网易云歌单ID } // 播放列表的最后一项大括号后面不要加逗号 ];''') |
主要使用了qq音乐如下接口:
https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&new_format=1&disstid={ID信息}&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0
同时注意修改本代码中除歌曲信息外的其他写入信息,如代码第5行的歌单ID、18行的musicList.js文件路径、55行的自定义列表名称、56行的自定义列表头像、90行之后网易云列表ID。
同时可以把该python脚本加入计划任务,使其每天更新一次musicList.js。
暂无评论