25.4 C
Colombia
martes, julio 8, 2025

AppleScript obteniendo texto de (tipo) de archivo JSON


Dado que JavaScript puede analizar las cadenas JSON de forma nativa, podemos tomar prestada esta capacidad usando un fragmento de JXA. También he elegido llamar a la API utilizando un método Goal-C, que, al menos, da como resultado un código de aspecto más limpio (aunque veo que el resaltado de sintaxis de AskDiFferent todavía no hace frente a los apóstrofos).

El código a continuación contiene un controlador principal, APIResponseque toma un etiquetado for Parámetro que debe pasar una dirección IP para realizar una búsqueda. Si se pasa una cadena vacía o cualquier valor de no cadena (por ejemplo, lacking worth, null, me) Luego envía una solicitud API al mismo punto last pero sin una carga útil, que su documentación indica que la búsqueda se realizará con la dirección IP del usuario.

Por lo tanto, decidí realizar una búsqueda en la suya, llamando al controlador así:

set response to the APIResponse for "104.21.94.136"

Este controlador en sí contiene otro manejador integrado dentro del API Objeto de script, llamado response:. Se necesita un solo argumento, que será la cadena JSON que se devuelve por una solicitud de API. Esta cadena JSON se inserta luego en una llamada de JavaScript a JSON.parse(...) como el argumento. En un entorno de JavaScript, devolvería un Object poblado con entradas de valor clave. Esto directamente “unir” a un Applecript documentque contiene propiedades y valores.

El valor de retorno basic del script es actualmente este Applecript document Eso representa la respuesta a una solicitud de API. Sin embargo, las líneas que preceden inmediatamente a este extraer todos los campos de respuesta individuales y asignan sus valores a las variables de nivel superior con los nombres correspondientes.

Por lo tanto, puede reemplazar la línea last:

return the response

Con uno los devuelven los campos específicos que buscas, por ejemplo:

return [countryCode, isProxy]

#!/usr/bin/env osascript -s s
#・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・#
use framework "Basis"
use scripting additions
#・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・#
property textual content merchandise delimiters : {}
property nil : a reference to lacking worth
#・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・#
set response to APIResponse for "104.21.94.136"

set [ipVersion, ipAddress, isProxy, latitude, longitude, timeZone, ¬
        countryName, countryCode, zipCode, cityName, regionName, ¬
        continent, continentCode] to response's [ipVersion, ipAddress, ¬
        isProxy, latitude, longitude, timeZone, countryName, countryCode, ¬
        zipCode, cityName, regionName, continent, continentCode]

return the response
#・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・#
## HANDLERS:
on APIResponse for ip_addr
        script API
                property IPv4 handle : ({} & ip_addr & "")'s string 1
                property baseURL : "https://freeipapi.com"
                property endpoint : "/api/json/" & IPv4 handle
                property requestURL : baseURL & endpoint
                
                on response:(JSON as string)
                        run script "JSON.parse(" & quoted kind ¬
                                of JSON & ");" in "JavaScript"
                finish response:
        finish script
        
        API's response:(my (NSString's stringWithContentsOfURL:(the ¬
                URLWithString_(the requestURL of the API) of my NSURL) ¬
                encoding:(my NSUTF8StringEncoding) |error|:nil))
finish APIResponse
#・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・#

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles