用 Rust 编写的终端 Spotify 客户端。
上面演示中的终端使用 Rigel 主题。
Spotify TUI
自制
折断
尿素尿率
尼克斯
虚空Linux
费多拉/CentOS
货物
视窗
手动的
Linux 上的注意事项
勺子安装程序
安装
连接到 Spotify 的 API
用法
配置
高层要求尚未落实
Linux 的 Windows 子系统
局限性
与 Spotify 一起使用
使用的库
发展
贡献者
路线图
二进制可执行文件是spt
。
适用于 macOS 和 Linux
酿造安装spotify-tui
要更新,请运行
brew 升级 Spotify-tui
对于安装了 Snap 的系统,运行
快速安装 spt
稳定版本将自动为您安装。
如果您想安装每晚构建,请运行
快照安装 spt --edge
对于使用 Arch Linux 的用户,您可以在此处找到 AUR 上的软件包。但是,如果您使用的是 AUR 帮助程序,您可以直接从中安装,例如(在 yay 的情况下),运行
耶-S Spotify-tui
可作为spotify-tui
包使用。要安装运行:
nix-env -iA nixpkgs.spotify-tui
其中nixpkgs
是配置中的通道名称。要获得更新的安装,请使用不稳定通道。还可以将包添加到environment.systemPackages
(对于NixOS)或使用home-manager时的home.packages
。
可在官方存储库中找到。要安装,请运行
sudo xbps-install -Su spotify-tui
可在 Copr 存储库中找到。要安装,请运行
sudo dnf copr 启用 atim/spotify-tui -y && sudo dnf install spotify-tui
如果发布页面上找到的预构建二进制文件不支持您的体系结构,请使用此选项。
首先,安装Rust(使用推荐的rustup
安装方法),然后
货物安装 Spotify-tui
此方法将从源代码构建二进制文件。
要更新,请再次运行相同的命令。
要在 Linux 上编译,需要libssl
的开发包。有关基本安装说明,请参阅安装 OpenSSL。为了定位依赖,编译还需要安装pkg-config
。
如果您使用的是适用于 Linux 的 Windows 子系统,则需要安装其他依赖项。
首先,确保您的 Windows 机器上有 scoop 安装程序,有关说明,请访问 scoop.sh
然后打开 powershell 并运行以下两个命令:
勺桶添加 scoop-bucket https://github.com/Rigelolute/scoop-bucket 独家安装Spotify-tui
之后该程序可用作: spt
或spt.exe
下载适合您的操作系统的最新二进制文件。
cd
到刚刚下载的文件并解压
cd
到spotify-tui
并使用./spt
运行
spotify-tui
需要连接到 Spotify 的 API 才能按名称查找音乐、播放曲目等。
当您首次运行该应用程序时,将会显示有关如何设置的说明。
但他们又来了:
转到 Spotify 仪表板
单击Create an app
您现在可以看到您的Client ID
和Client Secret
现在单击Edit Settings
将http://localhost:8888/callback
添加到重定向 URI
向下滚动并单击Save
您现在已准备好使用 Spotify 进行身份验证!
返回终端
运行spt
输入您的Client ID
输入您的Client Secret
按 Enter 确认默认端口 (8888) 或输入自定义端口
您将被重定向到 Spotify 官方网页,询问您的权限。
接受权限后,您将被重定向到本地主机。如果一切顺利,重定向 URL 将被自动解析,现在就完成了。如果本地网络服务器由于某种原因发生故障,您将被重定向到一个空白网页,该网页可能会显示“连接被拒绝”之类的内容,因为没有服务器正在运行。不管怎样,复制 URL 并粘贴到终端的提示中。
现在您准备好使用spotify-tui
吗?
您可以随时在${HOME}/.config/spotify-tui/client.yml
编辑配置。 (对于快照${HOME}/snap/spt/current/.config/spotify-tui/client.yml
)
该二进制文件名为spt
。
运行不带参数的spt
将显示 UI。按?
打开帮助菜单,显示当前实施的关键事件及其操作。还有一个 CLI 可以完成 UI 所做的大部分工作。使用spt --help
了解更多信息。
这里有一些让您兴奋的例子。
spt --completions zsh # Prints shell completions for zsh to stdout (bash, power-shell and more are supported) spt play --name "Your Playlist" --playlist --random # Plays a random song from "Your Playlist" spt play --name "A cool song" --track # Plays 'A cool song' spt playback --like --shuffle # Likes the current song and toggles shuffle mode spt playback --toggle # Plays/pauses the current playback spt list --liked --limit 50 # See your liked songs (50 is the max limit) # Looks for 'An even cooler song' and gives you the '{name} from {album}' of up to 30 matches spt search "An even cooler song" --tracks --format "%t from %b" --limit 30
配置文件位于${HOME}/.config/spotify-tui/config.yml
,用于快照${HOME}/snap/spt/current/.config/spotify-tui/config.yml
(不要混淆使用处理 Spotify 身份验证的 client.yml)
以下是示例 config.yml 文件:
# 示例配置文件# 主题颜色可以是“255, 255, 255”形式的 rgb 字符串,也可以是引用终端主题颜色的字符串:Reset、Black、Red、Green、Yellow、Blue、Magenta、Cyan , Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White.theme: active: Cyan # 列表中当前播放的歌曲 横幅:LightCyan # 发布时的“spotify-tui”横幅 error_border: Red # 错误对话框边框 error_text: LightRed # 错误消息文本(例如“Spotify API 报告错误 404”) 提示:黄色 # 错误提示文本 悬停:洋红色#悬停窗格边框 inactive: Gray # 非活动窗格的边框 playbar_background: Black # 进度条背景 playbar_progress: LightCyan # 进度条的填充部分 playbar_progress_text: Cyan # 歌曲长度和播放时间/进度条中的左侧指示器 playbar_text: White # 播放器窗格中的艺术家姓名 selected: LightCyan # a) 选定的窗格边框,b) 列表中悬停的项目,&c) 播放器中的曲目标题 text: "255, 255, 255" # 窗格中的文本 header: White # 窗格中的标题文本(例如“标题”、“艺术家”等)behavior:eek_milliseconds: 5000 体积增量:10 # 数字越小,“每秒帧数”越高。您可以减少此数字,以使音频可视化更加流畅,但这可能会很昂贵! 滴答率毫秒:250 # 启用文本强调(通常是斜体/粗体文本样式)。如果终端配置受到其他限制并且渲染文本转义会干扰 UI,则禁用此功能可能很重要。 启用文本强调:true # 控制与 Spotify API 通信时是否在 UI 右上角显示加载指示器 显示加载指示符:true # 禁用响应式布局,使搜索栏变小变大 # 筛选并强制使用宽搜索栏 force_wide_search_bar: false # 确定在“喜欢的”Spotify 项目旁边显示的文本图标,例如 # 喜欢歌曲和专辑,或关注艺术家。可以是任意长度的字符串。 # 这些图标需要修补的书呆子字体。 喜欢的图标:♥ 随机播放图标:? 重复轨道图标:? 重复上下文图标:? 播放图标: ▶ 暂停图标:⏸ # 通过 ANSI 转义码将窗口标题设置为“spt - Spotify TUI”。 set_window_title: truekeybindings: # 如果只使用两个键,则可以使用击键: # ctrl-q 有效, # ctrl-alt-q 没有。 返回:“ctrl-q” 跳转到专辑:“a” # Shift 修饰键使用大写字母(也适用于其他修饰键 # 就像 ctrl-A) 跳转到艺术家专辑:“A” 管理设备:“d” 减少音量:“-” 增加音量:“+” 切换播放:“” 向后查找:“<” 寻求转发:“>” 下一个轨道:“n” 上一个曲目:“p” 复制歌曲网址:“c” copy_album_url:“C” 帮助: ”?” 随机播放:“ctrl-s” 重复:“r” 搜索: ”/” 音频分析:“v” 跳转到上下文:“o” 基本视图:“B” 添加项目到队列:“z”
该应用程序使用 Spotify 的 Web API,该 API 本身不处理流媒体。因此,您需要打开官方 Spotify 客户端,或者使用更轻量级的替代方案,例如 Spotify。
如果您想播放曲目,Spotify 要求您拥有 Premium 帐户。
请按照 Spotify 文档进行设置。
之后就没什么了。
开始运行 Spotify 守护进程。
启动spt
按d
转到设备选择菜单,spotifyd“设备”应该在那里 - 如果没有,请检查这些文档
tui-rs
rspotify
安装 OpenSSL
安装 Rust
安装xorg-dev
(剪贴板支持所需)
克隆或分叉此存储库并cd
到它
然后cargo run
您可能会遇到链接错误。如果是这样,您可能需要安装剪贴板包所需的其他依赖项
sudo apt-get install -y -qq pkg-config libssl-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev
感谢这些优秀的人(表情符号键):
亚历山大·克里里斯 ? ? ? ? ? ? | 米凯尔·马克斯 ? | 格热戈日·科佩瓦斯 | 奥斯汀·加瑟特 | 卡伦·罗比内特 | M*C*O ? | 安德鲁·钦 |
萨姆·纳赛尔 | 米夏 | 内里格利萨尔 | 丁满 | 回声再见 | D-尼斯 ? | 格热戈日·帕夫利克 |
伦纳特·伯恩哈特 | 阿诺·列斐伏尔 | TEM1029 | 彼得·莫斯 | 杰夫·香农 | 扎卡里·梅休 | 杰法尔蒂斯 |
马塞尔施拉姆 | 周芳怡 | 最大限度 | 斯文·范德弗利斯特 | 雅各布·克里斯马什 | 尼尔斯·劳奇 | 尼克·斯托克顿 ? ? |
斯图尔特·辛森 | 萨姆·卡尔弗特 | 杰罗恩·维金伯格 | 金伯利·库克 | 奥黛丽·巴克斯特 | 诺曼 | 彼得·马特曼 |
亚历山大 | 芬·沃斯 | 卡洛斯·埃尔南德斯 ? | 佩德罗·阿尔维斯 | 标签猫 | 本杰明·基托 | 阿莱斯·奈曼 ? |
杰里米·斯塔基 | (´⌣`ʃƪ) | 阿尔乔姆·波利什丘克 ? | 克里斯·索斯宁 | 本·布什 | 李肖恩 | 蒂莫西·格伯 |
费迪南德·拉塔伊恰克 | 谢尔·乔克西 | 迈克尔·赫尔维格 | 奥利弗·丹尼尔 | 德鲁·费舍尔 | 编码器-1 | 麦奎尔·林图尔 |
里卡多·奥尔金 | 丰田圭介 | 克雷格·阿斯提尔 | 奥尼尔法 | 乌尔梅 | 谢尔盖·A. | 冈田英行 |
凯帕埃 | 埃里科·诺盖拉·罗利姆 | 亚历山大·迈因哈特·舍雷尔 | 翁德热·金斯特 | 克赖安90 | 伊万诺夫 | 比1yeu |
可能 | 布鲁诺·A·穆西尼奥 | 芬·赫迪格 | DP304 | 马可·米切拉 | 马尔科·耶尼 ? | 阿图尔·科瓦奇 |
安东尼·凯勒曼 | 拉斯穆斯·佩德森 | 黑色-Z | 大卫·贝利 | 羊墙 | 华特瓦斯那 | 杰西 |
桑 | 高桥佑纪 | 亚历杭德罗·安古洛 | 安东·科斯廷 | 贾斯汀·塞克斯顿 | 加提乐 | 马修·科宾 |
米洛 ? | 迭戈·维拉利 | 玛雅·博贾斯卡 |
该项目遵循所有贡献者规范。欢迎任何形式的贡献!
我们的目标是最终实现 Spotify 的几乎所有功能。
将歌曲添加到播放列表
能够在每个视图中滚动浏览结果页面
此表显示了 Spotify API 的所有功能、已实现的功能以及是否必要。
API方法 | 实施了吗? | 解释 | 基本的? |
---|---|---|---|
追踪 | 不 | 在给定曲目 ID、URI 或 URL 的情况下返回单个曲目 | 不 |
曲目 | 不 | 返回给定曲目 ID、URI 或 URL 列表的曲目列表 | 不 |
艺术家 | 不 | 根据艺术家的 ID、URI 或 URL 返回单个艺术家 | 是的 |
艺术家 | 不 | 返回给定艺术家 ID、URI 或 URL 的艺术家列表 | 不 |
艺术家专辑 | 是的 | 获取有关艺术家专辑的 Spotify 目录信息 | 是的 |
艺术家热门曲目 | 是的 | 获取有关艺术家按国家/地区列出的前 10 首曲目的 Spotify 目录信息。 | 是的 |
艺术家相关艺术家 | 是的 | 获取与已识别艺术家类似的艺术家的 Spotify 目录信息。相似性基于对 Spotify 社区收听历史的分析。 | 是的 |
专辑 | 是的 | 在给定相册 ID、URI 或 URL 的情况下返回单个相册 | 是的 |
专辑 | 不 | 返回给定相册 ID、URI 或 URL 的相册列表 | 不 |
搜索相册 | 是的 | 根据查询搜索相册 | 是的 |
搜索艺术家 | 是的 | 根据查询搜索艺术家 | 是的 |
搜索轨迹 | 是的 | 根据查询搜索曲目 | 是的 |
搜索播放列表 | 是的 | 根据查询搜索播放列表 | 是的 |
专辑曲目 | 是的 | 获取有关专辑曲目的 Spotify 目录信息 | 是的 |
用户 | 不 | 获取有关 Spotify 用户的基本个人资料信息 | 不 |
播放列表 | 是的 | 获取有关 Spotify 播放列表的完整详细信息 | 是的 |
当前用户播放列表 | 是的 | 获取当前用户的播放列表,而无需获取他的个人资料 | 是的 |
用户播放列表 | 不 | 获取用户的播放列表 | 不 |
用户播放列表 | 不 | 获取用户的播放列表 | 不 |
用户播放列表曲目 | 是的 | 获取用户拥有的播放列表曲目的完整详细信息 | 是的 |
用户播放列表创建 | 不 | 为用户创建播放列表 | 是的 |
用户播放列表更改详细信息 | 不 | 更改播放列表的名称和/或公共/私有状态 | 是的 |
用户播放列表取消关注 | 是的 | 取消关注(删除)用户的播放列表 | 是的 |
用户播放列表添加轨道 | 不 | 将曲目添加到播放列表 | 是的 |
用户播放列表替换曲目 | 不 | 替换播放列表中的所有曲目 | 不 |
用户播放列表记录器曲目 | 不 | 对播放列表中的曲目重新排序 | 不 |
user_playlist_remove_all_occurrences_of_track | 不 | 从给定播放列表中删除所有出现的给定曲目 | 不 |
user_playlist_remove_specific_occurrenes_of_track | 不 | 从给定播放列表中删除所有出现的给定曲目 | 不 |
user_playlist_follow_playlist | 是的 | 将当前经过身份验证的用户添加为播放列表的关注者。 | 是的 |
user_playlist_check_follow | 不 | 检查给定的用户是否正在关注给定的播放列表 | 是的 |
我 | 不 | 获取有关当前用户的详细个人资料信息。 | 是的 |
当前用户 | 不 | me 的别名 | 是的 |
当前用户播放曲目 | 是的 | 获取有关当前用户当前正在播放曲目的信息。 | 是的 |
当前用户保存的专辑 | 是的 | 获取当前授权用户的“您的音乐”库中保存的专辑列表 | 是的 |
当前用户保存的曲目 | 是的 | 获取用户保存的曲目或“喜欢的歌曲” | 是的 |
当前用户关注的艺术家 | 是的 | 获取当前授权用户关注的艺术家列表 | 是的 |
当前用户保存的曲目删除 | 是的 | 从当前用户的“您的音乐”库中删除一首或多首曲目。 | 是的 |
current_user_saved_tracks_contain | 不 | 检查当前 Spotify 用户的“您的音乐”库中是否已保存一首或多首曲目。 | 是的 |
current_user_saved_tracks_add | 是的 | 将一首或多首曲目保存到当前用户的“您的音乐”库中。 | 是的 |
当前用户顶级艺术家 | 不 | 获取当前用户的顶级艺术家 | 是的 |
当前用户热门曲目 | 不 | 获取当前用户的热门曲目 | 是的 |
当前用户最近玩过的游戏 | 是的 | 获取当前用户最近播放的曲目 | 是的 |
current_user_saved_albums_add | 是的 | 将一张或多张专辑添加到当前用户的“您的音乐”库中。 | 是的 |
当前用户保存的相册删除 | 是的 | 从当前用户的“您的音乐”库中删除一张或多张专辑。 | 是的 |
用户关注艺术家 | 是的 | 关注一位或多位艺术家 | 是的 |
用户取消关注艺术家 | 是的 | 取消关注一位或多位艺术家 | 是的 |
用户关注用户 | 不 | 关注一位或多位用户 | 不 |
用户取消关注用户 | 不 | 取消关注一位或多位用户 | 不 |
特色播放列表 | 不 | 获取 Spotify 精选播放列表的列表 | 是的 |
新版本 | 不 | 获取 Spotify 中精选的新专辑发行列表 | 是的 |
类别 | 不 | 获取用于在 Spotify 中标记项目的类别列表 | 是的 |
建议 | 是的 | 获取基于种子的推荐 | 是的 |
音频特征 | 不 | 获取曲目的音频特征 | 不 |
音频特征 | 不 | 获取多个曲目的音频功能 | 不 |
音频分析 | 是的 | 获取曲目的音频分析 | 是的 |
设备 | 是的 | 获取用户的可用设备 | 是的 |
当前播放 | 是的 | 获取有关用户当前播放的信息 | 是的 |
当前播放 | 不 | 获取用户当前播放的曲目 | 不 |
传输_回放 | 是的 | 传输用户的播放 | 是的 |
开始播放 | 是的 | 开始/恢复用户的播放 | 是的 |
暂停播放 | 是的 | 暂停用户的播放 | 是的 |
下一个曲目 | 是的 | 跳到用户的播放到下一曲目 | 是的 |
上一个曲目 | 是的 | 跳到用户的播放到上一曲目 | 是的 |
寻找轨道 | 是的 | 寻找当前播放曲目中的位置 | 是的 |
重复 | 是的 | 设置用户播放的重复模式 | 是的 |
体积 | 是的 | 设置用户播放的音量 | 是的 |
随机播放 | 是的 | 切换用户随机播放 | 是的 |