20 个重大版本发布
0.25.0 | 2021 年 8 月 24 日 |
---|---|
0.24.0 | 2021 年 4 月 26 日 |
0.23.0 | 2021 年 1 月 6 日 |
0.22.0 | 2020 年 10 月 5 日 |
0.10.0 | 2019 年 11 月 30 日 |
#1902 在 命令行工具
每月 293 次下载
585KB
11K SLoC
Spotify TUI
用 Rust 编写的 Spotify 终端客户端。
上面的演示中使用的是 Rigel 主题。
安装
二进制可执行文件是 spt
。
Homebrew
适用于 macOS 和 Linux
brew install spotify-tui
要更新,运行
brew upgrade spotify-tui
Snap
对于已安装 Snap 的系统,运行
snap install spt
将自动为您安装稳定版本。
如果您想安装夜间构建版本,运行
snap install spt --edge
AUR
对于使用 Arch Linux 的用户,您可以在 AUR 此处 找到该软件包。如果您使用 AUR 辅助程序,可以直接从中安装,例如(在 yay 的情况下),运行
yay -S spotify-tui
Nix
作为 spotify-tui
软件包提供。要安装,运行
nix-env -iA nixpkgs.spotify-tui
其中 nixpkgs
是您配置中的频道名称。要获得更最新的安装,请使用不稳定频道。还可以将软件包添加到 environment.systemPackages
(对于 NixOS),或当使用 home-manager 时,添加到 home.packages
。
Void Linux
可在官方仓库中找到。要安装,运行
sudo xbps-install -Su spotify-tui
Fedora/CentOS
可在 Copr 仓库中找到。要安装,运行
sudo dnf copr enable atim/spotify-tui -y && sudo dnf install spotify-tui
Cargo
如果您的架构不支持在 发布页面 上找到的预构建二进制文件,请使用此选项。
首先,安装 Rust(使用推荐的 rustup
安装方法),然后
cargo install spotify-tui
此方法将从源代码构建二进制文件。
要更新,再次运行相同的命令。
Linux 注意事项
在Linux上进行编译时,需要安装libssl
的开发包。有关基本安装说明,请参阅安装OpenSSL。为了定位依赖项,编译还需要安装pkg-config
。
如果你正在使用Windows Subsystem for Linux,则需要安装其他依赖项。
Windows 10
Scoop 安装程序
首先,确保scoop安装程序在你的Windows机器上,有关说明请访问scoop.sh
然后打开powershell并运行以下两个命令
scoop bucket add scoop-bucket https://github.com/Rigellute/scoop-bucket
scoop install spotify-tui
之后程序将以: spt
或 spt.exe
的形式可用
手动
- 下载适用于您操作系统的最新二进制文件。
cd
到你刚刚下载的文件并解压cd
到spotify-tui
并使用./spt
运行
连接到 Spotify 的 API
spotify-tui
需要连接到Spotify的API,以便通过名称查找音乐,播放曲目等。
首次运行应用程序时,将显示如何设置此功能的说明。
但它们又来了
- 前往Spotify仪表板
- 点击
创建应用
- 现在你可以看到你的
客户端ID
和客户端密钥
- 现在你可以看到你的
- 现在点击
编辑设置
- 将
https://127.0.0.1:8888/callback
添加到重定向URI - 向下滚动并点击
保存
- 你现在可以认证Spotify了!
- 回到终端
- 运行
spt
- 输入你的
客户端ID
- 输入你的
客户端密钥
- 按Enter确认默认端口(8888)或输入自定义端口
- 你将被重定向到一个官方的Spotify网页,要求你给予权限。
- 接受权限后,你将被重定向到localhost。如果一切顺利,重定向URL将被自动解析,现在你已经完成了。如果由于某种原因本地Web服务器失败,你将被重定向到一个空白网页,可能会说“连接拒绝”,因为没有服务器正在运行。无论如何,复制URL并将其粘贴到终端中的提示符。
现在你就可以使用spotify-tui
了 🎉
您可以在${HOME}/.config/spotify-tui/client.yml
中随时编辑配置。(对于snap ${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
,对于 snap ${HOME}/snap/spt/current/.config/spotify-tui/config.yml
(不要与处理 Spotify 身份验证的 client.yml 混淆)
以下是一个示例 config.yml 文件
# Sample config file
# The theme colours can be an rgb string of the form "255, 255, 255" or a string that references the colours from your terminal theme: Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White.
theme:
active: Cyan # current playing song in list
banner: LightCyan # the "spotify-tui" banner on launch
error_border: Red # error dialog border
error_text: LightRed # error message text (e.g. "Spotify API reported error 404")
hint: Yellow # hint text in errors
hovered: Magenta # hovered pane border
inactive: Gray # borders of inactive panes
playbar_background: Black # background of progress bar
playbar_progress: LightCyan # filled-in part of the progress bar
playbar_progress_text: Cyan # song length and time played/left indicator in the progress bar
playbar_text: White # artist name in player pane
selected: LightCyan # a) selected pane border, b) hovered item in list, & c) track title in player
text: "255, 255, 255" # text in panes
header: White # header text in panes (e.g. 'Title', 'Artist', etc.)
behavior:
seek_milliseconds: 5000
volume_increment: 10
# The lower the number the higher the "frames per second". You can decrease this number so that the audio visualisation is smoother but this can be expensive!
tick_rate_milliseconds: 250
# Enable text emphasis (typically italic/bold text styling). Disabling this might be important if the terminal config is otherwise restricted and rendering text escapes interferes with the UI.
enable_text_emphasis: true
# Controls whether to show a loading indicator in the top right of the UI whenever communicating with Spotify API
show_loading_indicator: true
# Disables the responsive layout that makes the search bar smaller on bigger
# screens and enforces a wide search bar
enforce_wide_search_bar: false
# Determines the text icon to display next to "liked" Spotify items, such as
# liked songs and albums, or followed artists. Can be any length string.
# These icons require a patched nerd font.
liked_icon: ♥
shuffle_icon: 🔀
repeat_track_icon: 🔂
repeat_context_icon: 🔁
playing_icon: ▶
paused_icon: ⏸
keybindings:
# Key stroke can be used if it only uses two keys:
# ctrl-q works,
# ctrl-alt-q doesn't.
back: "ctrl-q"
jump_to_album: "a"
# Shift modifiers use a capital letter (also applies with other modifier keys
# like ctrl-A)
jump_to_artist_album: "A"
manage_devices: "d"
decrease_volume: "-"
increase_volume: "+"
toggle_playback: " "
seek_backwards: "<"
seek_forwards: ">"
next_track: "n"
previous_track: "p"
copy_song_url: "c"
copy_album_url: "C"
help: "?"
shuffle: "ctrl-s"
repeat: "r"
search: "/"
audio_analysis: "v"
jump_to_context: "o"
basic_view: "B"
add_item_to_queue: "z"
限制
此应用使用 Spotify 的 Web API,它本身不处理流媒体。因此,您需要打开官方 Spotify 客户端或使用更轻量级的替代品,例如 spotifyd。
如果您想播放曲目,Spotify 要求您拥有 Premium 账户。
与 spotifyd 一起使用
按照 spotifyd 文档进行设置。
之后就没有太多的事情了。
- 启动 spotifyd 守护进程。
- 启动
spt
- 按
d
进入设备选择菜单,spotifyd "设备" 应该在那里 - 如果不在,请检查 这些文档
使用的库
开发
- 安装 OpenSSL
- 安装 Rust
- 安装
xorg-dev
(用于剪贴板支持) - 克隆或分叉此存储库并将其
cd
到其中 - 然后执行
cargo run
Windows Linux 子系统
您可能会遇到链接错误。如果是这样,您可能需要安装剪贴板包所需的一些附加依赖项
sudo apt-get install -y -qq pkg-config libssl-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev
贡献者
感谢这些可爱的人(emoji key)
本项目遵循all-contributors规范。欢迎任何形式的贡献!
路线图
目标是最终实现几乎所有的Spotify功能。
尚未实施的高级要求
- 向播放列表添加歌曲
- 能够在每个视图中滚动结果页面
此表显示了Spotify API所能实现的所有功能,哪些已经实现,以及哪些是必需的。
API方法 | 是否已实现? | 说明 | 必需? |
---|---|---|---|
track | 否 | 根据曲目ID、URI或URL返回单个曲目 | 否 |
tracks | 否 | 根据曲目ID、URI或URL列表返回曲目列表 | 否 |
artist | 否 | 根据艺术家ID、URI或URL返回单个艺术家 | 是 |
artists | 否 | 根据艺术家ID、URI或URL列表返回艺术家列表 | 否 |
artist_albums | 是 | 获取关于艺术家专辑的Spotify目录信息 | 是 |
artist_top_tracks | 是 | 获取关于艺术家按国家排名前10的曲目Spotify目录信息。 | 是 |
artist_related_artists | 是 | 获取与指定艺术家类似的艺术家的Spotify目录信息。相似性基于Spotify社区收听历史分析。 | 是 |
album | 是 | 根据专辑ID、URI或URL返回单个专辑 | 是 |
albums | 否 | 根据专辑ID、URI或URL列表返回专辑列表 | 否 |
search_album | 是 | 根据查询搜索专辑 | 是 |
search_artist | 是 | 根据查询搜索艺术家 | 是 |
search_track | 是 | 根据查询搜索歌曲 | 是 |
search_playlist | 是 | 根据查询搜索播放列表 | 是 |
album_track | 是 | 获取关于专辑歌曲的Spotify目录信息 | 是 |
user | 否 | 获取Spotify用户的基礎個人資訊 | 否 |
playlist | 是 | 获取Spotify播放列表的详细信息 | 是 |
current_user_playlists | 是 | 获取当前用户播放列表,无需获取其个人资料 | 是 |
user_playlists | 否 | 获取用户的播放列表 | 否 |
user_playlist | 否 | 获取用户的播放列表 | 否 |
user_playlist_tracks | 是 | 获取用户拥有的播放列表中的歌曲的详细信息 | 是 |
user_playlist_create | 否 | 为用户创建播放列表 | 是 |
user_playlist_change_detail | 否 | 更改播放列表的名称和/或公开/私密状态 | 是 |
user_playlist_unfollow | 是 | 取消关注(删除)用户的播放列表 | 是 |
user_playlist_add_track | 否 | 将歌曲添加到播放列表 | 是 |
user_playlist_replace_track | 否 | 替换播放列表中的所有歌曲 | 否 |
user_playlist_recorder_tracks | 否 | 重新排序播放列表中的歌曲 | 否 |
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 | 否 | 与 me 同义 |
是 |
current_user_playing_track | 是 | 获取当前用户正在播放的歌曲的信息。 | 是 |
current_user_saved_albums | 是 | 获取当前授权用户“您的音乐”库中保存的专辑列表 | 是 |
current_user_saved_tracks | 是 | 获取用户的保存歌曲或“喜欢的歌曲” | 是 |
current_user_followed_artists | 是 | 获取当前授权用户关注的艺术家列表 | 是 |
current_user_saved_tracks_delete | 是 | 从当前用户的“您的音乐”库中删除一首或多首歌曲。 | 是 |
current_user_saved_tracks_contain | 否 | 检查一首或多首歌曲是否已保存到当前Spotify用户的“您的音乐”库中。 | 是 |
current_user_saved_tracks_add | 是 | 将一首或多首歌曲保存到当前用户的“您的音乐”库中。 | 是 |
current_user_top_artists | 否 | 获取当前用户的最爱艺术家 | 是 |
current_user_top_tracks | 否 | 获取当前用户的最爱歌曲 | 是 |
current_user_recently_played | 是 | 获取当前用户最近播放的歌曲 | 是 |
current_user_saved_albums_add | 是 | 将一首或多首专辑添加到当前用户的“您的音乐”库中。 | 是 |
current_user_saved_albums_delete | 是 | 从当前用户的“您的音乐”库中删除一首或多首专辑。 | 是 |
user_follow_artists | 是 | 关注一位或多位艺术家 | 是 |
user_unfollow_artists | 是 | 取消关注一位或多位艺术家 | 是 |
user_follow_users | 否 | 关注一位或多位用户 | 否 |
user_unfollow_users | 否 | 取消关注一位或多位用户 | 否 |
featured_playlists | 否 | 获取Spotify特色播放列表的列表 | 是 |
new_releases | 否 | 获取Spotify特色的新专辑发布列表 | 是 |
categories | 否 | 获取用于标记Spotify中项的类别列表 | 是 |
recommendations | 是 | 根据种子获取推荐 | 是 |
audio_features | 否 | 获取歌曲的音频特征 | 否 |
audios_features | 否 | 获取多首歌曲的音频特征 | 否 |
audio_analysis | 是 | 获取歌曲的音频分析 | 是 |
device | 是 | 获取用户的可用设备 | 是 |
current_playback | 是 | 获取用户当前播放信息 | 是 |
current_playing | 否 | 获取用户当前播放的歌曲 | 否 |
transfer_playback | 是 | 传输用户的播放 | 是 |
start_playback | 是 | 开始/恢复用户的播放 | 是 |
pause_playback | 是 | 暂停用户的播放 | 是 |
next_track | 是 | 跳过用户的播放到下一首曲目 | 是 |
previous_track | 是 | 跳过用户的播放到上一首曲目 | 是 |
seek_track | 是 | 在当前播放曲目中定位到指定位置 | 是 |
repeat | 是 | 设置用户播放的重复模式 | 是 |
volume | 是 | 设置用户播放的音量 | 是 |
shuffle | 是 | 切换用户播放的随机播放模式 | 是 |
依赖项
~20–35MB
~509K SLoC