Updated to new CoinMarketCap API

This commit is contained in:
bernhard.trinnes 2020-04-12 00:43:04 +07:00
parent b4ef247875
commit 94e354f1d5
2 changed files with 30 additions and 36 deletions

View File

@ -91,8 +91,9 @@ void IntegrationPluginCoinMarketCap::setupThing(ThingSetupInfo *info)
pluginStorage()->beginGroup(info->thing()->id().toString()); pluginStorage()->beginGroup(info->thing()->id().toString());
QByteArray apiKey = pluginStorage()->value("apiKey").toByteArray(); QByteArray apiKey = pluginStorage()->value("apiKey").toByteArray();
pluginStorage()->endGroup(); pluginStorage()->endGroup();
getPriceCall(thing);
m_apiKeys.insert(thing->id(), apiKey); m_apiKeys.insert(thing->id(), apiKey);
getPriceCall(thing);
info->finish(Thing::ThingErrorNoError); info->finish(Thing::ThingErrorNoError);
return; return;
} }
@ -112,7 +113,7 @@ void IntegrationPluginCoinMarketCap::thingRemoved(Thing *thing)
} }
} }
if (myThings().empty()) { if (myThings().empty() && m_pluginTimer) {
hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer); hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer);
m_pluginTimer = nullptr; m_pluginTimer = nullptr;
} }
@ -123,7 +124,7 @@ void IntegrationPluginCoinMarketCap::postSetupThing(Thing *thing)
Q_UNUSED(thing) Q_UNUSED(thing)
if(!m_pluginTimer) { if(!m_pluginTimer) {
m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(120);
connect(m_pluginTimer, &PluginTimer::timeout, this, &IntegrationPluginCoinMarketCap::onPluginTimer); connect(m_pluginTimer, &PluginTimer::timeout, this, &IntegrationPluginCoinMarketCap::onPluginTimer);
} }
} }
@ -165,58 +166,50 @@ void IntegrationPluginCoinMarketCap::onPriceCallFinished()
return; return;
} }
QVariantList list = jsonResponse.toVariant().toList(); QVariantList list = jsonResponse.toVariant().toMap().value("data").toList();
foreach (QVariant element, list) { foreach (QVariant element, list) {
QVariantMap elementMap = element.toMap(); QVariantMap elementMap = element.toMap();
thing->setStateValue(currentPricesConnectedStateTypeId, true); thing->setStateValue(currentPricesConnectedStateTypeId, true);
double price; double price;
QString fiatCurrency = thing->paramValue(currentPricesThingFiatParamTypeId).toString().toUpper();
if (elementMap.value("id").toString() == "bitcoin") { qCDebug(dcCoinMarketCap()) << "Name" << elementMap.value("name").toString();
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); price = elementMap.value("quote").toMap().value(fiatCurrency).toMap().value("price").toDouble();
qDebug(dcCoinMarketCap()) << "Bitcoin Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price; if (elementMap.value("name").toString() == "Bitcoin") {
qDebug(dcCoinMarketCap()) << "Bitcoin Price in" << fiatCurrency << price;
thing->setStateValue(currentPricesBtcStateTypeId, price); thing->setStateValue(currentPricesBtcStateTypeId, price);
} else if (elementMap.value("id").toString() == "ethereum") { } else if (elementMap.value("name").toString() == "Ethereum") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); qDebug(dcCoinMarketCap()) << "Etherium Price in" << fiatCurrency << price;
qDebug(dcCoinMarketCap()) << "Etherium Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price;
thing->setStateValue(currentPricesEthStateTypeId, price); thing->setStateValue(currentPricesEthStateTypeId, price);
} else if (elementMap.value("id").toString() == "ripple") { } else if (elementMap.value("name").toString() == "XRP") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); qDebug(dcCoinMarketCap()) << "XRP Price in" << fiatCurrency << price;
qDebug(dcCoinMarketCap()) << "Ripple Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price;
thing->setStateValue(currentPricesXrpStateTypeId, price); thing->setStateValue(currentPricesXrpStateTypeId, price);
} else if (elementMap.value("id").toString() == "bitcoin-cash") { } else if (elementMap.value("name").toString() == "Bitcoin Cash") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); qDebug(dcCoinMarketCap()) << "Bitcoin-cash Price in" << fiatCurrency << price;
qDebug(dcCoinMarketCap()) << "Bitcoin-cash Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price;
thing->setStateValue(currentPricesBchStateTypeId, price); thing->setStateValue(currentPricesBchStateTypeId, price);
} else if (elementMap.value("id").toString() == "litecoin") { } else if (elementMap.value("name").toString() == "Litecoin") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); qDebug(dcCoinMarketCap()) << "Litecoin Price in" << fiatCurrency << price;
qDebug(dcCoinMarketCap()) << "Litecoin Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price;
thing->setStateValue(currentPricesLtcStateTypeId, price); thing->setStateValue(currentPricesLtcStateTypeId, price);
} else if (elementMap.value("id").toString() == "nem") { } else if (elementMap.value("name").toString() == "NEM") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); qDebug(dcCoinMarketCap()) << "Nem Price in" << fiatCurrency << price;
qDebug(dcCoinMarketCap()) << "Nem Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price;
thing->setStateValue(currentPricesXemStateTypeId, price); thing->setStateValue(currentPricesXemStateTypeId, price);
} else if (elementMap.value("id").toString() == "ethereum-classic") { } else if (elementMap.value("name").toString() == "Ethereum Classic") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble(); qDebug(dcCoinMarketCap()) << "Ethereum Classic Price in" << fiatCurrency << price;
qDebug(dcCoinMarketCap()) << "Ethereum Classic Price in" << QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower() << price;
thing->setStateValue(currentPricesEtcStateTypeId, price); thing->setStateValue(currentPricesEtcStateTypeId, price);
} else if (elementMap.value("id").toString() == "dash") { } else if (elementMap.value("name").toString() == "Dash") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble();
thing->setStateValue(currentPricesDashStateTypeId, price); thing->setStateValue(currentPricesDashStateTypeId, price);
} else if (elementMap.value("id").toString() == "iota") { } else if (elementMap.value("name").toString() == "IOTA") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble();
thing->setStateValue(currentPricesMiotaStateTypeId, price); thing->setStateValue(currentPricesMiotaStateTypeId, price);
} else if (elementMap.value("id").toString() == "neo") { } else if (elementMap.value("name").toString() == "Neo") {
price = elementMap.value(QString("price_%1").arg(QString(thing->paramValue(currentPricesThingFiatParamTypeId).toString()).toLower())).toDouble();
thing->setStateValue(currentPricesAnsStateTypeId, price); thing->setStateValue(currentPricesAnsStateTypeId, price);
} }
} }
@ -225,13 +218,14 @@ void IntegrationPluginCoinMarketCap::onPriceCallFinished()
void IntegrationPluginCoinMarketCap::getPriceCall(Thing *thing) void IntegrationPluginCoinMarketCap::getPriceCall(Thing *thing)
{ {
QUrl url; 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; QNetworkRequest request;
request.setUrl(url); request.setUrl(url);
request.setRawHeader("X-CMC_PRO_API_KEY", m_apiKeys.value(thing->id())); request.setRawHeader("X-CMC_PRO_API_KEY", m_apiKeys.value(thing->id()));
request.setRawHeader("Accept", "application/json"); request.setRawHeader("Accept", "application/json");
request.setRawHeader("User-Agent", "nymea 1.0"); 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); QNetworkReply *reply = hardwareManager()->networkManager()->get(request);
connect(reply, &QNetworkReply::finished, this, &IntegrationPluginCoinMarketCap::onPriceCallFinished); connect(reply, &QNetworkReply::finished, this, &IntegrationPluginCoinMarketCap::onPriceCallFinished);

View File

@ -69,10 +69,10 @@
{ {
"id": "d8517cf8-2ebd-4be3-8573-00b595cc2ab5", "id": "d8517cf8-2ebd-4be3-8573-00b595cc2ab5",
"name": "xrp", "name": "xrp",
"displayName": "Ripple", "displayName": "XRP",
"type": "double", "type": "double",
"defaultValue": 0.00, "defaultValue": 0.00,
"displayNameEvent": "ripple value changed" "displayNameEvent": "XRP value changed"
}, },
{ {
"id": "cc5b4fe5-aa43-43b3-952f-90c0e3e20740", "id": "cc5b4fe5-aa43-43b3-952f-90c0e3e20740",