Суббота, 08 июля 2023 02:14

Динамика курсов валют ЦБ РФ на Google Chart

Оцените материал
(0 голосов)

Вторая часть материала "Падение российского рубля - на Google Chart" (см. ссылку в левом сайдбаре).

Увы, тема не потеряла актуальности за годы, прошедшие с момента написания первой статьи; стало быть, ничего не остается, как продолжить.

 

Dev banner 1

 

Этот респонсивный виджет (живая демка в топе статьи) будет работать на любом сайте, написанном на PHP: просто скопируйте показанный далее код и разместите на своем веб-ресурсе. Оптимально, если получившаяся в итоге страничка (модуль, плагин) будут кэшированы.

 

18.03.2024 с сайта удалены все демки, демонстрировавшие чарты курсов валют Центробанка РФ. API CBR, с которым много лет не было никаких хлопот, практически перестал работать: то ли это бан за американский ip блога, то ли что-то еще, подробно разбираться нет ни смысла, ни желания. Гуд лаг май френдс.

 


<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
  google.charts.load('current', {
    'packages': ['corechart', 'bar']
  });
  google.charts.setOnLoadCallback(drawStuff);

<?php
$curDate = date("d/m/Y", mktime(0, 0, 0, date("n"), date("j") + 1, date("Y")));
$curDate2 = date(
    "d/m/Y",
    mktime(0, 0, 0, date("n"), date("j") - 30, date("Y"))
);
$currencyXML = simplexml_load_file(
    "http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=" .
        $curDate2 .
        "&date_req2=" .
        $curDate .
        "&VAL_NM_RQ=R01235"
);
$currencyXML1 = simplexml_load_file(
    "http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=" .
        $curDate2 .
        "&date_req2=" .
        $curDate .
        "&VAL_NM_RQ=R01239"
);
?>

  function drawStuff() {
    var button = document.getElementById('change-chart');
    var chartDiv = document.getElementById('chart_div');
    var data = google.visualization.arrayToDataTable([
      ['Dates', 'USD', 'EUR'],

<?php for ($i = 0; $i < sizeof($currencyXML->Record); $i++) {
    echo "['{$currencyXML->Record[$i]["Date"]}', " .
        str_replace(",", ".", $currencyXML->Record[$i]->Value) .
        " , " .
        str_replace(",", ".", $currencyXML1->Record[$i]->Value) .
        " ],";
} ?>

    ]);
    var materialOptions = {
      responsive: true,
      chart: {
        title: 'Bank of Russia',
        subtitle: 'Dynamics of the official exchange rates'
      },
      series: {
        0: {
          axis: 'distance'
        }, // Bind series 0 to an axis named 'distance'.
        1: {
          axis: 'brightness'
        } // Bind series 1 to an axis named 'brightness'.
      },
      axes: {
        y: {
          distance: {
            label: '1 US Dollar to RUB'
          }, // Left y-axis.
          brightness: {
            side: 'right',
            label: '1 EUR to RUB'
          } // Right y-axis.
        }
      }
    };
    var classicOptions = {
      responsive: true,
      series: {
        0: {
          targetAxisIndex: 0
        },
        1: {
          targetAxisIndex: 1
        }
      },
      title: 'Bank of Russia. Dynamics of the official exchange rates.',
      vAxes: {
        // Adds titles to each axis.
        0: {
          title: '1 US Dollar to RUB'
        },
        1: {
          title: '1 EUR to RUB'
        }
      }
    };

    function drawMaterialChart() {
      var materialChart = new google.charts.Bar(chartDiv);
      materialChart.draw(data, google.charts.Bar.convertOptions(materialOptions));
      button.innerText = 'Change to Classic';
      button.onclick = drawClassicChart;
    }

    function drawClassicChart() {
      var classicChart = new google.visualization.ColumnChart(chartDiv);
      classicChart.draw(data, classicOptions);
      button.innerText = 'Change to Material';
      button.onclick = drawMaterialChart;
    }
    drawMaterialChart();
  };
</script>
<button id="change-chart">Change to Classic</button>
<br>
<br>
<div id="chart_div" style="width: 100%; height: 500px;"></div>

 

Последнее изменениеПонедельник, 18 марта 2024 15:10

Оставить комментарий

Добавьте ваш комментарий

Комментарии в блоге

  • Aleksej Yes. You can see it, I switched the temperature from C to F in the module on this page (Costa… 2024-10-01 21:43:42
    jWeather by ip. Погода по ip для Joomla!
  • Anne Is it possible to change temperature to F vs C? 2024-10-01 18:55:58
    jWeather by ip. Погода по ip для Joomla!
  • Aleksej Первое, что бросается в глаза: период времени, прошедший между тем, как автор комментария разбросал аналогичный текст по нескольким интернет-площадкам рунета,… 2024-07-02 14:10:05
    Tobeamerica эмансипе
  • Валерий Л. Предыдущий отзыв неактуален. Это было недоразумение, мы его уладили. Компания вернула мне деньги, никаких претензий к ней я не имею.… 2024-07-01 17:10:43
    Tobeamerica эмансипе
  • Евгения Кличко Спасибо. 2024-06-25 01:03:32
    Joomla cache. Problems and solutions