Скрипт PHP отримує дані з сайту bank.gov.ua і зберігає їх локально у файлі
nbu.json. Оновлення здійснюється кожні три години, щоб уникнути навантаження на джерело інформації.
USD (Долар США) коштує 42.0836 грн згідно з курсом НБУ на 07.11.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>