Курс валют на PHP: делаем информер из XML

В статье "Информер валют своими руками" я приводил пример парсера, вырезающий курс валют из HTML содержимого страницы. В этой статье рассмотрим альтернативный вариант получения информации о курсах валют из файлов формата-импорта (XML).

В условиях экономическо-политической нестабильности актуальными на новостных и городских сайтах являются информеры курса валют. Впрочем, данный вид информеров всегда был востребованным, о чем красноречиво свидетельствует обилие API и экспортных файлов (XML/JSON) у сайтов финансовой направленности. Казалось бы, получить информацию о текущем состоянии валют для своего сайта от финансовых учреждений - раз плюнуть. Но при детальном изучении вопроса, мы наталкиваемся на ряд подводных камней: либо нас просят разместить их информер (куда вшита ссылка), либо от нас требуют установить обратную ссылку или баннер, либо угрожают банить наш IP при частом обращении к их файлу импорта, либо сайт с импортными данными уже не работает и т.д.

курс валют на PHP для сайта
Новостные сайты немыслимы без курса валют

Как же быть, если курсы валют так популярны и их наличие на сайте порой удерживает там посетителей? Делать информер мы будем на PHP, предъявляя ряд требований к донорам, которые будут предоставлять нам такую информацию:

  • это должен быть серьезный, старый, официальный сайт;
  • импорт должен быть в XML файле;
  • доступ к XML стабильный, открытый и бесплатный;

Информер курса валют для Украины

В Украине особый интерес вызывает курс валют от Приватбанка и НБУ. Основными валютами тут являются USD, EUR и RUB. Где взять их бесплатно и в XML?

Курс валют от Приватбанка

Крупный украинский "Приватбанк" имеет API, предоставляющий информацию о наличных и безналичных курсах валют. В данном случае нас интересует наличный курс в Приватбанке, его можно взять по адресу:

https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=5

Чтобы информацию выводить на своем сайте, мы должны обработать XML. Сделаем это с помощью PHP:

<?php
$url = "https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=5";
$curl = curl_init($url);
if ( $curl ){
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$page = curl_exec($curl);
curl_close($curl);
unset($curl);
$xml = new SimpleXMLElement($page);
echo $xml->row[2]->exchangerate['ccy'][0].': ';
echo $xml->row[2]->exchangerate['buy'][0].' - ';
echo $xml->row[2]->exchangerate['sale'][0].'<br>';
echo $xml->row[0]->exchangerate['ccy'][0].': ';
echo $xml->row[0]->exchangerate['buy'][0].' - ';
echo $xml->row[0]->exchangerate['sale'][0].'<br>';
echo $xml->row[1]->exchangerate['ccy'][0].': ';
echo $xml->row[1]->exchangerate['buy'][0].' - ';
echo $xml->row[1]->exchangerate['sale'][0];
}
?>

Результат работы скрипта:

USD: 24.10000 - 25.10000
EUR: 26.40000 - 27.50000
RUR: 0.34200 - 0.37000

Курс валют от НБУ

Курс основных валют в Украине (USD, EUR и RUB) от Национального Банка Украины (НБУ) можно взять у того же Приватбанка (достаточно немного модифицировать уже приведенный код):

<?php
$url = "https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=3";
$curl = curl_init($url);
if ( $curl ){
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$page = curl_exec($curl);
curl_close($curl);
unset($curl);
$xml = new SimpleXMLElement($page);
echo $xml->row[2]->exchangerate['ccy'][0].': ';
echo $xml->row[2]->exchangerate['buy'][0].'<br>';
echo $xml->row[0]->exchangerate['ccy'][0].': ';
echo $xml->row[0]->exchangerate['buy'][0].'<br>';
echo $xml->row[1]->exchangerate['ccy'][0].': ';
echo $xml->row[1]->exchangerate['buy'][0].'<br>';
}
?>

Результат работы скрипта (выводит курс основных валют на текущий день):

USD: 23.36832
EUR: 25.57195
RUR: 0.33762

Информер курса валют для России

Основные индикаторы финансового рынка в России - это Доллар США и Евро. Центральный банк Российской Федерации предоставляет данные о курсах различных валют в XML формате по адресу:

http://www.cbr.ru/scripts/XML_daily.asp?date_req=

Вот как вытянуть на PHP оттуда указанные валюты (хотя при желании можно забрать другие) на текущую дату (в переменную $date можно подставить любую дату и получить курс валют на указанный день):

<?php
$date = date("d.m.Y"); // Сегодня
$dom = new domDocument("1.0", "cp1251");
$dom->loadXML(file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"));
$root = $dom->documentElement;
$childs = $root->childNodes;
$data = array();
for ($i = 0; $i < $childs->length; $i++) {
$childs_new = $childs->item($i)->childNodes;
for ($j = 0; $j < $childs_new->length; $j++) {
$el = $childs_new->item($j);
$code = $el->nodeValue;
// Указываем нужные нам валюты, полный список их можно получить в файле www.cbr.ru/scripts/XML_daily.asp?date_req= в поле <CharCode>...</CharCode>
if (($code == "USD") || ($code == "EUR")) $data[] = $childs_new;
}
}
for ($i = 0; $i < count($data); $i++) {
$list = $data[$i];
for ($j = 0; $j < $list->length; $j++) {
$el = $list->item($j);
if ($el->nodeName == "Name") echo $el->nodeValue." - ";
elseif ($el->nodeName == "Value") echo $el->nodeValue."<br />";
}
}
?>

Результат работы скрипта:

Доллар США - 69,1755
Евро - 75,7472

Заключение

Парсить информацию основных валют мы научились! Но это, разумеется, еще не все. За кадром осталось оформление информера (тут уже дело вкуса) и как гарантия от сбоев информера - реализация кеширования данных. Я настоятельно рекомендую кешировать полученные данные по XML (можно на пару часов - актуальность от этого курса валют не сильно пострадает), так вы убережете себя от непредвиденных ошибок в работе парсера или ошибках на стороне самого донора (пример кеширования вы можете почерпнуть в статье, ссылка на которую размещена в начале поста).

Выгодных вам курсов валют и стабильной работы в скриптах!

Оцените материал:
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (9 голоса, рейтинг: 4,78 из 5)
Загрузка...

Вячеслав - типичный интернетчикВячеслав Скоблей (ака files) - типичный интернетчик. Скитаюсь интернетом, пишу на PHP, увлекаюсь созданием веб-сайтов на Wordpress, решаю многочисленные проблемы, которые до появления интернета не существовали...

Специализируюсь на безопасности сайтов: защищаю сайты от атак и взломов, занимаюсь лечением вирусов на сайтах и профилактикой...

Наверняка у Вас есть вопросы, просьбы или пожелания. Не стесняйтесь спросить, я отвечаю всегда быстро...

39 комментарий

  1. Max says:

    Добрый день! Спасибо за скрипт. Перечитал Ваши статьи, но не нашел решения. У меня не работает кэширование, файл создается, но ничего не записывается в него. Уже ставил все права на папку и на файл, но никакого результата, кэш не работает.

    Скрипт:

    <?php
    
    $cache_lifetime = 3600; //в секундах, 3600=1 час
    $cache_file = "cache/cache.html"; // в папке cache будет создаваться закешированный файл cache.html
    $cache_content = false;
    if ( file_exists($cache_file) ) {
    $cache_modified = time() - @filemtime($cache_file);
    if ( $cache_modified row[2]->exchangerate['ccy'][0].': ';
    echo $xml->row[2]->exchangerate['buy'][0].' - ';
    echo $xml->row[2]->exchangerate['sale'][0].'';
    echo $xml->row[0]->exchangerate['ccy'][0].': ';
    echo $xml->row[0]->exchangerate['buy'][0].' - ';
    echo $xml->row[0]->exchangerate['sale'][0].'';
    echo $xml->row[1]->exchangerate['ccy'][0].': ';
    echo $xml->row[1]->exchangerate['buy'][0].' - ';
    echo $xml->row[1]->exchangerate['sale'][0];
    }
    
    if ( $cache_content === false ) { ob_start();
    $cache_content = $content;
    ob_end_clean();
    $fp = @fopen($cache_file, "w");
    if ( $fp ) {
    @fwrite($fp, $cache_content);
    @fclose($fp);
    }}
    echo $cache_content;
    
    ?>
  2. Виктор says:

    Вячеслав, вы ещё информер обсуждаете? Вопрос есть. Во-первых, как результат калькуляции в php скрипте выводится в html странице?
    Передо мной стоит задача сделать калькулятор-конвертор цены. Есть перечень цен в $ в .yml файле в формате
    price01: 358.00
    price02: 368.00
    Мне нужно эти цены конвертировать в рубли и сохранить в каких-то переменных, из которых их можно подставить в html.
    Заранее благодарю, если что-нибудь посоветуете.

  3. Petro says:

    Ніби все зрозуміло цікавить таке: як вставити ці дані валют з банку у вже простилізований свій сайт?

    1. Вячеслав Скоблей says:

      Код вставте в те місце свого сайту де ви плануєте отримати курс валют. Звісно, якщо ваш сайт підтримує PHP

  4. Василий says:

    Подскажите, а как взять такую же инфу не с Центрального банка РФ, а со Сбербанка России. Есть ли у них API или XML?

  5. Василий says:

    Спасибо, действительно очень много полезной инфы. А для курса который берется по API (например, первые скрипты, которые от Приват банка) нужно делать для них кеширование? Или только для XML?

  6. Владимир says:

    Большое спасибо, все работает, но только на сервере, на локалхосте ошибку выдает почему-то. Такой вопрос, если на вордпресе уже установлен плагин кеширования WP SuperCache нужно ли все равно реализовывать свое кеширование или плагин справится с этой задачей и можно ли как-то это проверить?

    1. Вячеслав Скоблей says:

      Если установлен какой-либо плагин кеширования, то он будет прекрасно выполнять свою функцию (дополнительно кешировать информацию в скрипте нет необходимости). Однако, не забывайте, что зачастую (зависит от настроек) авторизованные пользователи не видят кеша.

  7. Дилшод says:

    Помогите получит данные курса валют с этого сайта http://nbt.tj/tj/kurs/export_xml.php?date=2017-01-31

    1. Влад says:

      помогите сделать информер курсов эфира и биткоина вот с этой страницы, у самого никак не получается. заранее благодарен. coindesk.com/ethereum-price/ . и как можно собирать курсы с разных сайтов?

  8. Гость says:

    Здравствуйте. Все работает, файл кэша создается, но ничего в него не кэшируется. Где косяк?

    <?php
    $cache_lifetime = 3600; //в секундах, 3600=1 час
    $cache_file = "cache/cache.html"; // в папке cache будет создаваться закешированный файл cache.html
    $cache_content = false;
    if ( file_exists($cache_file) ) {
    $cache_modified = time() - @filemtime($cache_file);
    if ( $cache_modified loadXML(file_get_contents("http://belapb.by/ExRatesDaily.php?date=$date"));
    $root = $dom->documentElement;
    $childs = $root->childNodes;
    $data = array();
    for ($i = 0; $i length; $i++) {
    $childs_new = $childs->item($i)->childNodes;
    for ($j = 0; $j length; $j++) {
    $el = $childs_new->item($j);
    $code = $el->nodeValue;
    if (($code == "USD") || ($code == "EUR") || ($code == "RUB")) $data[] = $childs_new;
    }
    }
    for ($i = 0; $i < count($data); $i++) {
    $list = $data[$i];
    for ($j = 0; $j length; $j++) {
    $el = $list->item($j);
    if ($el->nodeName == "Name") echo $el->nodeValue." - ";
    elseif ($el->nodeName == "RateSell") echo $el->nodeValue."";
    }
    }
    
    if ( $cache_content === false ) { ob_start();
    $cache_content = $content;
    ob_end_clean();
    $fp = @fopen($cache_file, "w");
    if ( $fp ) {
    @fwrite($fp, $cache_content);
    @fclose($fp);
    }}
    echo $cache_content;
    ?>
    1. Вячеслав Скоблей says:

      Гость, попробуйте так:

      $date = date("d.m.Y"); // Сегодня
      $cache_lifetime = 3600; //в секундах, 3600=1 час
      $cache_file = "cache/cache.html";
      function loadxmlyansex($date)
       {
      $url = 'http://belapb.by/ExRatesDaily.php?date='.$date;
      $userAgent = 'Googlebot/2.1 (+http://www.google.com/bot.html)';
      $xml = 'cache/cache.html';
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
      curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
      $output = curl_exec($ch);
      $fh = fopen($xml, 'w');
      fwrite($fh, $output);
      fclose($fh);
       }
      
      if ( file_exists($cache_file) ) {
       $cache_modified = time() - @filemtime($cache_file);
       if ( $cache_modified > $cache_lifetime ) 
      {
      loadxmlyansex($date);
      }
      }
      else {
      loadxmlyansex($date);
      }
      
      $dom = new domDocument("1.0", "cp1251"); 
      $dom->loadXML(file_get_contents($cache_file));
      $root = $dom->documentElement;
      $childs = $root->childNodes;
      $data = array();
      for ($i = 0; $i < $childs->length; $i++) {
      $childs_new = $childs->item($i)->childNodes;
      for ($j = 0; $j < $childs_new->length; $j++) {
      $el = $childs_new->item($j);
      $code = $el->nodeValue;
      if (($code == "USD") || ($code == "EUR") || ($code == "RUB")) $data[] = $childs_new;
      }
      }
      for ($i = 0; $i < count($data); $i++) {
      $list = $data[$i];
      for ($j = 0; $j < $list->length; $j++) {
      $el = $list->item($j);
      if ($el->nodeName == "Name") echo $el->nodeValue." - ";
      elseif ($el->nodeName == "RateSell") echo $el->nodeValue."
      "; } }
      1. Гость says:

        Спасибо, мужик, ты лучший!))) Работает, как часы. Последний небольшой вопрос. Как задать валютам индивидуальные стили оформления? Не могу разобраться, как правильно задать переменным div-ы. Извиняюсь за такие вопросы, просто с программированием туго.

        1. Гость says:

          Большое спасибо, уже разобрался сам.

      2. Гость says:

        Здравствуйте. Может поможете по этому же примеру сделать вывод курсов из такого xml?

        11
        6257
        18.01.2017
        ОАО «АСБ Беларусбанк»
        г.Новогрудок ул. Мицкевича, 22а
        (01597) 416-60, факс: (01597) 2 35 36
        ЦБУ №416 ОАО "АСБ Беларусбанк"
        1.934
        1.957
        2.044
        2.084
        0.031
        0.0329
        0.462
        0.485
        -
        -
        1.045
        1.0753

        Буду очень благодарен за помощь.

        1. Гость says:

          http://xn--b1acdylgbcq4a.xn--80asehdb/51.xml
          Вот достоверная структура xml. Как вытянуть данные хотябы для одного отделения банка? Или же это слишком сложно, что начинающего, чтобы мне разобраться?

      3. Здравствуйте. Попробовал сделать предложенным вами способом, но ничего увы не работает(
        Заметил, что $url = 'http://belapb.by/ExRatesDaily.php?date='.$date; имеет сейчас вид 'http://belapb.by/CashConvRatesDaily.php?ondate='
        но изменив адрес работать ничего не стало. Может поможете разобраться?

  9. Гость says:

    Здравствуйте. Может поможете вывести из такого XML? Никак не могу разобраться, как выбрать курсы из такой структуры((
    https://belarusbank.by/dev/kursyValut

  10. Андрей says:

    Как cделать информер из http://kurs.com.ua/informer/api ?
    Помогите пожайлуста.

  11. Виталий says:

    А вы не встречали XML для межбанка?
    Спасибо

  12. Вячеслав, не могу разобраться, а в какой переменной здесь находится курс доллара?

    1. Вячеслав Скоблей says:

      Так а какой скрипт вас интересует? Здесь разные примеры и разные источники. Также переменная может находится в массиве и ее нужно извлекать.

      1. Я использовал 2-ой скрипт с Центральный Банк России....там, я так понимаю, что и есть массив... как извлечь переменную , к сожалению, не знаю ((....подскажите Вячеслав, буду очень признателен....

        1. Вячеслав Скоблей says:

          Чтобы извлечь исключительно определенную валюту для математических операций, скрипт надо немного подрихтовать. Извлекаем стоимость доллара в рублях следующим образом:

          $date = date("d.m.Y"); // Сегодня
          $dom = new domDocument("1.0", "cp1251");
          $dom->loadXML(file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"));
          $root = $dom->documentElement;
          $childs = $root->childNodes;
          $data = array();
          for ($i = 0; $i < $childs->length; $i++) {
          $childs_new = $childs->item($i)->childNodes;
          for ($j = 0; $j < $childs_new->length; $j++) {
          $el = $childs_new->item($j);
          $code = $el->nodeValue;
          // Узвлекаем только USD
          if (($code == "USD")) $data[] = $childs_new;
          }
          }
          for ($i = 0; $i < count($data); $i++) {
          $list = $data[$i];
          for ($j = 0; $j < $list->length; $j++) {
          $el = $list->item($j);
          if ($el->nodeName == "Value") 
          echo $el->nodeValue; //здесь ваш доллар
          }
          }
          
  13. Приветствую,не подскажете как за кешировать,полученный результат,а то при не доступности сервера сайт выдает ошибку,и сайт полностью не работает

    1. Вячеслав Скоблей says:

      Закешировать полученные данные можно следующим кодом:

      $cache_lifetime = 3600; //в секундах, 3600=1 час
      $cache_file = "cache/cache.html"; // в папке cache будет создаваться закешированный файл cache.html
      $cache_content = false;
      if ( file_exists($cache_file) ) {
      $cache_modified = time() - @filemtime($cache_file);
      if ( $cache_modified < $cache_lifetime ) {
      $cache_content = file_get_contents($cache_file);
      }}
      
      
      // здесь ваш код и данные, которые будут закешированы
      
      
      if ( $cache_content === false ) { ob_start();
      $cache_content = $content;
      ob_end_clean();
      $fp = @fopen($cache_file, "w");
      if ( $fp ) {
      @fwrite($fp, $cache_content);
      @fclose($fp);
      }}
      echo $cache_content;
      
      1. Сергей says:

        Вячеслав, поправьте пожалуйста. Если я использую 3 вариант, то с кешированием будет так?

          // курс валют
                <?php
                // кеш 
                $cache_lifetime = 3600; //в секундах, 3600=1 час
        $cache_file = "cache/cache.html"; // в папке cache будет создаваться закешированный файл cache.html
        $cache_content = false;
        if ( file_exists($cache_file) ) {
        $cache_modified = time() - @filemtime($cache_file);
        if ( $cache_modified loadXML(file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"));
        $root = $dom->documentElement;
        $childs = $root->childNodes;
        $data = array();
        for ($i = 0; $i length; $i++) {
        $childs_new = $childs->item($i)->childNodes;
        for ($j = 0; $j length; $j++) {
        $el = $childs_new->item($j);
        $code = $el->nodeValue;
        // Указываем нужные нам валюты, полный список их можно получить в файле www.cbr.ru/scripts/XML_daily.asp?date_req= в поле ...
        if (($code == "USD") || ($code == "EUR")) $data[] = $childs_new;
        }
        }
        for ($i = 0; $i < count($data); $i++) {
        $list = $data[$i];
        for ($j = 0; $j length; $j++) {
        $el = $list->item($j);
        if ($el->nodeName == "CharCode" ) echo $el->nodeValue." ЦБ - ";
        elseif ($el->nodeName == "Value") echo $el->nodeValue." / ";
        }
        }
        
        // кеш
        
        if ( $cache_content === false ) { ob_start();
        $cache_content = $content;
        ob_end_clean();
        $fp = @fopen($cache_file, "w");
        if ( $fp ) {
        @fwrite($fp, $cache_content);
        @fclose($fp);
        }}
        echo $cache_content;
        // кеш
             ?>    
            // курс валют
  14. Сергей says:

    Доброго времени суток, делал информер по вашему примеру код все очень круто но... код тут >
    http://pastebin.com/qQFnVsd
    Сейчас выводит курсы в информере так
    EUR - 29.00/29.70 USD - 26.80/27.30
    подскажите как я могу сам выбирать очередность вывода, хочу например снача выводить USD потом EUR потом RUB, а сейчас оно выводит что первое нашло в масиве то и выводит. не пойму как. Спасибо

    1. Сергей says:

      Вячеслав, не подскажите?

      1. Вячеслав Скоблей says:

        Не исключено, что помогу! Знать бы что! Кода не вижу.

  15. У меня ни один вариант не заработал ,может дело в структуре xml ? У меня вот так

    RUR
    29.02.16
    4.68
    1

    И адрес на файл такой http://www.nationalbank.kz/rss/rates.xml
    0.00

    1. Вячеслав Скоблей says:

      Структура файла, естественно, другая. Парсер валют "Official exchange rates of National Bank of Republic Kazakhstan" в вашем случае можно написать таким образом (читаем все заполненные поля из файла http://www.nationalbank.kz/rss/rates.xml):

      function kz_Kazakhstan(){
      $url = "http://www.nationalbank.kz/rss/rates.xml";
      $dataKZ = simplexml_load_file($url);
      if ($dataKZ){
       foreach ($dataKZ->channel->item as $item){
       echo "Валюта: ".$item->title."
      "; echo "Дата: ".$item->pubDate."
      "; echo "description: ".$item->description."
      ";; echo "quant: ".$item->quant."
      "; echo "change: ".$item->change."
      "; }}} echo kz_Kazakhstan();

      P.S. Оформление информера - на ваш вкус (ненужные переменные можно убрать).

      1. Спасибо,работает

      2. Александр says:

        Годнота. Спасибо огромное !
        А как ограничеть вывод по количеству символов !?
        Т.Е. вместо "USD: 26.40000" в "USD: 26.40".

        Буду очень благодарен. Еще раз спасибо !

        1. Вячеслав Скоблей says:

          Можно функцией round()
          Например:

          round(26.40000, 2); // вернет 26.40

          1. Александр says:

            Я вместо:

            echo $xml->row[2]->exchangerate['buy'][0].' - ';

            написал:

            round($xml->row[2]->exchangerate['buy'][0], 2);

            Но ничего не происходит.

            Попробовал еще:

            number_format($xml->row[2]->exchangerate['buy'][0],2);

            Та же проблема :(

            1. Вячеслав Скоблей says:

              Александр, правильнее будет так:

              echo round(strip_tags($xml->row[2]->exchangerate['buy'][0]),2).'<br>';

              поскольку у нас данные в xml поступают, не будет лишним удалить все лишнее функцией strip_tags

              1. Алексей Марчук says:

                Спасибо, Вячеслав, благодаря Вам нашел еще одну функцию и залил ее в functions.php моего шаблона на вордпресс. В продолжение темы, не могу вьехать куда этот ROUND вставить чтоб было как у Александра, ибо все три валюты с множеством символом не влазят в одну строку. Подскажите как в этом случае округлить до 00.00. Заранее огромный лайк, респект и уважуха...Код:

                function _isCurl(){
                  return function_exists('curl_version');
                }
                function exchange_rates() {
                    if (_iscurl()){
                            $url = "https://api.privatbank.ua/p24api/pubinfo?exchange&json&coursid=11";
                            $ch = curl_init();
                            curl_setopt($ch, CURLOPT_URL, $url);
                            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                            $output = curl_exec($ch);
                            curl_close($ch);
                            if(!$output) return false;
                            $courses = json_decode($output,true);
                    } else{
                            echo "CURL is disabled";
                    }
                    $currs = ['USD','EUR'];
                    $res = '';
                    foreach($courses as $course){
                            if(in_array($course['ccy'], $currs)){
                                    $res .= "{$course['ccy']}: {$course['buy']} ";
                            }
                    }
                    return $res;
                }
                add_shortcode( 'exchange_rates', 'exchange_rates' );
                1. Вячеслав Скоблей says:

                  Можно так:

                  function _isCurl(){
                    return function_exists('curl_version');
                  }
                  function exchange_rates() {
                      if (_iscurl()){
                              $url = "https://api.privatbank.ua/p24api/pubinfo?exchange&json&coursid=11";
                              $ch = curl_init();
                              curl_setopt($ch, CURLOPT_URL, $url);
                              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                              $output = curl_exec($ch);
                              curl_close($ch);
                              if(!$output) return false;
                              $courses = json_decode($output,true);
                      } else{
                              echo "CURL is disabled";
                      }
                      $currs = ['USD','EUR'];
                      $res = '';
                      foreach($courses as $course){
                              if(in_array($course['ccy'], $currs)){
                                  
                      $buy= round($course['buy'], 2);
                       $res .= "{$course['ccy']}: $buy ";
                              }
                      }
                      return $res;
                  }
                  add_shortcode( 'exchange_rates', 'exchange_rates' );

Добавить комментарий для Сергей Иванов Отменить ответ

Ваш адрес email не будет опубликован.