AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Delphi-News aus aller Welt Obtener datos metereológicos con la API REST de openweathermap
Thema durchsuchen
Ansicht
Themen-Optionen

Obtener datos metereológicos con la API REST de openweathermap

Ein Thema von DP News-Robot · begonnen am 20. Nov 2021
Antwort Antwort
Benutzerbild von DP News-Robot
DP News-Robot

Registriert seit: 4. Jun 2010
15.404 Beiträge
 
#1

Obtener datos metereológicos con la API REST de openweathermap

  Alt 20. Nov 2021, 11:40


En este post vamos a aplicar lo que hemos visto anteriormente sobre el tratamiento de las llamadas a APIs, en concreto vamos a practicar usando la API de openweathermap

Inicialmente necesitamos obtener el API-KEY, que se obtiene desde la propia página en función del tipo de servicio se necesite, en nuestro caso para hacer pruebas, con el servicio FREE es suficiente, ya que nos permite hacer 60 llamadas a la API por minuto y 1000000 al mes.

Aquí tienen los precios de los diferentes servicios que ofrece.

Una vez que tenemos el token (es algo parecido a esto: 23ab82b1ca4fab6783902accd6fb783a63) abrimos nuestra plataforma de desarrollo de aplicaciones de confianza Delphi 10.4.2

Abrimos la aplicación Rest Debugger, desde el menú Tools - Rest Debugger y en la caja de texto URL, escribimos:
http://api.openweathermap.org/data/2...3.70325&APPID= (sustituyendo por la que han obtenido de la página web)
y en la caja "Content-Type" seleccionamos la opción application/json

Pulsamos el botón SEND REQUEST, esperamos unos segundos para recibir una respuesta del servidor y pulsamos a continuación el botón COPY COMPONENTS

Después vamos al form de nuestra aplicación y pulsamos Ctrl+V para pegar los componentes RESTClient, RESTResponse y RESTRequest.



Todo esto está explicado con detalle en el post: "Utilizar los componentes REST con Delphi"
El siguiente paso es extraer la información del JSON que nos devuelve el servidor de los campos "main" y "weather" (hay más pero para este ejemplo es suficiente)

{
"coord": {
"lon": -3.7923,
"lat": 40.4587
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01n"
}
],
"base": "stations",
"main": {
"temp": 304.73,
"feels_like": 302.85,
"temp_min": 300.24,
"temp_max": 307.74,
"pressure": 1018,
"humidity": 22
},
"visibility": 10000,
"wind": {
"speed": 7.6,
"deg": 23,
"gust": 9.39
},
"clouds": {
"all": 0
},
"dt": 1629142067,
"sys": {
"type": 2,
"id": 2007545,
"country": "ES",
"sunrise": 1629091608,
"sunset": 1629141097
},
"timezone": 7200,
"id": 6544494,
"name": "Madrid City Center",
"cod": 200
}
----

Para extraer la información de dichos campos hay que seguir los pasos del post:



Añadiendo un RESTResponseDataSetAdapter, FDMemTable, BindsourceDB y BindingsList


Al final en el LiveBindings Designer tendría que aparecer lo siguiente:


Como ven los campos main y weather se vinculan a los componentes Edit1.Text y Edit2.Text (hacer todo lo anterior no se tarda más de 5 minutos)

Añadimos un componente tButton (INICIAR) y escribimos dentro del evento onclick del Botón:



PROCEDURE TForm1.Button1Click(Sender: TObject);
BEGIN

RESTRequest1.Execute;

END;
Ejecutamos el programa pulsando el botón INICIAR

Vemos que nos ha devuelto en la caja Edit1

[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}]

y en la caja Edit2

{"temp":307.92,"feels_like":305.57,"temp_min":303. 57,"temp_max":310.28,"pressure":1017,"humidity":16 }

Para que sea un poco mas manejable la información, he creado un procedimiento llamado "GetData" para que al final quede la información de esta forma



id=800
main=Clear
description=clearsky
icon=01n
temp=303.53
feels_like=301.82
temp_min=299.13
temp_max=304.97
pressure=1018
humidity=23
El procedimiento GetData es el siguiente: Procedure TForm1.GetData(texto: STRING);
VAR
i: integer;
aux: STRING;
datos: TStringDynArray;
BEGIN
aux := texto;
FOR i := LOW(texto) TO HIGH(texto) DO
BEGIN
IF (ansipos(aux[i], '{}[]"')) > 0 THEN
aux[i] := ' ';
END;
aux := stringreplace(aux, ' ', '', [rfreplaceAll]);
datos := SplitString(aux, ',');
FOR i := 0 TO length(datos) - 1 DO
BEGIN
datos[i] := stringreplace(datos[i], ':', '=', [rfreplaceAll]);
Memo1.lines.add(datos[i]);
END;
END;

---

Y este es el resultado:







Si lo quieren probar, recuerden que tienen que añadir el API-KEY en la propiedad "BaseURL" del componente RESTClient1, si no lo hacen dará el error "FDMemTable:Field main not found"


Descarga del programa

Si quieren saber más sobre desarrollo de API REST pueden consultar este post de Marco Cantú en el que habla de la web apilayer.com, una web que ofrece microservicios basados en API.





Suscribirse :



Weiterlesen...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz