refactor(coingecko.php): streamline currency data update process

Consolidated currency list initialization and improved data fetching from CoinGecko API. Enhanced error handling for CURL requests. Optimized the logic for updating and saving currency data, ensuring more efficient and readable code. Ensured data write-back occurs only when sufficient time has elapsed since the last update.
This commit is contained in:
Kumi 2024-08-08 08:58:55 +02:00
parent d89a2c9053
commit f475b4ff73
No known key found for this signature in database
GPG key ID: ECBCC9082395383F

View file

@ -1,110 +1,66 @@
<?php
$new_array = array();
$array = array("EUR",
"BTC",
"USD",
"GBP",
"CHF",
"RUB",
"CNY",
"JPY",
"IDR",
"KRW",
"TRY",
"AUD",
"BMD",
"CAD",
"HKD",
"NZD",
"SGD",
"TWD",
"ILS",
"PLN",
"ZAR",
"CZK",
"DKK",
"NOK",
"SEK",
"ARS",
"CLP",
"PHP",
"MXN",
"BHD",
"KWD",
"BRL",
"MYR",
"VEF",
"UAH",
"VND",
"BDT",
"HUF",
"MMK",
"NGN",
"THB",
"AED",
"SAR",
"PKR",
"LKR",
"INR",
"BTC",
"LTC",
"ETH",
"XAG",
"XAU");
//echo "<h1>coingecko.com</h1>";
// Die Standard-Zeitzone, die verwendet werden soll, setzen.
// Set default timezone
date_default_timezone_set('Europe/Berlin');
// Holt den letzten Wert für die if Abfrage
$xmrdatas = json_decode(file_get_contents("coingecko.json"), true);
// Define the array of currencies
$currencies = [
"EUR", "BTC", "USD", "GBP", "CHF", "RUB", "CNY", "JPY", "IDR", "KRW", "TRY", "AUD",
"BMD", "CAD", "HKD", "NZD", "SGD", "TWD", "ILS", "PLN", "ZAR", "CZK", "DKK", "NOK",
"SEK", "ARS", "CLP", "PHP", "MXN", "BHD", "KWD", "BRL", "MYR", "VEF", "UAH", "VND",
"BDT", "HUF", "MMK", "NGN", "THB", "AED", "SAR", "PKR", "LKR", "INR", "LTC", "ETH",
"XAG", "XAU"
];
// Liefert den aktuellen Unix-Zeitstempel
$zeit = time();
// Fetch the previously stored data
$previousData = json_decode(file_get_contents("coingecko.json"), true);
$currentTime = time();
// Sind ~30 Minuten vergangen?
if(($zeit - $xmrdatas['time']) >= 5){
//echo "Gespeicherte Zeit: ".$xmrdatas['time']."<br/>Aktuelle Zeit: ".$zeit;
// Check if five seconds have passed since the last update
if (($currentTime - $previousData['time']) >= 5) {
// Fetch the latest data from CoinGecko API
$apiUrl = 'https://api.coingecko.com/api/v3/simple/price?ids=monero&vs_currencies=' . implode('%2C', array_map('strtolower', $currencies)) . '&include_market_cap=true&include_24hr_vol=true&include_24hr_change=true&include_last_updated_at=true';
// Initialize CURL
$ch = curl_init('https://api.coingecko.com/api/v3/simple/price?ids=monero&vs_currencies=btc%2Ceth%2Cltc%2Cbch%2Cbnb%2Ceos%2Cxrp%2Cxlm%2Clink%2Cdot%2Cyfi%2Cusd%2Caed%2Cars%2Caud%2Cbdt%2Cbhd%2Cbmd%2Cbrl%2Ccad%2Cchf%2Cclp%2Ccny%2Cczk%2Cdkk%2Ceur%2Cgbp%2Chkd%2Chuf%2Cidr%2Cils%2Cinr%2Cjpy%2Ckrw%2Ckwd%2Clkr%2Cmmk%2Cmxn%2Cmyr%2Cngn%2Cnok%2Cnzd%2Cphp%2Cpkr%2Cpln%2Crub%2Csar%2Csek%2Csgd%2Cthb%2Ctry%2Ctwd%2Cuah%2Cvef%2Cvnd%2Czar%2Cxdr%2Cxag%2Cxau%2Cbits%2Csats&include_market_cap=true&include_24hr_vol=true&include_24hr_change=true&include_last_updated_at=true');
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Store the data:
$json = curl_exec($ch);
curl_close($ch);
// Sortiert/Formatiert die Ausgabe
$sort_array = json_decode($json, true);
$new_sort_array = $sort_array['monero'];
// Zeit wird ergänzt
$new_array['time'] = $zeit;
$new_sort_array['time'] = $zeit;
foreach ($array as $fiatValue) {
$fiatValue = strtolower($fiatValue);
if (array_key_exists($fiatValue, $sort_array['monero'])) {
$new_array[$fiatValue]['lastValue'] = $sort_array['monero'][$fiatValue];
$new_array[$fiatValue]['lastDate'] = $zeit;
}else{
$new_array[$fiatValue]['lastValue'] = $xmrdatas[$fiatValue]['lastValue'];
$new_array[$fiatValue]['lastDate'] = $xmrdatas[$fiatValue]['lastDate'];
}
//print_r($new_array);
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
curl_close($ch);
exit;
}
curl_close($ch);
// Decode the fetched data
$fetchedData = json_decode($json, true);
$moneroData = $fetchedData['monero'];
// Werte in die .json gespeichert
file_put_contents("coingecko.json", json_encode($new_array));
file_put_contents("coingecko-original.json", json_encode($new_sort_array));
// Initialize new data array
$newData = ['time' => $currentTime];
// echo "<br/>Sync.<hr/>";
// Update the data for each currency
foreach ($currencies as $currency) {
$currencyLower = strtolower($currency);
if (isset($moneroData[$currencyLower])) {
$newData[$currencyLower] = [
'lastValue' => $moneroData[$currencyLower],
'lastDate' => $currentTime
];
} else {
$newData[$currencyLower] = [
'lastValue' => $previousData[$currencyLower]['lastValue'] ?? null,
'lastDate' => $previousData[$currencyLower]['lastDate'] ?? null
];
}
}
}//else{
//echo "Keine Daten, noch zu früh!<br/><br/>";
//echo "Gespeicherte Zeit: ".$xmrdatas['time']."<br/>Aktuelle Zeit: ".$zeit."<br/><br/>Differenz: ".$zeit - $xmrdatas['time']."<br/><hr/>";
//}
?>
// Save the new data to JSON files
file_put_contents("coingecko.json", json_encode($newData, JSON_PRETTY_PRINT));
file_put_contents("coingecko-original.json", json_encode($moneroData, JSON_PRETTY_PRINT));
echo "Data updated successfully.";
} else {
echo "No data update needed. Last update was less than five seconds ago.";
}