Получение курсов валют с сайта Центробанка России. Реализация на PHP

Система для получения курсов валют с официального сайта Центрального Банка России и конвертер валют.

Репозиторий пакета

Требования

  • Версия PHP 7.3 и выше.

Установка

Для установки пакета следует выполнить команду:

composer require drandin/exchange-rate

Получение курсов валют

Пример 1. Запрос данных о курсах валют, которые Центробанк России установил на дату 2020–02–19:

use CentralBankRussian\ExchangeRate\CBRClient; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionIncorrectData; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionInvalidParameter; use CentralBankRussian\ExchangeRate\ExchangeRate; $exchangeRate = new ExchangeRate(new CBRClient()); try { $currencyRateCollection = $exchangeRate ->setDate(new DateTime('2020-02-19')) ->getCurrencyExchangeRates(); var_dump($currencyRateCollection); } catch (ExceptionIncorrectData | ExceptionInvalidParameter $e) { echo $e->getMessage(); }

Результат (фрагмент):

object(CentralBankRussian\ExchangeRate\Collections\CurrencyRateCollection)[819] private 'currencyRates' => array (size=35) 'AUD' => object(CentralBankRussian\ExchangeRate\Models\CurrencyRate)[823] private 'name' => string 'Австралийский доллар' (length=39) private 'exchangeRate' => float 42.6046 private 'quantity' => int 1 private 'numericCode' => string '36' (length=2) private 'symbolCode' => string 'AUD' (length=3) 'AZN' => object(CentralBankRussian\ExchangeRate\Models\CurrencyRate)[822] private 'name' => string 'Азербайджанский манат' (length=41) private 'exchangeRate' => float 37.589 private 'quantity' => int 1 private 'numericCode' => string '944' (length=3) private 'symbolCode' => string 'AZN' (length=3) 'GBP' => object(CentralBankRussian\ExchangeRate\Models\CurrencyRate)[824] private 'name' => string 'Фунт стерлингов Соединенного королевства' (length=77) private 'exchangeRate' => float 82.7987 private 'quantity' => int 1 private 'numericCode' => string '826' (length=3) private 'symbolCode' => string 'GBP' (length=3) 'AMD' => object(CentralBankRussian\ExchangeRate\Models\CurrencyRate)[825] private 'name' => string 'Армянский драм' (length=27) private 'exchangeRate' => float 13.327 private 'quantity' => int 100 private 'numericCode' => string '51' (length=2) private 'symbolCode' => string 'AMD' (length=3) 'BYN' => object(CentralBankRussian\ExchangeRate\Models\CurrencyRate)[826] private 'name' => string 'Белорусский рубль' (length=33) private 'exchangeRate' => float 28.931 private 'quantity' => int 1 private 'numericCode' => string '933' (length=3) private 'symbolCode' => string 'BYN' (length=3) ...

Пример 2. Запрос данных валюты USD актуальных на дату 2020–07–12:

use CentralBankRussian\ExchangeRate\CBRClient; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionIncorrectData; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionInvalidParameter; use CentralBankRussian\ExchangeRate\ExchangeRate; $exchangeRate = new ExchangeRate( new CBRClient() ); try { $currencyRate = $exchangeRate ->setDate(new DateTime('2020-07-12')) ->getCurrencyExchangeRates() ->getCurrencyRateBySymbolCode('AMD'); var_dump($currencyRate); } catch (ExceptionIncorrectData | ExceptionInvalidParameter $e) { echo $e->getMessage(); }

В этом примере мы запрашиваем коллекцию курсов валют CurrencyRateCollection и при помощи метода getCurrencyRateBySymbolCode(‘AMD’) получаем элемент коллекции для валюты с символьным кодом AMD (Армянский драм)

Результат:

object(CentralBankRussian\ExchangeRate\Models\CurrencyRate)[825] private 'name' => string 'Армянский драм' (length=267) private 'exchangeRate' => float 14.6383 private 'quantity' => int 100 private 'numericCode' => string '51' (length=2) private 'symbolCode' => string 'AMD' (length=3)

Обратите внимание на свойство quantity. Для валюты Армянский драм quantity равняется 100. Это значит, что 100 армянских драм стоят 14.6383 рублей.

Пример 3. Получение курса валюты AMD по отношению к рублю на указанную дату — 2020–09–30:

use CentralBankRussian\ExchangeRate\CBRClient; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionIncorrectData; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionInvalidParameter; use CentralBankRussian\ExchangeRate\ExchangeRate; $exchangeRate = new ExchangeRate( new CBRClient() ); try { $rateInRubles = $exchangeRate ->setDate(new DateTime('2020-09-30')) ->getRateInRubles('AMD'); echo $rateInRubles; } catch (ExceptionIncorrectData | ExceptionInvalidParameter $e) { echo $e->getMessage(); }

Результат:

0.1641

Мы получили курс 1 армянского драма в рублях, который Центробанк установил на дату 2020–09–30.

Конвертация курсов валют

Пример конвертации 73 224 долларов США в Евро по курсу, который был актуален 2020–06–10:

use CentralBankRussian\ExchangeRate\CBRClient; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionIncorrectData; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionInvalidParameter; use CentralBankRussian\ExchangeRate\ExchangeRate; $exchangeRate = new ExchangeRate( new CBRClient() ); try { $rateInRubles = $exchangeRate ->setDate(new DateTime('2020-09-30')) ->getRateInRubles('AMD'); echo $rateInRubles; } catch (ExceptionIncorrectData | ExceptionInvalidParameter $e) { echo $e->getMessage(); }

Результат:

65012.87

73 224 доллара США соответствуют 65 012.87 евро по курсу Центробанка РФ, который был установлен на дату 2020–06–10.

Получение справочника по кодам валют

Пример 1. Получение перечня ежедневных валют:

use CentralBankRussian\ExchangeRate\CBRClient; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionIncorrectData; use CentralBankRussian\ExchangeRate\ReferenceData; $referenceData = new ReferenceData(new CBRClient()); try { $currencyCollection = $referenceData->getCurrencyCodesDaily(); var_dump($currencyCollection); } catch (ExceptionIncorrectData $e) { echo $e->getMessage(); }

Результат (фрагмент):

object(CentralBankRussian\ExchangeRate\Collections\CurrencyCollection)[819] private 'currencies' => array (size=58) 'AUD' => object(CentralBankRussian\ExchangeRate\Models\Currency)[822] private 'name' => string 'Австралийский доллар' (length=39) private 'nameEng' => string 'Australian Dollar' (length=17) private 'quantity' => int 1 private 'numericCode' => string '36' (length=2) private 'symbolCode' => string 'AUD' (length=3) private 'internalCode' => string 'R01010' (length=6) private 'internalCommonCode' => string 'R01010' (length=6) 'ATS' => object(CentralBankRussian\ExchangeRate\Models\Currency)[818] private 'name' => string 'Австрийский шиллинг' (length=37) private 'nameEng' => string 'Austrian Shilling' (length=17) private 'quantity' => int 1000 private 'numericCode' => string '40' (length=2) private 'symbolCode' => string 'ATS' (length=3) private 'internalCode' => string 'R01015' (length=6) private 'internalCommonCode' => string 'R01015' (length=6) 'AZN' => object(CentralBankRussian\ExchangeRate\Models\Currency)[823] private 'name' => string 'Азербайджанский манат' (length=41) private 'nameEng' => string 'Azerbaijan Manat' (length=16) private 'quantity' => int 1 private 'numericCode' => string '944' (length=3) private 'symbolCode' => string 'AZN' (length=3) private 'internalCode' => string 'R01020A' (length=7) private 'internalCommonCode' => string 'R01020' (length=6) 'GBP' => object(CentralBankRussian\ExchangeRate\Models\Currency)[824] private 'name' => string 'Фунт стерлингов Соединенного королевства' (length=77) private 'nameEng' => string 'British Pound Sterling' (length=22) private 'quantity' => int 1 private 'numericCode' => string '826' (length=3) private 'symbolCode' => string 'GBP' (length=3) private 'internalCode' => string 'R01035' (length=6) private 'internalCommonCode' => string 'R01035' (length=6) 'AON' => object(CentralBankRussian\ExchangeRate\Models\Currency)[825] private 'name' => string 'Ангольская новая кванза' (length=44) private 'nameEng' => string 'Angolan new Kwanza' (length=18) private 'quantity' => int 100000 private 'numericCode' => string '24' (length=2) private 'symbolCode' => string 'AON' (length=3) private 'internalCode' => string 'R01040F' (length=7) private 'internalCommonCode' => string 'R01040' (length=6) 'AMD' => object(CentralBankRussian\ExchangeRate\Models\Currency)[826] private 'name' => string 'Армянский драм' (length=27) private 'nameEng' => string 'Armenia Dram' (length=12) private 'quantity' => int 1000 private 'numericCode' => string '51' (length=2) private 'symbolCode' => string 'AMD' (length=3) private 'internalCode' => string 'R01060' (length=6) private 'internalCommonCode' => string 'R01060' (length=6) 'BYN' => object(CentralBankRussian\ExchangeRate\Models\Currency)[827] private 'name' => string 'Белорусский рубль' (length=33) private 'nameEng' => string 'Belarussian Ruble' (length=17) private 'quantity' => int 1 private 'numericCode' => string '933' (length=3) private 'symbolCode' => string 'BYN' (length=3) private 'internalCode' => string 'R01090B' (length=7) private 'internalCommonCode' => string 'R01090' (length=6) ...

Пример 2. Получение перечня ежемесячных валют:

use CentralBankRussian\ExchangeRate\CBRClient; use CentralBankRussian\ExchangeRate\Exceptions\ExceptionIncorrectData; use CentralBankRussian\ExchangeRate\ReferenceData; $referenceData = new ReferenceData(new CBRClient()); try { $currencyCollection = $referenceData->getCurrencyCodesMonthly(); var_dump($currencyCollection); } catch (ExceptionIncorrectData $e) { echo $e->getMessage(); }

Результат (фрагмент):

object(CentralBankRussian\ExchangeRate\Collections\CurrencyCollection)[819] private 'currencies' => array (size=85) 'ALL' => object(CentralBankRussian\ExchangeRate\Models\Currency)[822] private 'name' => string 'Албанский лек' (length=25) private 'nameEng' => string 'Albanian Lek' (length=12) private 'quantity' => int 100 private 'numericCode' => string '8' (length=1) private 'symbolCode' => string 'ALL' (length=3) private 'internalCode' => string 'R01025' (length=6) private 'internalCommonCode' => string 'R01025' (length=6) 'DZD' => object(CentralBankRussian\ExchangeRate\Models\Currency)[818] private 'name' => string 'Алжирский динар' (length=29) private 'nameEng' => string 'Algerian Dinar' (length=14) private 'quantity' => int 100 private 'numericCode' => string '12' (length=2) private 'symbolCode' => string 'DZD' (length=3) private 'internalCode' => string 'R01030' (length=6) private 'internalCommonCode' => string 'R01030' (length=6) 'AOA' => object(CentralBankRussian\ExchangeRate\Models\Currency)[824] private 'name' => string 'Ангольская кванза' (length=33) private 'nameEng' => string 'Angolan Kwanza' (length=14) private 'quantity' => int 100 private 'numericCode' => string '973' (length=3) private 'symbolCode' => string 'AOA' (length=3) private 'internalCode' => string 'R01040E' (length=7) private 'internalCommonCode' => string 'R01040' (length=6) 'ARS' => object(CentralBankRussian\ExchangeRate\Models\Currency)[823] private 'name' => string 'Аргентинское песо' (length=33) private 'nameEng' => string 'Argentine Peso' (length=14) private 'quantity' => int 10 private 'numericCode' => string '32' (length=2) private 'symbolCode' => string 'ARS' (length=3) private 'internalCode' => string 'R01055' (length=6) private 'internalCommonCode' => string 'R01055' (length=6) 'AFN' => object(CentralBankRussian\ExchangeRate\Models\Currency)[825] private 'name' => string 'Афганский афгани' (length=31) private 'nameEng' => string 'Afghanistan Afgani' (length=18) private 'quantity' => int 100 private 'numericCode' => string '971' (length=3) private 'symbolCode' => string 'AFN' (length=3) private 'internalCode' => string 'R01065' (length=6) private 'internalCommonCode' => string 'R01065' (length=6) 'BHD' => object(CentralBankRussian\ExchangeRate\Models\Currency)[826] private 'name' => string 'Бахрейнский динар' (length=33) private 'nameEng' => string 'Bahraini Dinar' (length=14) private 'quantity' => int 1 private 'numericCode' => string '48' (length=2) private 'symbolCode' => string 'BHD' (length=3) private 'internalCode' => string 'R01080' (length=6) private 'internalCommonCode' => string 'R01080' (length=6) 'BOB' => object(CentralBankRussian\ExchangeRate\Models\Currency)[827] private 'name' => string 'Боливийский боливиано' (length=41) private 'nameEng' => string 'Bolivian Boliviano' (length=18) private 'quantity' => int 10 private 'numericCode' => string '68' (length=2) private 'symbolCode' => string 'BOB' (length=3) private 'internalCode' => string 'R01105' (length=6) private 'internalCommonCode' => string 'R01105' (length=6) ...

Свойства модели CurrencyRate

Модель CentralBankRussian\ExchangeRate\Models\Currency

Свойства модели Currency

Модель CentralBankRussian\ExchangeRate\Models\Currency

Ссылка на описание web-сервиса ЦБ РФ

0
5 комментариев
Iv Black

Надо глянуть позже поближе. На python пробовал. На пыхе пока нет.

Ответить
Развернуть ветку
Sergey Boyarskiy

На питоне удачно?

Ответить
Развернуть ветку
Iv Black

Вполне. Среда - Юпитер.

Ответить
Развернуть ветку
Alexandro

Хотел добавить совсем простой php-вариант выгрузки курса на сайт, но, оказывается, код нельзя сюда вставлять (

Ответить
Развернуть ветку
Ольга Васильева

А нет подобной библиотеки только для драгметаллов?

Ответить
Развернуть ветку
2 комментария
Раскрывать всегда