====== 13. Qt - databáze ====== Cvičení je zaměřeno na vytvoření jednoduché databazáze, do které se ukládá aktuální cena některé z kryptoměn, např. doge. Pro získání ceny kryptoměny existuje několik webových API, zde použijeme API [[https://www.cryptonator.com/api|cryptonator.com]]. Základ programu je podobný jako ve cvičení, kde jsme získávali informace o covidové situaci nebo o aktuálním počasí. Zde je kód umístěn do třídy, kterou budeme dále rozšiřovat. /* main.cpp */ #include #include "crypto.h" int main(int argc, char ** argv) { QApplication a (argc, argv); CryptoWidget w; w.show(); return a.exec(); } /* crypto.h */ #include #include #include #include #include #include #include #include #include class CryptoWidget : public QWidget { Q_OBJECT public: CryptoWidget (QWidget * parent = 0) : QWidget(parent) { fetch(); } public slots: void fetch () { QEventLoop loop; QNetworkAccessManager mgr; QObject::connect (&mgr, QNetworkAccessManager::finished, &loop, QEventLoop::quit); QNetworkRequest req (QUrl ("https://api.cryptonator.com/api/ticker/doge-usd")); QNetworkReply *rep = mgr.get(req); loop.exec(); if (rep->error() == QNetworkReply::NoError) { QString rep_str = (QString)rep->readAll(); QJsonDocument res_json = QJsonDocument::fromJson(rep_str.toUtf8()); QJsonObject data = res_json.object(); // timestamp unsigned long time = data["timestamp"].toDouble(); qDebug() << time; QJsonObject ticker = data["ticker"].toObject(); // price double price = QString(ticker["price"].toString()).toDouble(); qDebug() << price; QString base = ticker["base"].toString(); qDebug() << base; } } }; # crypto.pro TEMPLATE = app TARGET = 01-crypto QT += widgets network CONFIG += console HEADERS += crypto.h SOURCES += main.cpp Kompletní kód příkladu založeného na výše uvedeném kódu je k dispozici na [[https://gitlab.fel.cvut.cz/viteks/ppc/-/tree/master/tutorials/tut13/01-crypto|gitlabu]]. ===== Vylepšení ===== Celkem jednoduše lze vylepšit program tak, aby sledoval dvě kryptoměny zároveň. Kód je opět na [[https://gitlab.fel.cvut.cz/viteks/ppc/-/tree/master/tutorials/tut13/02-crypto|gitlabu]]. {{:courses:b2b99ppc:tutorials:bez_nazvu.png?520|}}