2 votos

Cómo mostrar todos los resultados de un ciclo de repetición en el panel de resultados del Editor de secuencias de comandos

Estoy consultando la API de ipstack para obtener datos con una lista de IP utilizando un bucle repeat y JSON Helper.

Estoy recorriendo una lista de IP, pero no puedo hacer que el Editor de secuencias de comandos devuelva todos los resultados; Solo obtengo el cityName de la última IP en theListOfips en el panel de resultados, "Tallahassee" .

¿Cómo puedo hacer que el Editor de secuencias de comandos muestre una lista de todas las ciudades en el panel de resultados, con un retorno de carro después de cada una?

  set theListOfips to {"104.137.108.23", "107.140.9.50", "146.201.166.248"}

    tell application "JSON Helper"

        repeat with theCurrentValue in theListOfips

            delay 2

            set json to fetch JSON from
   "http://api.ipstack.com/" & theCurrentValue & "?access_key=theAPIkey&fields=city"

            set cityName to city of json

        end repeat

    end tell
 

3voto

qarma Puntos 71

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

1voto

5AMp Puntos 11

Trate de usar el registro() la función de registro de los resultados en el panel de mensajes.

Ejemplo:

set i to 1

repeat 10 times

    log (i)

    set i to i + 1
end repeat

Asegúrese de que usted abra el panel de mensajes: messages pane

Editar: Si es importante que esto es sólo el valor devuelto, de lo que usted podría simplemente seguir la pista de todas las cadenas y sumarlas y devolver el compuesto. El ejemplo anterior modificado:

set i to 1
set a to ""
repeat 10 times

    set a to a & i & return

    set i to i + 1
end repeat
return a

Result:
"1
2
3
4
5
6
7
8
9
10
"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X