Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Reta programado / Bazoj de Cro
Peti de publika API
La kliento de la antaŭa paĝo atingas ajnan servilon en la reto, ne
nur vian propran. Multaj publikaj API-oj respondas per JSON, kaj Cro
analizas tion por vi, do .body redonas pretan
datumstrukturon prefere ol tekston. Ĉi tie ni petas de senpaga
veterservo la aktualan temperaturon en Berlino:
use Cro::HTTP::Client;
my $url = 'https://api.open-meteo.com/v1/forecast'
~ '?latitude=52.52&longitude=13.41¤t=temperature_2m,wind_speed_10m';
my $response = await Cro::HTTP::Client.get($url);
my %current = (await $response.body)<current>;
say "Berlin right now:";
say " temperature: %current<temperature_2m> °C";
say " wind speed: %current<wind_speed_10m> km/h";kio presas ion kiel:
Berlin right now:
temperature: 21.9 °C
wind speed: 8.4 km/hLa precizaj nombroj ŝanĝiĝas kun la vetero, kompreneble. La du
nombroj en la URL estas geografiaj koordinatoj —
52.52° N, 13.41° E estas Berlino — do metu tien la
latitudon kaj longitudon de via propra urbo por ricevi vian lokan
veteron. Ĉiuokaze, unu peto kaj .body (aŭ
.body-text) donas al vi la respondon — neniuj
kontaktskatoloj, neniu analizo de statuso, neniu mana traktado de
JSON.
Simpla teksto por la terminalo
JSON ne estas la sola formo, kiun respondo povas preni. La veterservo wttr.in povas servi ankaŭ JSON, sed ĝia specialaĵo estas simpla teksto desegnita por la terminalo — kaj ĝi decidas la formaton, rigardante kiu demandas: komandliniaj klientoj ricevas tekston, retumiloj ricevas retpaĝon. Cro ebligas al vi fiksi petajn kapojn, do prezentu vin kiel unu el la terminala popolo:
use Cro::HTTP::Client;
my $response = await Cro::HTTP::Client.get(
'https://wttr.in/Berlin?format=3',
headers => [ User-Agent => 'curl' ],
);
print await $response.body-text;Ĉi tio presas unulinian veterraporton, pretan por ŝela invito aŭ statusbreto:
Berlin: 🌤️ +25°CĈi tie la korpo estas simpla teksto, do ĝi estas legata per
.body-text. Forigu la ?format=3 el la URL, kaj
la servo respondas per sia plena, plurlinia vetera raporto en ASCII-arto
anstataŭe.
Ĉi tiuj ekzemploj bezonas Cro instalitan (
zef install cro) kaj funkciantan retan konekton.
Petoj kaj respondoj tamen ne estas la tuta historio. La fina temo malfermas WebSocket — vivan, duflankan kanalon, kie la reaktivaj iloj de ĉi tiu parto ricevas sian grandan finalon.
Kursa navigado
← Uzi klientan modulon | WebSocket →
💪 Aŭ iru rekte al la
ekzercoj de ĉi tiu sekcio.