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开发了一款基于网易云歌单的命令行播放器,分享给大家

64 回复

希望大家能喜欢,提一些建议。我接下来会不断的优化


这个项目挺有意思的,把网易云歌单和命令行播放器结合起来了。核心思路应该是用requests之类的库爬取或调用网易云API获取歌单信息,解析出歌曲名和播放链接,然后用subprocess调用本地播放器(比如mpvffplay)来播放。

我写个最简化的概念验证代码给你看看:

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()

实际开发中关键点:

  1. 网易云API调用需要处理加密参数(crypto模块)
  2. 获取真实播放链接可能需要解析music.163.com的页面
  3. 可以加入播放列表循环、暂停/继续等控制功能
  4. 考虑用argparse处理命令行参数

建议用clickargparse做个好看的命令行界面。

可惜用虾米

重复了

可以试一下哈

仔细看

网易的新版 api 好像加了加了密

会员歌曲怎么办呢……

比 musicbox 好用?

我做的这个是基于歌单听歌的,所以都是免费的。主要是想解决歌单间随机切换的小痛点😄

我做的这个是基于歌单听歌的,主要是想解决歌单间随机切换的小痛点😄,并没有想做类似 musicbox 的大而全的播放器呀

哈哈,一看就是懂得人

法务部门周一上班,哈哈哈

哈哈哈 所以趁早发

这种东西只能拿来自娱自乐一下,没什么实际意义呀。😂

网易花了那么大力气开发了手机端、网页版和 mac 的图形客户端 你们现在搞命令行 我要是产品经理得苦出来

已 star py 小萌新求互 follow ?

代码的乐趣就在这里呀😄

哈哈 生命不息 折腾不止

会被网易发律师函的小心点

已 follow ,互相学习

😓好的,多谢提醒

之前好像有过类似的作品,后来因为版权原因项目被作者删除了

我这刚开发出来就听到这么悲桑的故事

不过我还是很支持这些项目的^_^

来个 star 互相 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
你们可以好好交流一下,一起搞一搞

我只是一名不会写代码的吃瓜群众~~~

肿么都是黄易音乐的,没见过有虾米的。。

重复造轮子啦

我的天 志同道合的人这么多

也不能说重复造轮子,只是展示的很像,解决的小痛点却各有不同

恩恩。。

确实挺好的,不知道缓存机制怎么样

mark…感谢分享啊

目前是用 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

已收到,我升级一下,如果产生同样的报错我会尽快解决,保持联系哈

厉害了。居然破解了网易加密接口的方法。

是大神破的

window 不能用吗?

目前还没支持,有感兴趣的朋友可以一起开发哈。

谢谢大家的支持😄

为楼主点个赞

谢谢😄

回到顶部