2

私は Cocoa アプリケーションを持っています。その一部は、Web ビューでユーザーから AppleScript を受け取ります。現在、コマンドから 1 つの文字列 (現在の iTunes の曲名など) を渡すことができます。 stringValue として「(null)」を取得します。

tell application "iTunes"
    get properties of current track
end tell

これを Script Debugger で実行すると、下の表のように表示されるので、明らかに可能です。

ただし、私が試したものは何も機能していないようです。多くの SO 回答に基づいて、この質問のようにすべての記述子インデックスをループするなど、さまざまな方法を試しました。ただし、キーが配列に含まれていないように見えるため、これはもう機能しません。

したがって、基本的には、AppleScript の出力を JSON に変換できる必要があります。私はシリアライザーを持っているので、設定したCocoaオブジェクトにそれらを入れることができる限り、それは問題ではありません。これを行う最善の方法は何ですか?

ありがとう

4

1 に答える 1

1

答えとして何ヶ月も遅れていますが、あなたや他の誰かが気になる場合に備えて、私が同様の問題で行ったことを次に示します。

(悲しいことに廃止された) AppScript フレームワークをチェックしてください。これを少し変更した SBJSON と組み合わせると、AppleScript レコードを Cocoa オブジェクト経由で JSON に変換できます。

Mac AppStore で無料で提供されているJSON Helperで使用しました。Google コードの以前のバージョンのソースもここで確認できます。これは、SBJSON の変更されたバージョンを使用する場合に役立つ可能性があります。

以下の私の例では、AppleScript レコードはスクリプト コマンドを介して提供されています。

@implementation makeJSONFromRecord


- (id)performDefaultImplementation {

    NSDictionary    *asRecord;
    NSString        *result;
    AEMCodecs       *codecs = [[AEMCodecs alloc] init];


    // Use appscript framework to unpack the event into an object we can use

    asRecord =[codecs unpack:[self directParameter]];
    [codecs release];

    // Use the JSON framework to convert the object to JSON notation

    result = [asRecord JSONRepresentation];

    if (result==nil) {

    //We failed to create any valid JSON so return nothing
        NSLog(@"Failed to make JSON from: %@", asRecord);
        result=@"";
    }

    // Return the result to the applescript

    return result;

}

@end
于 2014-02-09T17:07:24.727 に答える