2012-02-01 5 views
0

現在再生中の曲の歌詞をGoogleで検索するスクリプトを作成します。なぜ次のようなことはできませんか?AppleScript:GoogleでiTunesトラックの歌詞を検索する

tell application "iTunes" 
    set trackArtist to artist of current track 
    set trackName to name of current track 
end tell 
set search to trackArtist & " - " & trackName & " lyrics" 
open location "https://www.google.com/search?q=" & search 

I "リターン検索" した場合、私は変数が正しく設定されて見ることができます。そして最後の行の "search"を "test lyrics"に置き換えると、ブラウザは期待通りに開きます。しかし、上記のスクリプトは何の動作もせず、エラーを返すこともありません。

答えて

1

あなたは、ほとんどのブラウザがアドレスフィールドのURLをデコードし、要求する前にURLをもう一度エンコードしていることを忘れたと思います。だからあなたがする必要があるのは、URLをエンコードすることです。

tell application "iTunes" 
    set trackArtist to artist of current track 
    set trackName to name of current track 
end tell 
open location "http://www.google.com/search?q=" & rawurlencode(trackArtist & " - " & trackName & " lyrics") 

on rawurlencode(theURL) 
    set PHPScript to "<?php echo rawurlencode('%s');?>" 
    set theURL to do shell script "echo " & quoted form of theURL & " | sed s/\\'/\\\\\\\\\\'/g" 
    return do shell script "printf " & quoted form of PHPScript & space & quoted form of theURL & " | php" 
end rawurlencode 
+0

Marvelous!ありがとうございました。私はエンコーディングを行う方法を知らなかったでしょう。なぜsed s/\\ '/ \\\\\\\\'/gのスラッシュが必要なのでしょうか? – Zade

+0

はい、私はsedコマンドが混乱していることを知っています。あなたが新しい環境に入るたびに、バックスラッシュをエスケープする必要があります。そうすれば、AppleScriptでは2になりますが、シェルで必要なときには4になり、結局PHPで単一引用符をエスケープする必要があります。したがって、8(2^3 = 8)。あなたが見ることができるように、名前に一重引用符が付いた曲やアーティストも正しくエンコードされます。この方法でsedコマンドを使用しなかった場合、これは起こりません。 –

関連する問題