2014-03-25 50 views
1

因此,我試圖構建一個非常小的shell腳本來抓取當前播放的Spotify歌曲並返回歌曲在終端中的歌詞。從Shell中的Applescript中檢索變量

什麼工作

的AppleScript的回報/回聲曲目名稱到終端

我需要

幫我似乎無法來檢索的theArtist and theName值applescript,在下面的curl命令中使用。

關於如何使這項工作的任何提示? :)

echo "tell application \"Spotify\" 
     set theTrack to current track 
     set theArtist to artist of theTrack 
     set theName to name of theTrack 
    end tell" | osascript 

song=`curl -s "http://makeitpersonal.co/lyrics?artist=$theArtist&title=$theName"` 

echo -e "$theArtist - $theName\n$song" 

回答

1

嘗試:

# Get information from Spotify via AppleScript and store it in shell variables: 
IFS='|' read -r theArtist theName <<<"$(osascript <<<'tell application "Spotify" 
     set theTrack to current track 
     set theArtist to artist of theTrack 
     set theName to name of theTrack 
     return theArtist & "|" & theName 
    end tell')" 

# Create *encoded* versions of the artist and track name for inclusion in a URL: 
theArtistEnc=$(perl -MURI::Escape -ne 'print uri_escape($_)' <<<"$theArtist") 
theNameEnc=$(perl -MURI::Escape -ne 'print uri_escape($_)' <<<"$theName") 

# Retrieve lyrics via `curl`: 
lyrics=$(curl -s "http://makeitpersonal.co/lyrics?artist=$theArtistEnc&title=$theNameEnc") 

# Output combined result: 
echo -e "$theArtist - $theName\n$lyrics" 
  • AppleScript的隱式返回的最後一條語句的結果;因此,爲了返回多項信息,建立一個字符串以返回明確的return聲明。
  • 然後,您需要使用read解析輸出字符串到它的部件(這裏我選擇|作爲分隔符,因爲它是不太可能被包含在藝術家姓名或歌曲名稱),並將它們分配給shell變量(AppleScript的是一個完全獨立的世界,它的變量不能被shell訪問 - 信息必須通過輸出字符串傳遞)。
  • curl命令工作,你拼接成的URL的信息必須正確URL編碼(例如,Pink Floyd必須被編碼爲Pink%20Floyd),這是什麼perl命令執行。
+0

@ user2656127:不客氣,你的'curl'命令也有問題,這肯定會阻止歌詞檢索 - 請參閱我的更新;但是,不知道在線來源原則上有多好。 – mklement0

+0

完美,謝謝! – user2656127