2011-01-05 3 views
6

Tengo una API basada en web a la que me gustaría enviar solicitudes POST/GET a través de AppleScript. Me gustaría recuperar y analizar la respuesta de manera que pueda enviarla a otra aplicación.¿Puede y cómo obtiene datos remotos (por ejemplo, JSON) en AppleScript?

¿Esto es posible? ¿Si es así, cómo?

Los datos JSON sería, por ejemplo, el siguiente aspecto:

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

+1

no creo AppleScript tiene ningún soporte nativo para esto (aunque podría estar equivocado), pero siempre se puede usar 'hacer script' cáscara. –

Respuesta

3

Para responder a la pregunta específica (después de una de nueva lectura rápida), el único soporte web Applescript tiene es a través de la biblioteca URL Access Scripting, que es solo un contenedor para el comando curl de la terminal. Es un poco problemático y no informa todo como debería.

Más allá de eso, tampoco hay soporte para JSON nativo en AppleScript, y hacerlo va a ser un poco doloroso. Para analizar el JSON, necesitará usar el 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 

Todo esto se hace cuando todo va bien. Tendrás que tener en cuenta JSON mal formado, como en tu ejemplo, que contiene una coma adicional donde no pertenece, y variaciones como espacios extra y similares. Si puede manipular los datos en otra parte para obtener lo que necesita, le sugiero que lo haga. Applescript no es muy bueno para cosas como esta.

0

Analizo XML/HTML/JSON, etc. utilizando expresiones regulares. AppleScript no tiene soporte nativo para expresiones regulares pero puede descargar una adición de scripting llamada Satimage que le permitirá usarlas en sus AppleScript.

Descargue e instale la adición de scripting y luego revise Satimage user guide para obtener instrucciones y código de muestra.

Si no está familiarizado con las expresiones regulares (o incluso si lo es), una aplicación llamada RegExhibit le ayudará a encontrar la sintaxis correcta para sus scripts.

8

Necesitaba analizar JSON en AppleScript, e hice una aplicación de fondo de secuencias de comandos muy simple para hacer esto. Realmente solo une dos marcos (JSON, Appscript).

Ahora está disponible de forma gratuita en Mac AppStore. Puede ver más ejemplos en nuestro website.

uso es muy sencillo:

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

Bien hecho. Esto más algún tipo de solicitud HTTP para recuperar el JSON podría haber resuelto mi problema. – buley

+0

Cool - Acabo de utilizar "do shell script" y curl para buscar el JSON, pero probablemente haya algo más elegante. – davidb

+1

La versión MAS ahora tiene un comando "fetch JSON" para evitar tener que curl para descargar el JSON. – davidb

1

necesitaba una versión que no requiere ninguna nuevas dependencias (como la instalación de una aplicación). Así que hice un AppleScript solo como codificador/decodificador json.

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

+0

Al inspeccionar tu código (que esperaba usar) parece que estás usando Python, en lugar de AppleScript solamente? – simonthumper

+0

Sí, eso es correcto. Pero Python siempre está disponible en Mac OS X. Pensé que usar solo AppleScript era un proceso lento. – user23127

+0

Sí, funcionó bien y decodificó el JSON. Lo quería también ... tan pronto como lo descarté en un script de ejecución de Xcode aunque me dio algunos errores de pitón, supongo que Xcode es divertido sobre lo que puede y no puede correr :) ¡Terminé escribiendo mi propio analizador en applescript pero como dijiste fue muy lento! – simonthumper

2

La pregunta era años de edad, pero por ahora no parece ser una solución disponible:

JSON Helper es un agente (o aplicación de fondo de secuencias de comandos), que le permite hacer cosas útiles con JSON (JavaScript Object Notation) directamente desde AppleScript.

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

Cuestiones relacionadas