dwm 状态栏中的当前 Spotify 轨道

lup*_*p3x 6 text-processing dwm

我正在尝试将 Spotify 中播放的当前曲目放入我的 dwm 状态栏中。我已经到了使用此命令获取信息的地步。

enter code heredbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata'
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

method return sender=:1.0 -> dest=:1.15 reply_serial=2
variant       array [
     dict entry(
        string "mpris:artUrl"
        variant                string "http://open.spotify.com/thumb/45656b0961cba1598d127c3404ad276acb8e961b"
     )
     dict entry(
        string "mpris:length"
        variant                uint64 308000000
     )
     dict entry(
        string "mpris:trackid"
        variant                string "spotify:track:7oGXMMrB78C5tQhumQ2jfZ"
     )
     dict entry(
        string "xesam:album"
        variant                string "Chopin"
     )
     dict entry(
        string "xesam:artist"
        variant                array [
              string "Frederic Chopin"
           ]
     )
     dict entry(
        string "xesam:autoRating"
        variant                double 0.57
     )
     dict entry(
        string "xesam:contentCreated"
        variant                string "2009-01-01T00:00:00"
     )
     dict entry(
        string "xesam:discNumber"
        variant                int32 0
     )
     dict entry(
        string "xesam:title"
        variant                string "Waltz No. 1 in E flat Major, Op. 18"
     )
     dict entry(
        string "xesam:trackNumber"
        variant                int32 8
     )
     dict entry(
        string "xesam:url"
        variant                string "spotify:track:7oGXMMrB78C5tQhumQ2jfZ"
     )
  ]
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我如何从这个结果中获取字典条目“xesam:artist”和“xesam:title”,以便我可以把它放在我的状态栏中?

jas*_*yan 4

如果它是格式良好的 JSON,那么这会简单得多,然后您可以使用jshon之类的工具来智能地询问数据。

可以使用awk,但取决于一致的输出:

awk 'BEGIN {RS=" entry\\("; FS="\""}; /artist/ {artist = $4}; /title/ {title = $4} END { print artist": "title}' spotify_output                      
Frederic Chopin: Waltz No. 1 in E flat Major, Op. 18
Run Code Online (Sandbox Code Playgroud)

RS本质上,通过将记录分隔符 ( ) 更改为各个条目块 ( ) 来分解文件entry(,并通过将字段分隔符 ( FS) 从默认值(空格)更改为引号 ( ")来分隔这些记录中的字段。包含您正在寻求的价值观。

从那里开始,它只是模式匹配(例如,/artist/)。