2011-01-05 4 views
6

Ho un'API basata sul Web a cui desidero inviare richieste POST/GET tramite AppleScript. Vorrei recuperare e analizzare la risposta in modo tale da poterla inserire in un'altra app.È possibile e come si ottengono dati remoti (ad esempio JSON) in AppleScript?

È possibile? Se é cosi, come?

I dati JSON sarebbe, per esempio, simile a questa:

{"result":"success","image":,"foo", "name":"bar"}

+1

Non credo AppleScript ha alcun supporto nativo per questo (anche se potrei sbagliarmi), ma si può sempre usare 'fare shell script'. –

risposta

3

per rispondere alla domanda specifica (dopo una rapida rilettura), l'unico supporto web Applescript ha è attraverso la biblioteca URL Access Scripting, che è solo un wrapper per il comando curl del terminale. È un po 'buggato e non riporta tutto come dovrebbe.

Oltre a ciò, non esiste alcun supporto JSON nativo in Applescript, e farlo sarà un po 'doloroso. Per analizzare il JSON, è necessario utilizzare lo Applescript's text item delimiters.

set mJson to "\"result\":\"success\",\"image\":\"foo\", \"name\":\"bar\"" -- get your data into a string somehow, like a function 
set AppleScript's text item delimiters to {","} 
set keyValueList to (every text item in mJson) as list 
set AppleScript's text item delimiters to "" 
(*"result":"success", "image":"foo", "name":"bar"*) 

repeat with thiskeyValuePair from 1 to (count keyValueList) 
    set theKeyValuePair to item thiskeyValuePair of keyValueList 
    set AppleScript's text item delimiters to {":"} 
    set theKeyValueBufferList to (every text item in theKeyValuePair) as list 
    set AppleScript's text item delimiters to "" 
    set theKey to item 1 of theKeyValueBufferList 
    (*"result"*) 
    set theValue to item 2 of theKeyValueBufferList 
    (*"success"*) 
end repeat 

Questo è tutto fatto quando tutto va bene. Dovrai prendere in considerazione JSON mal formato, come nel tuo esempio che contiene una virgola in più a cui non appartiene, e varianze come spazi extra e simili. Se puoi manipolare i dati altrove per ottenere quello che ti serve, ti suggerirei di farlo. Applescript non è molto buono per cose come questa.

0

Analizzo XML/HTML/JSON ecc. Utilizzando espressioni regolari. AppleScript non ha il supporto nativo per le espressioni regolari, ma puoi scaricare un'aggiunta di script chiamata Satimage che ti consentirà di utilizzarli nei tuoi Applescript.

Scaricare e installare l'aggiunta di script e quindi controllare lo Satimage user guide per istruzioni e codice di esempio.

Se non si ha familiarità con le espressioni regolari (o anche se lo si è), un'app denominata RegExhibit consente di trovare la sintassi corretta per gli script.

8

Avevo bisogno di analizzare JSON in AppleScript, e ho creato un'app per lo sfondo molto semplice da scrivere. In pratica unisce solo due framework (JSON, Appscript).

Ora è disponibile gratuitamente su Mac App Store. Puoi dare un'occhiata ad altri esempi sul nostro website.

uso è molto semplice:

tell application "JSONHelper" 

    -- return JSON from an AppleScript list 

    set jsonString to make JSON from {"A", "B", "C"} 
    log jsonString 

    set asList to read JSON from jsonString 

    -- return JSON from an AppleScript record 

    set jsonString to make JSON from {a_string:"string", a_list:{"abc", 123, false, true}} 
    log jsonString 

    -- return an AppleScript record from JSON 

    set asRecord to read JSON from jsonString 
    log asRecord 

end tell 
+0

Ben fatto. Ciò più una sorta di richiesta HTTP per recuperare il JSON potrebbe aver risolto il mio problema. – buley

+0

Cool - Ho appena usato "do shell script" e arricciavo per recuperare il JSON - ma probabilmente c'è qualcosa di più elegante. – davidb

+1

La versione MAS ora ha un comando "fetch JSON" per evitare di arricciarsi per scaricare il JSON. – davidb

1

avevo bisogno di una versione che non richiede alcuna nuove dipendenze (come l'installazione di un app). Quindi ho realizzato un codice JavaScript/decodificatore JSON.

https://github.com/KAYLukas/applescript-json

+0

Durante l'ispezione del tuo codice (che speravo di usare) sembra che tu stia usando Python, piuttosto che solo il applescript? – simonthumper

+0

Sì, è giusto. Ma python è sempre disponibile su Mac OS X. Pensavo che usare solo applescript fosse un modo per rallentare. – user23127

+0

Sì, funzionava bene e decodificava il JSON. Lo volevo anch'io ... non appena lo ho buttato in uno script Xcode anche se mi dava qualche errore python, immagino che Xcode sia semplicemente divertente su ciò che può e non può corri :) Ho finito per scrivere il mio parser in mele, ma come hai detto è stato molto lento! – simonthumper

2

La domanda era anni ma ormai sembra che ci sia una soluzione disponibile:

JSON Helper è un agente (o applicazione in background script), che ti permette di fare cose utili con JSON (JavaScript Object Notation) direttamente da AppleScript.

http://www.mousedown.net/mouseware/JSONHelper.html App Store

Problemi correlati