Python开发了一款基于网易云歌单的命令行播放器,分享给大家
MellPlayer
前言
我写代码时非常喜欢听音乐,最近在网易云歌单中听到了许多入耳惊艳的歌,觉得非常不错。但是歌单的随机播放以及快速切换是个软肋,于是开发了 MellPlayer ,可以按照分类随机听歌,实现了歌单间的快速切换,希望大家能够喜欢。

开发理念
MellPlayer 的初版刚刚发布,还有许许多多需要改进的地方,非常希望能有志同道合的朋友 Fork 下来,一起打造越来越完美的播放器,下面就说下我的开发理念:
MellPlayer 是一款命令行播放器,主要是为了实现根据心情随机听歌,并且能够快速进行歌单间的切换,简约流畅,我希望在此基础上谨慎添加小而美的功能。并不想引入过多繁琐的功能,添加一大堆的快捷键,将简洁的东西繁琐化是违背我的初衷的。
关于项目
项目地址:MellPlayer
项目基于 python3 开发,依赖 mpv 。还有很多地方需要优化改进,大家发现什么问题可以给我提 Issue ,当然非常欢迎有兴趣的朋友加入,一起打造我们喜欢的播放器。
既然看到这儿了,就来 Star 一下, 互相 Follow 一下吧哈哈!!!
支持
OSX & Linux (Linux 未经过测试)
安装
通过 pip3 安装
[sudo] pip3 install MellPlayer
Mac OSX 安装依赖
通过 Homebrew 安装 mpv
brew install mpv
更新
通过 pip3 更新
[sudo] pip3 install MellPlayer --upgrade
使用
在命令行直接输入 mellplayer 即可享受:
mellplayer
快捷键
操作
[j] [Next Line] ---> 下
[k] [Prev Line] ---> 上
[q] [Quit] ---> 退出
音乐
[space] [Start/Pause] —> 播放/暂停
[n] [Next Song] —> 下一曲
[p] [Prev Song] —> 上一曲
[f] [Forward Playlist] —> 下个歌单
[b] [Backward Playlist] —> 上个歌单
音量
[-] [Reduce Volume] —> 减小音量
[=] [Increase Volume] —> 增加音量
[m] [Mute] —> 静音
歌词
[l] [Show/Hide Lyric] —> 显示/关闭歌词
帮助
[h] [Show/Hide Help] —> 显示/关闭帮助
Python开发了一款基于网易云歌单的命令行播放器,分享给大家
希望大家能喜欢,提一些建议。我接下来会不断的优化
这个项目挺有意思的,把网易云歌单和命令行播放器结合起来了。核心思路应该是用requests之类的库爬取或调用网易云API获取歌单信息,解析出歌曲名和播放链接,然后用subprocess调用本地播放器(比如mpv或ffplay)来播放。
我写个最简化的概念验证代码给你看看:
import requests
import subprocess
import sys
def get_playlist_songs(playlist_id):
"""模拟获取歌单歌曲列表(这里需要替换为真实的API调用)"""
# 示例:这里应该调用网易云API,返回歌曲名和播放URL的列表
# 实际开发中你需要处理API签名、加密等问题
mock_songs = [
{"name": "歌曲1", "url": "http://example.com/song1.mp3"},
{"name": "歌曲2", "url": "http://example.com/song2.mp3"},
]
return mock_songs
def play_song(url):
"""使用系统播放器播放歌曲"""
# 使用mpv播放(需要先安装mpv)
try:
subprocess.run(["mpv", "--no-video", url], check=True)
except FileNotFoundError:
print("请先安装mpv播放器:sudo apt install mpv 或 brew install mpv")
sys.exit(1)
def main():
playlist_id = input("请输入网易云歌单ID: ")
songs = get_playlist_songs(playlist_id)
print(f"找到{len(songs)}首歌曲:")
for i, song in enumerate(songs, 1):
print(f"{i}. {song['name']}")
choice = int(input("选择要播放的歌曲编号: ")) - 1
if 0 <= choice < len(songs):
print(f"正在播放: {songs[choice]['name']}")
play_song(songs[choice]['url'])
else:
print("无效的选择")
if __name__ == "__main__":
main()
实际开发中关键点:
- 网易云API调用需要处理加密参数(
crypto模块) - 获取真实播放链接可能需要解析
music.163.com的页面 - 可以加入播放列表循环、暂停/继续等控制功能
- 考虑用
argparse处理命令行参数
建议用click或argparse做个好看的命令行界面。
可惜用虾米
重复了
可以试一下哈
仔细看
网易的新版 api 好像加了加了密
会员歌曲怎么办呢……
比 musicbox 好用?
我做的这个是基于歌单听歌的,所以都是免费的。主要是想解决歌单间随机切换的小痛点😄
我做的这个是基于歌单听歌的,主要是想解决歌单间随机切换的小痛点😄,并没有想做类似 musicbox 的大而全的播放器呀
哈哈,一看就是懂得人
法务部门周一上班,哈哈哈
哈哈哈 所以趁早发
这种东西只能拿来自娱自乐一下,没什么实际意义呀。😂
网易花了那么大力气开发了手机端、网页版和 mac 的图形客户端 你们现在搞命令行 我要是产品经理得苦出来
已 star py 小萌新求互 follow ?
代码的乐趣就在这里呀😄
哈哈 生命不息 折腾不止
会被网易发律师函的小心点
😓好的,多谢提醒
之前好像有过类似的作品,后来因为版权原因项目被作者删除了
我这刚开发出来就听到这么悲桑的故事
不过我还是很支持这些项目的^_^
https://github.com/sutar/WasAPlayer 这个好像是那个悲桑的故事
不过还有这些:
https://github.com/darknessomi/musicbox
https://github.com/arrowing/ColorPlayer
https://github.com/chenminhua/netsound
https://github.com/fraserxu/music163-cli
你们可以好好交流一下,一起搞一搞
我只是一名不会写代码的吃瓜群众~~~
肿么都是黄易音乐的,没见过有虾米的。。
重复造轮子啦
我的天 志同道合的人这么多
也不能说重复造轮子,只是展示的很像,解决的小痛点却各有不同
恩恩。。
确实挺好的,不知道缓存机制怎么样
目前是用 mpv 自己的缓存,准备下个版本收集点意见建议一步步开发出来。
哈哈哈 说句经典的话 “你的支持就是我最大的动力”
想请教一下楼主这命令行 ui 怎么做的
首先获取 terminal_size ,然后计算一下当前要打印的行数和布局,然后直接打印出来,最后捕捉键入信息刷新当前页面。但是要注意多线程打印会跳行,所以在结尾加\r 。源码在 mellplayer/ui.py 中。
我把 musicbox 集成到 flask 放到树莓派上,就可以在手机上控制或定时让树莓派放音乐。
现在就用这个当闹钟。 
楼主一看就是个 vim 党
哈哈哈 猜到了开头 猜不到结局😂
啥都玩儿一点儿
我基本调通他的加密过程,并且在 musicbox 代码基础上修改尝试了一些接口,比如获取某个用户歌单什么的,有兴趣可以交流一下。
ui 这样写感觉蛮厉害
win 下装不了
Skipping optional fixer: buffer
Skipping optional fixer: idioms
Skipping optional fixer: set_literal
Skipping optional fixer: ws_comma
running build_ext
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastm
th.
building ‘Crypto.Random.OSRNG.winrandom’ extension
error: Unable to find vcvarsall.bat
抱歉,没看清,目前不支持 win
那真是极好的,交流交流,怎么联系?
哈哈哈 过奖了
目前 linux 还有些问题,我会逐步完善这个项目 感谢支持
mark 一下,支持支持 ~~
我这边系统是 macOS 10.12.3 ,一进选歌单环境界面就 Crash 了
报错原因:“ Fatal Python error: Cannot recover from stack overflow.”
运行环境 Python3.6.0 ,是 brew 安装的
感谢感谢
嗨,能把全部报错信息推上来么,推到 github 上也行。我马上去查
id 就是 github ib 里面有邮箱
已发 GitHub Issue
ok
已收到,我升级一下,如果产生同样的报错我会尽快解决,保持联系哈
厉害了。居然破解了网易加密接口的方法。
是大神破的
window 不能用吗?
目前还没支持,有感兴趣的朋友可以一起开发哈。
谢谢大家的支持😄
为楼主点个赞
谢谢😄


