Lectura de datos JSON con una API REST
Problema
Algunos sitios web ofrecen una DESCANSAR API para leer datos y, a menudo, la respuesta es texto en formato JSON. ¿Cómo metemos eso en JMP?
Solución
Aquí hay un ejemplo usando el API REST de meetup.com . Es relativamente simple ya que utiliza el método común "GET", que es el predeterminado para la lectura de páginas web. Los mensajes más elaborados usan el método "POST" que requeriría un enfoque diferente. Con la solicitud GET, las entradas se agregan a la propia URL.
my key = load text file("meetupkey.txt"); // I stored my key in a text file<BR />event id = "246678392"; // the meetup id at the end of the event's URL<BR /><BR />url = "https://api.meetup.com/2/rsvps?key=" || my key || "&event_id=" || event id;
s = load text file( url ); // s contains the JSON result as a big string<BR /><BR />// We could store that in a file and then open the file, but here's a shortcut.<BR />// The Open() function can read data directly from a blob -- you just have to tell it the file type
b = char to blob(s);
dt = open(b, "JSON");<BR />// JMP interprets the JSON structured tree into a flat data table, with surprisingly good results.
Discusión
Después de leer los datos, a menudo hago una limpieza y creo columnas de conveniencia, como:
dt << New Column("reply time", formula(:results.mtime/1000 + 01Jan1970), format("ddmonyyyy"));
dt << New Column("count", formula(if(:results.response=="yes", :results.guests + 1, 0)));
Tener esto en un script facilita la actualización de mis datos según sea necesario. Ahora estoy listo para hacer algo de exploración..
Re: Lectura de datos JSON con una API REST¿Hay alguna posibilidad de que esto pueda convertirse en un video tutorial?
Re: Lectura de datos JSON con una API RESTFantástico.
Estaré publicando más ejemplos [concretos] en la sección JMP Scripts.
-Bryan
Re: Lectura de datos JSON con una API RESTHola Bryan,
Muchas gracias.Puedo enviar y recibir correctamente el formulario e intentaré incluirlo en mi secuencia de comandos.
Salud,
Howard
Re: Lectura de datos JSON con una API REST
Hola Howard,
Por lo general, cuando utiliza el método HTTP "POST", está "publicando" datos de formulario.
El Método exacto está definido por RestAPI del servicio web, ya que pueden interpretar "POST", "PUT", "GET", etc. para implicar ciertas cosas. (como esto: https://www.w3schools.com/tags/ref_httpmethods.asp )
Cuando usa la solicitud HTTP (como en su ejemplo), la cadena de consulta se convierte en parte de la URL (como:
" http://httpbin.org/post?key1=value1&key2=value2 ")
En su ejemplo, si desea publicar datos, haría esto:
url = "http://httpbin.org/post";
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Form(
Fields([[
"key1" => "value1", "key2" => "value2"
]])
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
Query String se reemplaza con Form.
El formulario tiene dos elementos, campos y archivos, ambos son matrices asociativas.
Alternativamente, puede componer su código como:
url = "http://httpbin.org/post";
my_fields = [=>];
for(i = 1, i <= 2, i++,
my_fields["key" || Char(i)] = "value" || Char(i);
);
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Form(
Fields(my_fields)
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
dependiendo de cómo desee crear sus pares clave/valor para el Formulario.
-Bryan
Re: Lectura de datos JSON con una API RESTEstoy tratando de enviar solicitudes POST con datos tabulares formateados como JSON.El siguiente código repite la solicitud POST con las entradas como argumentos, similar a una solicitud GET.
url = "http://httpbin.org/post";
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Query String(
[[
"key1" => "value1", "key2" => "value2"
]]
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
Sin embargo, quiero POST con datos en formato JSON.Así es como lo haría desde la terminal Mac OSX:
curl -d '{"table1":[{"id": 1,"value1": 10,"value2": 11},{"id": 2,"value1": 20,"value2": 21}],"table2":[{"id": 3,"value1": 30,"value2": 31},{"id": 4,"value1": 40,"value2": 41}]}' -H "Content-Type: application/json" -X POST http://httpbin.org/post
Sospecho que necesito reemplazar "Cadena de consulta", pero la documentación no está clara sobre con qué reemplazarlo.Cualquier orientación sería apreciada.
¡Gracias de antemano!
Howard
Re: Lectura de datos JSON con una API REST¡Fresco!
Esto es más fácil que el código que usé. aquí . En JMP 13 puede ser tan simple como
Open( "http://api.open-notify.org/iss-now.json?r=" || Char( Random Integer( 1, 1e6 ) ), "JSON" );
International Space Station positionInternational Space Station positionPosición de la Estación Espacial Internacional
Tenga en cuenta el truco de los números aleatorios: la URL se ve diferente cada vez para que no obtenga una copia antigua, obsoleta y almacenada en caché de los datos. El ?r= al final inicia un parámetro llamado r. Este sitio web no necesita ninguno. Si hubiera parámetros con nombre, como "?time=3:00&place=space", puede agregar su propio nombre de parámetro que el sitio ignorará: "?time=3:00&place=space&r=" (agregue el número aleatorio aquí).
En JMP 12 obtendrá la cadena JSON: "{\!"iss_position\!": {\!"latitud\!": \!"-41.6934\!", \!"longitud\!": \!"-140.2738\!"}, \!"marca de tiempo\!": 1518704338, \!"mensaje\!": \!"éxito\!"}"