NEWS
Kryptokurse von CoinMarketCap abfragen
-
Hallo Leute,
CoinMarketCap bietet eine kostenlose API an um die aktuellen Kryptokurse für alle Kryptowährungen abzufragen.
Leider fehlen mir die Programmierkenntnisse um mit der API Dokumentation ein Blocky oder Adapter zu basteln.Ist hier jemand der sich damit auskennt, zeit und Lust hat mir dabei zu helfen ?
https://coinmarketcap.com/api/pricing/
https://coinmarketcap.com/api/documentation/v1/
VG
-
Hallo Leute,
CoinMarketCap bietet eine kostenlose API an um die aktuellen Kryptokurse für alle Kryptowährungen abzufragen.
Leider fehlen mir die Programmierkenntnisse um mit der API Dokumentation ein Blocky oder Adapter zu basteln.Ist hier jemand der sich damit auskennt, zeit und Lust hat mir dabei zu helfen ?
https://coinmarketcap.com/api/pricing/
https://coinmarketcap.com/api/documentation/v1/
VG
@smartysmart Mit Blockly geht das aktuell leider nicht, weil man einen custom header setzen muss.
Aus dem Beispiel:
curl -H "X-CMC_PRO_API_KEY: b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c" -H "Accept: application/json" -d "start=1&limit=5000&convert=USD" -G https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latestwäre also in einer eigenen Funktion:
return httpGetAsync( 'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?start=1&limit=5000&convert=USD', { timeout: 1000, headers: { 'X-CMC_PRO_API_KEY': 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c', 'Accept': 'application/json' } } ); -
@smartysmart Mit Blockly geht das aktuell leider nicht, weil man einen custom header setzen muss.
Aus dem Beispiel:
curl -H "X-CMC_PRO_API_KEY: b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c" -H "Accept: application/json" -d "start=1&limit=5000&convert=USD" -G https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latestwäre also in einer eigenen Funktion:
return httpGetAsync( 'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?start=1&limit=5000&convert=USD', { timeout: 1000, headers: { 'X-CMC_PRO_API_KEY': 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c', 'Accept': 'application/json' } } );@haus-automatisierung Danke für den Denkanstoß
Mithilfe von Claude Ai konnte ich dann mein Vorhaben doch noch umsetzen.
Also alle die die sowas noch haben wollen, das wäre meine Lösung.on({ id: '0_userdata.0.Kryptokurse.kurse-abrufen' /* kurse-abrufen */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Kryptokurse.kurse-abrufen').val == true) { const axios = require('axios'); const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; const apiUrl = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest'; const params = { symbol: 'BTC', convert: 'USD' }; const headers = { 'X-CMC_PRO_API_KEY': apiKey }; axios.get(apiUrl, { params, headers }) .then(response => { let BTCKurs = response.data.data.BTC.quote.USD.price; // Runden auf 2 Nachkommastellen BTCKurs = Number(BTCKurs.toFixed(2)); console.log('BTC-Kurs (gerundet):', BTCKurs); // Setzen des gerundeten Wertes in ioBroker setState('0_userdata.0.Kryptokurse.BTC', BTCKurs, true, (err) => { if (err) { console.error('Fehler beim Setzen des BTC-Kurses in ioBroker:', err); } else { console.log('Gerundeter BTC-Kurs erfolgreich in ioBroker gesetzt'); } }); }) .catch(error => { console.error('Fehler beim Abrufen des BTC-Kurses:', error); }); } }); -
@haus-automatisierung Danke für den Denkanstoß
Mithilfe von Claude Ai konnte ich dann mein Vorhaben doch noch umsetzen.
Also alle die die sowas noch haben wollen, das wäre meine Lösung.on({ id: '0_userdata.0.Kryptokurse.kurse-abrufen' /* kurse-abrufen */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Kryptokurse.kurse-abrufen').val == true) { const axios = require('axios'); const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; const apiUrl = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest'; const params = { symbol: 'BTC', convert: 'USD' }; const headers = { 'X-CMC_PRO_API_KEY': apiKey }; axios.get(apiUrl, { params, headers }) .then(response => { let BTCKurs = response.data.data.BTC.quote.USD.price; // Runden auf 2 Nachkommastellen BTCKurs = Number(BTCKurs.toFixed(2)); console.log('BTC-Kurs (gerundet):', BTCKurs); // Setzen des gerundeten Wertes in ioBroker setState('0_userdata.0.Kryptokurse.BTC', BTCKurs, true, (err) => { if (err) { console.error('Fehler beim Setzen des BTC-Kurses in ioBroker:', err); } else { console.log('Gerundeter BTC-Kurs erfolgreich in ioBroker gesetzt'); } }); }) .catch(error => { console.error('Fehler beim Abrufen des BTC-Kurses:', error); }); } });@smartysmart Ist schon erstaunlich, wie umständlich der AI-Generierte Code immer ist... Wozu mache ich mir hier eigentlich die Arbeit und schlag eine Lösung vor?!
-
@haus-automatisierung Danke für den Denkanstoß
Mithilfe von Claude Ai konnte ich dann mein Vorhaben doch noch umsetzen.
Also alle die die sowas noch haben wollen, das wäre meine Lösung.on({ id: '0_userdata.0.Kryptokurse.kurse-abrufen' /* kurse-abrufen */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Kryptokurse.kurse-abrufen').val == true) { const axios = require('axios'); const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; const apiUrl = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest'; const params = { symbol: 'BTC', convert: 'USD' }; const headers = { 'X-CMC_PRO_API_KEY': apiKey }; axios.get(apiUrl, { params, headers }) .then(response => { let BTCKurs = response.data.data.BTC.quote.USD.price; // Runden auf 2 Nachkommastellen BTCKurs = Number(BTCKurs.toFixed(2)); console.log('BTC-Kurs (gerundet):', BTCKurs); // Setzen des gerundeten Wertes in ioBroker setState('0_userdata.0.Kryptokurse.BTC', BTCKurs, true, (err) => { if (err) { console.error('Fehler beim Setzen des BTC-Kurses in ioBroker:', err); } else { console.log('Gerundeter BTC-Kurs erfolgreich in ioBroker gesetzt'); } }); }) .catch(error => { console.error('Fehler beim Abrufen des BTC-Kurses:', error); }); } });@smartysmart Bitte mal so testen - ist viel sauberer:
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; on({ id: '0_userdata.0.Kryptokurse.kurse-abrufen', val: true }, async (obj) => { httpGet( 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC&convert=USD', { timeout: 1000, headers: { 'X-CMC_PRO_API_KEY': apiKey, 'Accept': 'application/json' } }, (err, response) => { if (!err) { const usdPrice = JSON.parse(response.data).data.BTC.quote.USD.price; setState('0_userdata.0.Kryptokurse.BTC', Number(usdPrice.toFixed(2)), true); } else { console.error(err); } } ); }); -
@smartysmart Bitte mal so testen - ist viel sauberer:
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; on({ id: '0_userdata.0.Kryptokurse.kurse-abrufen', val: true }, async (obj) => { httpGet( 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC&convert=USD', { timeout: 1000, headers: { 'X-CMC_PRO_API_KEY': apiKey, 'Accept': 'application/json' } }, (err, response) => { if (!err) { const usdPrice = JSON.parse(response.data).data.BTC.quote.USD.price; setState('0_userdata.0.Kryptokurse.BTC', Number(usdPrice.toFixed(2)), true); } else { console.error(err); } } ); });Hallo @haus-automatisierung
ich habe deinen Code ausprobiert. Ich habe ihn in ein JS Script kopiert und die Datenpunkte unter 0_userdata.0 angelegt.


leider werden diese nicht befüllt. Hast du eine Idee, was ich falsch mache?
-
Hallo @haus-automatisierung
ich habe deinen Code ausprobiert. Ich habe ihn in ein JS Script kopiert und die Datenpunkte unter 0_userdata.0 angelegt.


leider werden diese nicht befüllt. Hast du eine Idee, was ich falsch mache?
javascript.0 2024-08-19 17:57:49.999 error script.js.BTC.BTC_Kurse: timeout of 1000ms exceeded javascript.0 2024-08-19 17:57:49.998 error script.js.BTC.BTC_Kurse: httpGet(url=https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC&convert=USD, error=timeout of 1000ms exceeded) -
javascript.0 2024-08-19 17:57:49.999 error script.js.BTC.BTC_Kurse: timeout of 1000ms exceeded javascript.0 2024-08-19 17:57:49.998 error script.js.BTC.BTC_Kurse: httpGet(url=https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC&convert=USD, error=timeout of 1000ms exceeded)jetzt habe ich den Timeout erhöht und es funktioniert. Herzlichen Dank für deinen Code...
-
jetzt habe ich den Timeout erhöht und es funktioniert. Herzlichen Dank für deinen Code...
ist hier evtl nicht so wichtig, aber toFixed rundet nicht kaufmännisch
(1.104).toFixed(2) = 1.10 (1.105).toFixed(2) = 1.10 (1.106).toFixed(2) = 1.11besser ist
(Math.round(1.104*100)/100).toFixed(2) = 1.10 (Math.round(1.105*100)/100).toFixed(2) = 1.11 (Math.round(1.106*100)/100).toFixed(2) = 1.11toFixed ist nur als Formatierungsfunktion zu gebrauchen um 0 aufzufüllen damit man auf die Anzahl nachkommastellen kommt
Als allgemeine Funktion kann man sowas nehmen, diese Funktion bildet auch andere Zahlsysteme ab, aber alles was anders wie 10 ist, muss man noch weitere Schritte vornehmen.
also einfach nurconsole.log(toFixedNumber(1.105,2)); function toFixedNumber(num, digits, base){ const pow = Math.pow(base ?? 10, digits); return Math.round(num*pow) / pow; }```
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden