From 94e354f1d595a7f2b2f78c2fdf7f1e35968987ed Mon Sep 17 00:00:00 2001 From: "bernhard.trinnes" Date: Sun, 12 Apr 2020 00:43:04 +0700 Subject: [PATCH] Updated to new CoinMarketCap API --- .../integrationplugincoinmarketcap.cpp | 62 +++++++++---------- .../integrationplugincoinmarketcap.json | 4 +- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/coinmarketcap/integrationplugincoinmarketcap.cpp b/coinmarketcap/integrationplugincoinmarketcap.cpp index 6aa94ad9..e434e58c 100644 --- a/coinmarketcap/integrationplugincoinmarketcap.cpp +++ b/coinmarketcap/integrationplugincoinmarketcap.cpp @@ -91,8 +91,9 @@ void IntegrationPluginCoinMarketCap::setupThing(ThingSetupInfo *info) pluginStorage()->beginGroup(info->thing()->id().toString()); QByteArray apiKey = pluginStorage()->value("apiKey").toByteArray(); pluginStorage()->endGroup(); - getPriceCall(thing); + m_apiKeys.insert(thing->id(), apiKey); + getPriceCall(thing); info->finish(Thing::ThingErrorNoError); return; } @@ -112,7 +113,7 @@ void IntegrationPluginCoinMarketCap::thingRemoved(Thing *thing) } } - if (myThings().empty()) { + if (myThings().empty() && m_pluginTimer) { hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer); m_pluginTimer = nullptr; } @@ -123,7 +124,7 @@ void IntegrationPluginCoinMarketCap::postSetupThing(Thing *thing) Q_UNUSED(thing) if(!m_pluginTimer) { - m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); + m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(120); connect(m_pluginTimer, &PluginTimer::timeout, this, &IntegrationPluginCoinMarketCap::onPluginTimer); } } @@ -165,58 +166,50 @@ void IntegrationPluginCoinMarketCap::onPriceCallFinished() return; } - QVariantList list = jsonResponse.toVariant().toList(); + QVariantList list = jsonResponse.toVariant().toMap().value("data").toList(); foreach (QVariant element, list) { QVariantMap elementMap = element.toMap(); thing->setStateValue(currentPricesConnectedStateTypeId, true); double price; - - if (elementMap.value("id").toString() == "bitcoin") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); - qDebug(dcCoinMarketCap()) << "Bitcoin Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price; + QString fiatCurrency = thing->paramValue(currentPricesThingFiatParamTypeId).toString().toUpper(); + qCDebug(dcCoinMarketCap()) << "Name" << elementMap.value("name").toString(); + price = elementMap.value("quote").toMap().value(fiatCurrency).toMap().value("price").toDouble(); + if (elementMap.value("name").toString() == "Bitcoin") { + qDebug(dcCoinMarketCap()) << "Bitcoin Price in" << fiatCurrency << price; thing->setStateValue(currentPricesBtcStateTypeId, price); - } else if (elementMap.value("id").toString() == "ethereum") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); - qDebug(dcCoinMarketCap()) << "Etherium Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price; + } else if (elementMap.value("name").toString() == "Ethereum") { + qDebug(dcCoinMarketCap()) << "Etherium Price in" << fiatCurrency << price; thing->setStateValue(currentPricesEthStateTypeId, price); - } else if (elementMap.value("id").toString() == "ripple") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); - qDebug(dcCoinMarketCap()) << "Ripple Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price; + } else if (elementMap.value("name").toString() == "XRP") { + qDebug(dcCoinMarketCap()) << "XRP Price in" << fiatCurrency << price; thing->setStateValue(currentPricesXrpStateTypeId, price); - } else if (elementMap.value("id").toString() == "bitcoin-cash") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); - qDebug(dcCoinMarketCap()) << "Bitcoin-cash Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price; + } else if (elementMap.value("name").toString() == "Bitcoin Cash") { + qDebug(dcCoinMarketCap()) << "Bitcoin-cash Price in" << fiatCurrency << price; thing->setStateValue(currentPricesBchStateTypeId, price); - } else if (elementMap.value("id").toString() == "litecoin") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); - qDebug(dcCoinMarketCap()) << "Litecoin Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price; + } else if (elementMap.value("name").toString() == "Litecoin") { + qDebug(dcCoinMarketCap()) << "Litecoin Price in" << fiatCurrency << price; thing->setStateValue(currentPricesLtcStateTypeId, price); - } else if (elementMap.value("id").toString() == "nem") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); - qDebug(dcCoinMarketCap()) << "Nem Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price; + } else if (elementMap.value("name").toString() == "NEM") { + qDebug(dcCoinMarketCap()) << "Nem Price in" << fiatCurrency << price; thing->setStateValue(currentPricesXemStateTypeId, price); - } else if (elementMap.value("id").toString() == "ethereum-classic") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); - qDebug(dcCoinMarketCap()) << "Ethereum Classic Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price; + } else if (elementMap.value("name").toString() == "Ethereum Classic") { + qDebug(dcCoinMarketCap()) << "Ethereum Classic Price in" << fiatCurrency << price; thing->setStateValue(currentPricesEtcStateTypeId, price); - } else if (elementMap.value("id").toString() == "dash") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); + } else if (elementMap.value("name").toString() == "Dash") { thing->setStateValue(currentPricesDashStateTypeId, price); - } else if (elementMap.value("id").toString() == "iota") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); + } else if (elementMap.value("name").toString() == "IOTA") { thing->setStateValue(currentPricesMiotaStateTypeId, price); - } else if (elementMap.value("id").toString() == "neo") { - price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); + } else if (elementMap.value("name").toString() == "Neo") { thing->setStateValue(currentPricesAnsStateTypeId, price); } } @@ -225,13 +218,14 @@ void IntegrationPluginCoinMarketCap::onPriceCallFinished() void IntegrationPluginCoinMarketCap::getPriceCall(Thing *thing) { QUrl url; - url.setUrl(QString("https://pro-api.coinmarketcap.com/v1/ticker/?convert=%1&limit=30").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())); + QString fiatCurrency = thing->paramValue(currentPricesThingFiatParamTypeId).toString().toUpper(); + url.setUrl(QString("https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?convert=%1&start=1&limit=30").arg(fiatCurrency)); QNetworkRequest request; request.setUrl(url); request.setRawHeader("X-CMC_PRO_API_KEY", m_apiKeys.value(thing->id())); request.setRawHeader("Accept", "application/json"); request.setRawHeader("User-Agent", "nymea 1.0"); - + qCDebug(dcCoinMarketCap()) << "Sending request" << url << "API key" << m_apiKeys.value(thing->id()); QNetworkReply *reply = hardwareManager()->networkManager()->get(request); connect(reply, &QNetworkReply::finished, this, &IntegrationPluginCoinMarketCap::onPriceCallFinished); diff --git a/coinmarketcap/integrationplugincoinmarketcap.json b/coinmarketcap/integrationplugincoinmarketcap.json index 45caaa60..91388990 100644 --- a/coinmarketcap/integrationplugincoinmarketcap.json +++ b/coinmarketcap/integrationplugincoinmarketcap.json @@ -69,10 +69,10 @@ { "id": "d8517cf8-2ebd-4be3-8573-00b595cc2ab5", "name": "xrp", - "displayName": "Ripple", + "displayName": "XRP", "type": "double", "defaultValue": 0.00, - "displayNameEvent": "ripple value changed" + "displayNameEvent": "XRP value changed" }, { "id": "cc5b4fe5-aa43-43b3-952f-90c0e3e20740",