game/_incl_data/crons/bank_updateExchangeRates.php

102 lines
2.9 KiB
PHP
Raw Normal View History

2022-12-30 19:03:37 +00:00
<?php
use Core\Config;
use Core\Db;
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'autoload.php';
/**
2023-01-10 16:29:32 +00:00
* Обновление данных о курсах валют из Центробанка РФ.
* Раз в день в час ночи.
2022-12-30 19:03:37 +00:00
*/
2023-01-10 16:29:32 +00:00
// Обнуление(?!) передач раз в сутки
2022-12-30 19:03:37 +00:00
Db::sql('update stats set transfers = 100 where transfers < 200');
function getCurs()
{
2023-01-10 16:29:32 +00:00
// создаем объект для работы с XML
2022-12-30 19:03:37 +00:00
$xml = new DOMDocument();
2023-01-10 16:29:32 +00:00
// ссылка на сайт банка
2022-12-30 19:03:37 +00:00
$url = 'https://www.cbr.ru/scripts/XML_daily.asp?date_req=' . date('d.m.Y');
2023-01-10 16:29:32 +00:00
// получаем xml с курсами всех валют
2022-12-30 19:03:37 +00:00
if (!$xml->load($url)) {
2023-01-10 16:29:32 +00:00
// если не получили xml возвращаем false
2022-12-30 19:03:37 +00:00
return false;
}
2023-01-10 16:29:32 +00:00
// массив для хранения курсов валют
2022-12-30 19:03:37 +00:00
$result = [];
2023-01-10 16:29:32 +00:00
// разбираем xml
2022-12-30 19:03:37 +00:00
$root = $xml->documentElement;
2023-01-10 16:29:32 +00:00
// берем все теги 'Valute' и их содержимое
2022-12-30 19:03:37 +00:00
$items = $root->getElementsByTagName('Valute');
2023-01-10 16:29:32 +00:00
// переберем теги 'Valute' по одному
2022-12-30 19:03:37 +00:00
foreach ($items as $item) {
2023-01-10 16:29:32 +00:00
// получаем код валюты
2022-12-30 19:03:37 +00:00
$code = $item->getElementsByTagName('CharCode')->item(0)->nodeValue;
2023-01-10 16:29:32 +00:00
// получаем значение курса валюты, относительно рубля
2022-12-30 19:03:37 +00:00
$value = $item->getElementsByTagName('Value')->item(0)->nodeValue;
2023-01-10 16:29:32 +00:00
// номинал
2022-12-30 19:03:37 +00:00
$nominal = $item->getElementsByTagName('Nominal')->item(0)->nodeValue;
2023-01-10 16:29:32 +00:00
// записываем в массив, предварительно заменив запятую на точку
2022-12-30 19:03:37 +00:00
$result[$code] = round(str_replace(',', '.', $value), 5) / $nominal;
2023-01-10 16:29:32 +00:00
}// возвращаем значение курса, для запрошенной валюты
2022-12-30 19:03:37 +00:00
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]);
}