Скрипт PHP отримує дані з сайту bank.gov.ua і зберігає їх локально у файлі
nbu.json
. Оновлення здійснюється кожні три години, щоб уникнути навантаження на джерело інформації.
USD (Долар США) коштує 41.3426 грн згідно з курсом НБУ на 04.04.2025.
Робоий код приведений нижче, для того, щоби скопіювати його, наведіться мишкою і кланціть лівою кнопкою.
<!DOCTYPE html> <html lang="uk"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Курси НБУ</title> <link rel="stylesheet" href="assets/css/berry.css"> <link rel="stylesheet" href="assets/css/theme.css"> <style> .grid-table-2 { display: grid; grid-template-columns: auto auto; gap: 5px; } .grid-table-2 div { padding: 0; } .grid-table-2 div:nth-child(odd) { font-weight: bold; } </style> </head> <body class="dark-theme"> <div class="layout-center-wrap"> <div class="layout-wrap"> <div class="w800px-max b-center"> <h1>Курси валют і банківських металів</h1> <p class="secondary"> Скрипт PHP отримує дані з сайту <a href="https://bank.gov.ua">bank.gov.ua</a> і зберігає їх локально у файлі <code>nbu.json</code>. Оновлення здійснюється кожні три години, щоб уникнути навантаження на джерело інформації. </p> <ul id="toc-list"></ul> <?php $file_path = 'nbu.json'; if (!file_exists($file_path) || (time() - filemtime($file_path)) >= 10800) { $ch = curl_init('https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); if ($html !== false) { file_put_contents($file_path, $html); echo "Дані успішно збережені у файл nbu.json."; } else { echo "Не вдалося отримати дані з API."; } } $json_data = file_get_contents($file_path); $data = json_decode($json_data, true); function getCurs($array, $val) { foreach ($array as $value) { if ($value['cc'] == $val) { return $value; } } return null; } $arr = getCurs($data, 'USD'); if ($arr) { echo " <h2>Вивід в строку</h2> <p class='t-italic'>{$arr['cc']} ({$arr['txt']}) коштує {$arr['rate']} грн згідно з курсом НБУ на {$arr['exchangedate']}.</p> <h2>Вивід в Grid</h2> <div class='grid-table-2 card'> <div>Валюта:</div><div>{$arr['txt']}</div> <div>Код:</div><div>{$arr['cc']}</div> <div>Курс до ₴:</div><div>{$arr['rate']}</div> <div>Дата:</div><div>{$arr['exchangedate']}</div> </div>"; } echo "<h2>Метали за 1 грам згідно з курсом НБУ</h2><ul class='t-italic'>"; $metals = ['XAU' => 'Золото', 'XAG' => 'Срібло', 'XPT' => 'Платина', 'XPD' => 'Паладій']; foreach ($metals as $cc => $name) { $currency = getCurs($data, $cc); if ($currency) { $rate_per_gram = $currency['rate'] / 31.1035; echo "<li>{$name} ({$cc}) коштує " . round($rate_per_gram, 2) . " грн на {$currency['exchangedate']}</li>"; } } echo "</ul>"; ?> </div> </div> </div> <script src="assets/js/theme.js?v=1.0"></script> <script src="assets/js/toclist.js?v=1.0"></script> </body> </html>