Kurz euro, kde získat?

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Compaq
Příspěvky: 21
Registrován: 16 črc 2019, 10:40
Reputation: 0

Kurz euro, kde získat?

Příspěvek od Compaq » 16 črc 2019, 22:11

Potřebuju dostat do proměnné aktuální kurz eura.

Nic lepšího mě nenapadlo, než stáhnout si kurzovní lístek odsud:
http://www.cnb.cz/cs/financni_trhy/devi ... i_kurz.txt

Tam najít na osmém řádku po čtvrté | a před koncem řádku číslo
Nebo po znacích EUR|

Napadá vás nějaké lepší řešení? Díky.

Vypadá takhle:
16.07.2019 #135
země|měna|množství|kód|kurz
Austrálie|dolar|1|AUD|16,031
Brazílie|real|1|BRL|6,068
Bulharsko|lev|1|BGN|13,075
Čína|žen-min-pi|1|CNY|3,315
Dánsko|koruna|1|DKK|3,425
EMU|euro|1|EUR|25,575
Filipíny|peso|100|PHP|44,795
Hongkong|dolar|1|HKD|2,916
Chorvatsko|kuna|1|HRK|3,461
Indie|rupie|100|INR|33,189
Indonesie|rupie|1000|IDR|1,636
Island|koruna|100|ISK|18,049
Izrael|nový šekel|1|ILS|6,428
Japonsko|jen|100|JPY|21,118
Jižní Afrika|rand|1|ZAR|1,643
Kanada|dolar|1|CAD|17,468
Korejská republika|won|100|KRW|1,934
Maďarsko|forint|100|HUF|7,849
Malajsie|ringgit|1|MYR|5,544
Mexiko|peso|1|MXN|1,199
MMF|ZPČ|1|XDR|31,567
Norsko|koruna|1|NOK|2,666
Nový Zéland|dolar|1|NZD|15,324
Polsko|zlotý|1|PLN|6,010
Rumunsko|leu|1|RON|5,404
Rusko|rubl|100|RUB|36,340
Singapur|dolar|1|SGD|16,793
Švédsko|koruna|1|SEK|2,426
Švýcarsko|frank|1|CHF|23,094
Thajsko|baht|100|THB|73,810
Turecko|lira|1|TRY|3,996
USA|dolar|1|USD|22,796
Velká Británie|libra|1|GBP|28,339

8BB76E1
Příspěvky: 42
Registrován: 11 lis 2018, 12:01
Reputation: 0
Bydliště: 大阪府

Re: Kurz euro, kde získat?

Příspěvek od 8BB76E1 » 17 črc 2019, 00:24

psal jsem si to pro JPY na svůj web, tak to sem hodím, a jen si to uprav..

čtení kurzu, ukládání hodnoty do souboru, odesílání hodnoty na mail:
(ukládání do souboru proto, aby nešel dotaz na web čnb pokaždé, když mi někdo vleze na web. tenhle soubor automaticky spouštím každý den ve 4:00 ráno)

Kód: Vybrat vše

<?php

$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt");
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$rateFile = curl_exec($c);
curl_close($c);

$rateLines = explode("\n", $rateFile);

$yenLine = array_filter($rateLines, function($line)
	{
	return stripos($line, 'JPY') !== false;
	});

$pieces = (explode("|", reset($yenLine)));
$dust = (explode(",",$pieces[4]));
$kurz_output = (implode(".", $dust)/100);

$fname = "file.txt";
$fhandle = fopen($fname,"r");
$content = fread($fhandle,filesize($fname));
$content = str_replace(" "," ", $kurz_output);

$fhandle = fopen($fname,"w");
fwrite($fhandle,$kurz_output);
fclose($fhandle);

$to = "mail@gmail.com";
$subject = "Kurz yenu";
$msg = $kurz_output;
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

mail($to,$subject,$msg,$headers);   

?>
čtení kurzu ze souboru:
(tu if podmínku tam mám pro případ, že by se z nějakého důvodu neuložila hodnota do souboru. v tom případě web použije přednastavenou hodnotu)

Kód: Vybrat vše

<?

$kurz_input = file_get_contents('file.txt', FILE_USE_INCLUDE_PATH);

if($kurz_input>"0.15" and $kurz_input<"0.25")
	{$kurz=$kurz_input;}
		else
		{$kurz="0.2";}

?>

Compaq
Příspěvky: 21
Registrován: 16 črc 2019, 10:40
Reputation: 0

Re: Kurz euro, kde získat?

Příspěvek od Compaq » 17 črc 2019, 10:22

Díky moc.

Potřebuji pomoc.

Našel jsem pěkný API
https://free.currconv.com/api/v7/conver ... Key=XXXXXX

vrací to (po zadání správného apiKex) toto:
{"USD_CZK":22.840988}
Jsem začátečník a potřebuji hodnotu kurzu (22.84....) dosadit do kódu místo čísla 22:

Kód: Vybrat vše

float cryptoPrice = root["price"].as<float>();
    cryptoPrice = (isCoinbaseCoin) ? cryptoPrice : convertToUSD(cryptoPrice);
    Serial.println(cryptoPrice);
    Serial.println("==========");
    String output = cryptoName + " " + String(int (cryptoPrice * 22));  //přepočet z USD na koruny
    Serial.println(output);

martinius96
Příspěvky: 406
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Kurz euro, kde získat?

Příspěvek od martinius96 » 17 črc 2019, 14:27

Použiješ buď C funkciu strok() https://www.tutorialspoint.com/c_standa ... ion_strtok, alebo knižnicu ArduinoJSON pre rozparsovanie daného stringu. https://github.com/bblanchon/ArduinoJson
Následne si do premennej uložíš hodnotu (bude to String, alebo array char, podľa toho ako to použiješ), následne túto premennú pretypuješ na float a máš svoju hodnotu, ktorú si vo vzorci použiješ.

Compaq
Příspěvky: 21
Registrován: 16 črc 2019, 10:40
Reputation: 0

Re: Kurz euro, kde získat?

Příspěvek od Compaq » 29 črc 2019, 14:49

Našel jsem tohle:
https://free.currconv.com/api/v7/conver ... XXXXXXXXXX

Vrátí to tohle:

Kód: Vybrat vše

{"EUR_CZK":25.610283}
Ale nevím, jak to nacpat do proměnné.

:-(

Díky za rady a tipy.

martinius96
Příspěvky: 406
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Kurz euro, kde získat?

Příspěvek od martinius96 » 29 črc 2019, 15:59

Najjednoduchšie pre teba by bolo asi... Pripojiť sa, prečítať ten riadok.
Použiješ strok s cieľovým znakom :
Získaš potom 2 prvky:
{"EUR_CZK"
a
25.610283}
Použiješ strlen, aby si získal dĺžku reťazca 25.610283} --> t.j. 9 a cez substring si reťazec vypíšeš o jeden znak kratší. A máš kurz ako text, prípadne si ho prevedieš na float a použiješ tak, ako potrebuješ.

Compaq
Příspěvky: 21
Registrován: 16 črc 2019, 10:40
Reputation: 0

Re: Kurz euro, kde získat?

Příspěvek od Compaq » 30 črc 2019, 09:09

Díky.

Používám WiFiClientSecure.h
Nevím jakou funkcí stáhnout ten řádek. Nějak ořezat si ho, to bych si asi někde našel...

martinius96
Příspěvky: 406
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Kurz euro, kde získat?

Příspěvek od martinius96 » 30 črc 2019, 14:50

Tak som to vyskúšal a upravil pre ESP32 a knižnicu WiFiClientSecure.h.
Nepreštudoval som si podmienky pre tie kurzy a početnosť ich vyžiadaní na hodinu. Odpálil som si hodinový limit behom pár sekúnd, používal som rýchle pripojenie v loop-e :-)
Musel som si teda vyžiadať nový API kľúč :D Upravil som to teda iba pre setup funkciu, aby sa vykonalo iba raz.
Root CA certifikát, ktorý je použitý v programe je Baltimore CyberTrust Root. Možno použiť i chain CA certifikát CloudFlare Inc ECC CA-2, ktorý je pre doménu free.currconv.com. Oba certifikáty budú fungovať. Odtestované pod verziou 1.0.1. Arduino Core pre ESP32.

Kód: Vybrat vše

#include <WiFi.h>
#include <WiFiClientSecure.h>
const char * ssid = "WIFI_MENO";
const char * password = "WIFI_HESLO";
const char* host = "free.currconv.com";
const int httpsPort = 443; //http port
WiFiClientSecure client;
const char* test_root_ca = \
                           "-----BEGIN CERTIFICATE-----\n" \
                           "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n" \
                           "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n" \
                           "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n" \
                           "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n" \
                           "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n" \
                           "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n" \
                           "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n" \
                           "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n" \
                           "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n" \
                           "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n" \
                           "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n" \
                           "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n" \
                           "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n" \
                           "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n" \
                           "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n" \
                           "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n" \
                           "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n" \
                           "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n" \
                           "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \
                           "-----END CERTIFICATE-----\n";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  client.setCACert(test_root_ca);
  Serial.println("WiFi uspesne pripojene");
  Serial.println("IP adresa: ");
  Serial.println(WiFi.localIP());
  Serial.println("Ready");
  client.stop();
  if (client.connect(host, httpsPort)) {
    String url = "/api/v7/convert?q=EUR_CZK&compact=ultra&apiKey=XXXXXXXXX";
    client.print(String("GET ") + url + " HTTP/1.0\r\n" + "Host: " + host + "\r\n" + "User-Agent: ESP32\r\n" + "Connection: close\r\n\r\n");
    while (client.connected()) {
      String line = client.readStringUntil('\n');
      if (line == "\r") {
        break;
      }
    }
    String line = client.readStringUntil('\n');
    String abc = line.substring(11, 20);
    Serial.println("Kurz (orezany text): ");
    Serial.println(abc);
    float kurz = abc.toFloat();
    Serial.println("Kurz (float): ");
    Serial.println(kurz);
  }
}

void loop() {

}
Funguje, výstup serial monitoru:
Obrázek

Compaq
Příspěvky: 21
Registrován: 16 črc 2019, 10:40
Reputation: 0

Re: Kurz euro, kde získat?

Příspěvek od Compaq » 30 črc 2019, 16:58

Díky, moc, jsi kouzelník, zítra to zkusím, nejsem u toho. Přesně toto jsem potřeboval.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů