game/_incl_data/crons/bank_updateExchangeRates.php
2023-01-10 18:30:35 +02:00

102 lines
2.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use Core\Config;
use Core\Db;
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'autoload.php';
/**
* Обновление данных о курсах валют из Центробанка РФ.
* Раз в день в час ночи.
*/
// Обнуление(?!) передач раз в сутки
Db::sql('update stats set transfers = 100 where transfers < 200');
function getCurs()
{
// создаем объект для работы с XML
$xml = new DOMDocument();
// ссылка на сайт банка
$url = 'https://www.cbr.ru/scripts/XML_daily.asp?date_req=' . date('d.m.Y');
// получаем xml с курсами всех валют
if (!$xml->load($url)) {
// если не получили xml возвращаем false
return false;
}
// массив для хранения курсов валют
$result = [];
// разбираем xml
$root = $xml->documentElement;
// берем все теги 'Valute' и их содержимое
$items = $root->getElementsByTagName('Valute');
// переберем теги 'Valute' по одному
foreach ($items as $item) {
// получаем код валюты
$code = $item->getElementsByTagName('CharCode')->item(0)->nodeValue;
// получаем значение курса валюты, относительно рубля
$value = $item->getElementsByTagName('Value')->item(0)->nodeValue;
// номинал
$nominal = $item->getElementsByTagName('Nominal')->item(0)->nodeValue;
// записываем в массив, предварительно заменив запятую на точку
$result[$code] = round(str_replace(',', '.', $value), 5) / $nominal;
}// возвращаем значение курса, для запрошенной валюты
return $result;
}
$get = getCurs();
if (Config::get('curency_name') === 'RUB') {
$curency = Config::get('curency_value');
} else {
$curency = round($get[Config::get('curency_name')] * Config::get('curency_value'), 4);
}
if ($get['USD'] > 0) {
$price = [
'AUD',
'AZN',
'AMD',
'BYR',
'BGN',
'BRL',
'HUF',
'KRW',
'DKK',
'USD',
'EUR',
'INR',
'KZT',
'CAD',
'KGS',
'CNY',
'LVL',
'LTL',
'MDL',
'RON',
'TMT',
'NOK',
'PLN',
'XDR',
'SGD',
'TJS',
'TRY',
'UZS',
'UAH',
'GBP',
'CZK',
'SEK',
'CHF',
'ZAR',
'JPY',
];
$r = '';
foreach ($price as $value) {
if (!$get[$value]) {
continue;
}
$r .= ',`' . $value . '`="' . $get[$value] . '"';
}
Db::sql('insert into bank_table set time = unix_timestamp(), cur = ?, data = ?', [$curency, date('d.m.Y') . $r]);
}