2 votos

Datos JSON en Numbers

Soy nuevo en applescript, y encontré este lenguaje muy difícil de usar. Intento escribir un applescript que obtenga los precios y símbolos de los tokens, y los ponga en Numbers. Para ello tenemos que llamar a la API 2 veces. La primera para obtener todos los ids de los tokens, y la segunda para usar esos ids como un parámetro de lista separada por comas.

Primera petición:

https://api.coingecko.com/api/v3/coins/list

Segunda petición:

https://api.coingecko.com/api/v3/simple/price?ids=[ids-from-previous-one]&vs_currencies=usd

Me inspiro en https://discussions.apple.com/thread/8126136 pero se refiere al desguace de la página web más que al análisis de JSON. También encontré algunos ejemplos de parsing pero aún así estoy muy confundido, y no pude lograr parsear el documento. Tengo JSON helper instalado.

Lo que tengo hasta ahora es:

set mySheetName to "Prices2"
set myTableName to "Coin Prices"
set tgtCell to "A2"  

tell application "JSON Helper"
    set json to fetch JSON from "https://api.coingecko.com/api/v3/coins/list"
    return json
end tell

<some magic here>

No tengo ni idea de qué hacer ahora.

¿Alguien sabe cómo abordar eso?

2voto

user3439894 Puntos 5883

Aunque es posible hacerlo en AppleScript con o sin Ayudante JSON No obstante, debido al número de registros recuperados (8888) y al tiempo que se tarda en iterar sobre ellos en comparación con un shell script solución, AppleScript no es la mejor manera de recuperar y analizar el datos .

Como prueba he utilizado AppleScript para crear un CSV archivo a partir de los datos recuperados datos y tardó más de 19 minutos en comparación con los 5 segundos que tardó en utilizar un shell script para hacer lo mismo.

Dicho esto, voy a publicar el ejemplo shell script código Solía recuperar el datos y crear un CSV archivo utilizando el utilidad de terceros : jq

Ejemplo shell script código :

#!/bin/bash

cd /private/tmp || exit
curl 'https://api.coingecko.com/api/v3/coins/list' -o coins.json
printf '%s\n' "ID,SYMBOL,NAME" > coins.csv
jq -r '.[] | [.id, .symbol, .name] | @csv' coins.json >> coins.csv
open -a "Numbers" coins.csv
  • El ejemplo shell script código es sólo eso, un ejemplo. Se puede escribir para acomodar argumentos de la línea de comandos como el URL y nombres de archivo etc.

Notas:

El orden en [.id, .symbol, .name] se utilizó sólo porque así es en el crudo datos en el sitio web y también cómo se recupera utilizando curl , mientras que Ayudante JSON cambió el orden a id, name, symbol . Puede cambiar el orden en el printf declaración y el jq consulta como quieras.

Si no tiene o utiliza Homebrew no lo necesita para obtener jq como un binario precompilado está disponible. No está empaquetado y una vez descargado como, por ejemplo jq-osx-amd64 Hice lo siguiente en Terminal :

cd Downloads
xattr -d com.apple.quarantine jq-osx-amd64
mv jq-osx-amd64 jq
chmod +x jq
mkdir -p /usr/local/bin
sudo mv -nv jq /usr/local/bin/

Para utilizar el ejemplo shell script código , en Terminal , ejecute lo siguiente comando compuesto :

f="fetchcoins"; touch "$f"; open -e "$f"; chmod +x "$f"

En el abierto fetchcoins documento Copiar y pegar el ejemplo shell script código en él y luego guardarlo y cerrarlo.

De vuelta en Terminal :

sudo mv -nv fetchcoins /usr/local/bin/

Eso es todo, ya está todo listo para usarlo en Terminal :

fetchcoins 

Sobre el uso de <strong>AppleScript </strong>si se analiza el <em>datos </em>a un <strong>CSV </strong><em>archivo </em>o escribe el <em>código </em>para rellenar el <em>células </em>en un <strong>Números </strong><em>hoja de cálculo </em>como el <em>datos </em>se itera, debido a la extrema diferencia de tiempo no voy a proporcionar el <em>ejemplo </em><strong>AppleScript </strong><em>código </em>He utilizado a menos que se solicite. Aunque para ser franco, por favor no pida y use <code>jq</code> ya que es la herramienta adecuada para este caso de uso.

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