Lazarus

Programming => Networking and Web Programming => Topic started by: MikeJazz on February 28, 2017, 08:21:24 pm

Title: Retrieving json data from web source and parsing it
Post by: MikeJazz on February 28, 2017, 08:21:24 pm
Hi guys,
so I'm fairly new coding in general and I'm look for some help to get me going with getting weather data from http://api.wunderground.com/api/Your_Key/features/settings/q/query.format.

Now I've filled in the part after .../api/... to reflect what i want to retrieve. Ang just typing it i to a browser i get what I'm looking for.
Now the part I need help is sending of the url, and then parsing the .json into variables that i can then use for my nefarious deeds.

I have added Synapse to my Lazarus and been playing with it, but to no avail-

- Mike
Title: Re: Retrieving json data from web source and parsing it
Post by: Phil on February 28, 2017, 09:22:54 pm
Hi guys,
so I'm fairly new coding in general and I'm look for some help to get me going with getting weather data from http://api.wunderground.com/api/Your_Key/features/settings/q/query.format.

Now I've filled in the part after .../api/... to reflect what i want to retrieve. Ang just typing it i to a browser i get what I'm looking for.
Now the part I need help is sending of the url, and then parsing the .json into variables that i can then use for my nefarious deeds.

I assume you substituted your own key for "Your_Key", right?

With Synapse, you would use the THTTPSend class. Do a GET request with the URL you want to send. If that succeeds, you can then read back the JSON returned. Use FPC's JSON units to parse the JSON returned.

Look for examples for how to use Synapse and the JSON units.

On a related note, in case you're interested, the ndfd library used with the example apps of Part 3 of the Dynamic Library article series gets weather forecast data from NDFD. It's somewhat different from WU, since it uses the NDFD SOAP service and thus the Web Service Toolkit to make the request. And the data returned is XML, not JSON. But it's there if you have a need for forecast data, in addition to WU historical weather data.

https://macpgmr.github.io/
Title: Re: Retrieving json data from web source and parsing it
Post by: sky_khan on February 28, 2017, 09:48:49 pm
Code: Pascal  [Select][+][-]
  1. uses   fphttpclient, fpjson, jsonparser;
  2.  
  3. procedure TForm1.Button1Click(Sender: TObject);
  4. var
  5.   Http: TFPHttpClient;
  6.   Content : string;
  7.   Json : TJSONData;
  8.  
  9. begin
  10.   Http:=TFPHttpClient.Create(Nil);
  11.   try
  12.      Content:=Http.Get('https://jsonplaceholder.typicode.com/users'); //  this is just an example data
  13.      JSON:=GetJSON(Content);
  14.      try
  15.         // You may look http://wiki.freepascal.org/fcl-json to see what you can do with TJSONData
  16.      finally
  17.        JSON.Free;
  18.      end;
  19.   finally
  20.     Http.Free;
  21.   end;
  22. end;
  23.  
Title: Re: Retrieving json data from web source and parsing it
Post by: BeniBela on February 28, 2017, 11:43:23 pm
My internet tools (http://www.benibela.de/sources_en.html#internettools) put it all together. E.g.:

Code: [Select]
  uses xquery, xquery_json, synapseinternetaccess;
  query('json("http://api.wunderground.com/api/Your_Key/features/settings/q/query.format").forecast.txt_forecast.forecastday(1).fcttext').toString

Or step by step:

Code: [Select]
var
  forecasts: IXQValue;
begin
  forecasts := xqvalue('http://api.wunderground.com/api/Your_Key/features/settings/q/query.format').retrieve().map('(.).forecast.txt_forecast.forecastday()');
  forecasts.get(1).getProperty('fcttext').toString;
  forecasts.get(2).getProperty('fcttext').toString;
  forecasts.get(3).getProperty('fcttext').toString;
  ...
TinyPortal © 2005-2018