La solución inmediata sería el uso de la Replies
en lugar del panel de la Results
panel en Script Editor
. Se imprimirá un resultado en vivo de cada una de AppleScript comando ejecutado durante la ejecución de una secuencia de comandos, mientras que el Results
panel sólo devuelve el resultado global de la ejecución del script (que equivale al resultado de sólo el final de comandos).
El último comando en el script será set cityName to city of json
, y así, el resultado de su guión será el valor de cityName
después de que se ha establecido para el valor de la JSON registro al que se refiere específicamente a la última dirección IP en su lista, es decir, "146.201.166.248"
.
Así que para una solución más completa, puede modificar la secuencia de comandos ligeramente de modo que el último comando será uno que devuelve lo que realmente quieres. Usted puede hacer esto mediante la primera de declarar una variable como un vacío list
, en la que habría que agregar un item
de datos en cada iteración de repetición del bucle. Después de la repetición del bucle, el comando sería simplemente una referencia a que list
a fin de tener AppleScript evaluar su contenido y devolver el resultado:
set APIKey to "<your secret key>"
set URLRelativePath to "http://api.ipstack.com/"
set URLQueryString to "?access_key=" & the APIKey & "&fields=city"
set IPaddresses to {"104.137.108.23", "107.140.9.50", "146.201.166.248"}
set cityNames to {}
tell application "JSON Helper" to repeat with IPaddress in the IPaddresses
fetch JSON from the URLRelativePath & the IPaddress & the URLQueryString
set the end of cityNames to the contents of the result's city
--OR: set the end of cityNames to the contents of {the IPaddress, the result's city}
end repeat
return the cityNames
Esto devuelve una lista de todos los nombres de la ciudad (o una lista de listas de direcciones IP-nombre de la ciudad de los pares si usted decide usar la línea he comentado como una alternativa). Para hacer esta lista en una sola pieza de texto con una ciudad por línea, utilice la lista que contiene los nombres de la ciudad; se establece el text item delimiters
a linefeed
; luego de obligar a la list
a text
. Así, en lugar de return the cityNames
, se tendría:
set my text item delimiters to linefeed
return the cityNames as text