Minule jsme si ukázali získávání dat z webu. Ukazovali jsme si to ale na datech ve velmi jednoduchém formátu, kdy jsme měli číslo a to bylo obsahem celé stránky. Většinou se ale na jedné stránce posílá více dat. Aby se od sebe dali odlišit, jsou v nějakém strojově čitelném formátu, ve většině případech v JSON.
Můžeme si to ukázat například zde: http://worldtimeapi.org/api/timezone/Europe/Prague, kde tato stránka nám ukazuje informace o aktuálním čase v Praze. Pro lepší zobrazení doporučuji otevírat tuto stránku v prohlížeči Firefox, který ta data zobrazí v tabulce. Taková data jsou ve formátu následujícím:
{
"abbreviation": "CET",
"client_ip": "203.0.113.15",
"datetime": "2023-11-20T10:29:45.013543+01:00",
"day_of_week": 1,
"day_of_year": 324,
"dst": false,
"dst_from": null,
"dst_offset": 0,
"dst_until": null,
"raw_offset": 3600,
"timezone": "Europe/Prague",
"unixtime": 1700472585,
"utc_datetime": "2023-11-20T09:29:45.013543+00:00",
"utc_offset": "+01:00",
"week_number": 47
}
Aby jsme taková data mohli zpracovat, potřebujeme si dostáhnout knihovnu Newtonsoft.Json. Tuto
knihovnu stáhneme následujícím způsobem:
Na pravé liště klikneme pravým tlačítkem na název náš projekt.
V zobrazeném menu klikneme na Spracovat balíčky NuGet....
V menu, co se nám otevřelo, klikneme na Procházet a do vyhledáváciho pole napíšeme
Newtonsoft.Json. Po té až se nám najde, tak na něj klikneme levým tlačítem.
Po té klikneme na tlačítko Nainstalovat.
Zde můžete vidět kód, který tuto knihovnu využívá.
using System;
using System.Net.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
class Program
{
static void Main()
{
// poskládání URL adresy
string city = "Prague";
string APIUrl = $"http://worldtimeapi.org/api/timezone/Europe/{city}";
// získání dat z API
HttpClient client = new HttpClient();
string response = client.GetStringAsync(APIUrl).Result;
// rozložení JSON na proměnné
JObject jsonObj = JsonConvert.DeserializeObject<JObject>(response);
int dayOfYear = jsonObj["day_of_year"].Value<int>();
string timezone = jsonObj["abbreviation"].Value<string>();
// vypsání dat
Console.WriteLine($"Dnes je {dayOfYear}. den v roce.");
Console.WriteLine($"Praha je v časovém pásmu {timezone}.");
Console.ReadLine();
}
}
Tento kód nám vypíše následující výstup:
Dnes je 324. den v roce.
Praha je v časovém pásmu CET.
Všimněte si, že v kódu máme město jako samostatnou proměnnou. Díky tomu můžeme změnit město na jiné jen pomocí změny proměnné, pokud se nachází v Evropě. Zde je menší vysvětlení dalšího kódu:
JObject jsonObj = JsonConvert.DeserializeObject<JObject>(response); načte výstup v proměnné response a rozdělí si ho na objekty.
int dayOfYear = jsonObj["day_of_year"].Value<int>(); si z výstupu uloženém v jsonObj vyndá text označený day_of_year a uloží si ho jako int.
string timezone = jsonObj["abbreviation"].Value<string>(); si z výstupu uloženém v jsonObj vyndá text označený dabbreviation a uloží si ho jako string.
Udělejte kód, který uživateli ukáže jeho IP adresu a časové pásmo města Sofia.
using System;
using System.Net.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
class Program
{
static void Main()
{
// poskládání URL adresy
string city = "Sofia";
string APIUrl = $"http://worldtimeapi.org/api/timezone/Europe/{city}";
// získání dat z API
HttpClient client = new HttpClient();
string response = client.GetStringAsync(APIUrl).Result;
// rozložení JSON na proměnné
JObject jsonObj = JsonConvert.DeserializeObject<JObject>(response);
string userIP = jsonObj["client_ip"].Value<string>();
string timezone = jsonObj["abbreviation"].Value<string>();
// vypsání dat
Console.WriteLine($"Vaše IP adresa je {userIP}");
Console.WriteLine($"Sofia je v časovém pásmu {timezone}.");
Console.ReadLine();
}
}
Udělejté kód, který uživateli ukáže časové pásmo jím zvoleného Evropského hlavního města. Seznam měst je zde: https://worldtimeapi.org/api/timezone/Europe/
using System;
using System.Net.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
class Program
{
static void Main()
{
// poskládání URL adresy
Console.Write("Zadejte Evropské hlavní město: ");
string city = Console.ReadLine();
string APIUrl = $"http://worldtimeapi.org/api/timezone/Europe/{city}";
// získání dat z API
HttpClient client = new HttpClient();
string response = client.GetStringAsync(APIUrl).Result;
// rozložení JSON na proměnné
JObject jsonObj = JsonConvert.DeserializeObject<JObject>(response);
string timezone = jsonObj["abbreviation"].Value<string>();
// vypsání dat
Console.WriteLine($"{city} je v časovém pásmu {timezone}.");
Console.ReadLine();
}
}