From f475b4ff7392fc27189f5fd565a3453f578f852b Mon Sep 17 00:00:00 2001 From: Kumi Date: Thu, 8 Aug 2024 08:58:55 +0200 Subject: [PATCH] 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. --- coingecko.php | 150 ++++++++++++++++++-------------------------------- 1 file changed, 53 insertions(+), 97 deletions(-) diff --git a/coingecko.php b/coingecko.php index 0277a2e..ba7f934 100644 --- a/coingecko.php +++ b/coingecko.php @@ -1,110 +1,66 @@ coingecko.com"; - -// 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']."
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); - - // 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)); - - // echo "
Sync.
"; - -}//else{ - //echo "Keine Daten, noch zu früh!

"; - //echo "Gespeicherte Zeit: ".$xmrdatas['time']."
Aktuelle Zeit: ".$zeit."

Differenz: ".$zeit - $xmrdatas['time']."

"; -//} -?> + // Decode the fetched data + $fetchedData = json_decode($json, true); + $moneroData = $fetchedData['monero']; + + // Initialize new data array + $newData = ['time' => $currentTime]; + + // 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 + ]; + } + } + + // 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."; +}