Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Парсер курсов валют ЦБ РФ

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Парсер курсов валют ЦБ РФ

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      instalator last edited by

      Парсит валюты с сайта ЦБ РФ.

      `var url = 'http://www.cbr.ru/scripts/XML_daily.asp';
      var request = require('request');
      
      schedule("0 * * * *", function () {
          parsevalute();
      });
      
      function parsevalute(){
          url = url;
          log('Идем на сайт ЦБ - '+url);
          var options = {
              url: url,
          };
          // Отправка данных методом POST.
          request(options, function (error, response, body, callback) {
              if (!error && response.statusCode == 200) {
                //  log('Код ответа от сервера'+response.statusCode);
                 // log('Ответ от ЦБ: '+body);
              // Парсим данные
               var Valute = body.match(/<charcode>(.*)<\/CharCode>/g);
               var Nominal = body.match(/<nominal>(.*)<\/Nominal>/g);
               var Name = body.match(/<name>(.*)<\/Name>/g);
               var Value = body.match(/<value>(.*)<\/Value>/g);
               var result = [];
                  for(var i = 0; i < Valute.length-1; i++) {
                      result.push({
                          Valute: Valute[i].replace(/<charcode>/g, "").replace(/<\/CharCode>/g, ""),
                          Nominal: Nominal[i].replace(/<nominal>/g, "").replace(/<\/Nominal>/g, ""),
                          Name: Name[i].replace(/<name>/g, "").replace(/<\/Name>/g, ""),
                          Value: Value[i].replace(/<value>/g, "").replace(/[,]+/g, '.').replace(/<\/Value>/g, "")
                      });
                      //Course = parseFloat(result[i].Value)/parseFloat(result[i].Nominal);
                      createState('Valuta.'+Valute[i].replace(/<charcode>/g, "").replace(/<\/CharCode>/g, ""), '');
                      setState ('Valuta.'+Valute[i].replace(/<charcode>/g, "").replace(/<\/CharCode>/g, ""), (parseFloat(result[i].Value)/parseFloat(result[i].Nominal)));
      
                  }
              }
          });
      }</charcode></charcode></value></name></nominal></charcode></value></name></nominal></charcode>`
      
      Обновил код, исправил небольшие недочеты.
      
      Для програваривания курсов пишем:
      `~~[code]~~setState ('sayit.0.tts.text', 'Курс доллара '+ (getState("javascript.0.Valuta.USD").val.toFixed(2)).toString().replace(/[.]+/g, ',')+' руб.');[/code]`
      
      **~~[b]~~ОБНОВЛЕННАЯ ВЕРСИЯ СКРИПТА:[/b]**
      
      >! ~~[spoiler]~~`~~[code]~~var url = 'https://www.cbr-xml-daily.ru/daily_json.js';
      var request = require('request');
      >! if(getState("javascript.0.Valuta.USD").val === null || !getState("javascript.0.Valuta.USD").val){
          log('Нет состояния javascript.0.Valuta.USD');
          parsevalute();
      } 
      >! schedule("0 7,16,20 * * 1-5", function () {//"0 * * * *"
          parsevalute();
      });
       parsevalute();
      function parsevalute(){
          url = url;
          log('Идем на сайт ЦБ - '+url);
          var options = {
              url: url
      
          }; 
          request(options, function (error, response, body) {
              log('Получен ответ от ЦБ (' + response.statusCode + ')');
              if (!error && response.statusCode == 200) {
                  var obj;
                  try {
                      obj = JSON.parse(body);
                      if (!obj.Valute.USD.Value || !obj.Valute.EUR.Value) {
                           throw new SyntaxError("Данные некорректны");
                      } else {
                          //log('Ответ от ЦБ: ' + obj.Valute);
                          obj = obj.Valute;
                          for (var key in obj) {
                              if(obj.hasOwnProperty(key)){
                                  var course = parseFloat(obj[key].Value)/parseFloat(obj[key].Nominal);
                                  createState('Valuta.' + key, 0, {name: obj[key].Name});
                                  setState ('Valuta.' + key, course);
                              }
                          }
                          log('Курсы валют обновлены');
                      }
                  } catch (err) {
                      log("Ошибка парсинга! - " + JSON.stringify(err));
                      result = null;
                  }
              }
          });
      }
      [/code]`[/spoiler][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
      
      1 Reply Last reply Reply Quote 0
      • I
        instalator last edited by

        Добавил в шапку обновленную версию скрипта

        1 Reply Last reply Reply Quote 0
        • S
          silverow last edited by

          Расскажите как правильно пользоваться, пожалуйста. В скрипты добавил, запустил, переменные создались. Будет ли теперь само автоматом обновляться или нужно, что то сделать еще?

          P.S. может есть вариант с биржевыми курсами и стоимостью акций?

          1 Reply Last reply Reply Quote 0
          • P
            Pooh last edited by

            … schedule("0 7,16,20 * * 1-5", ...

            Настрой здесь как нужно (формат cron)

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            829
            Online

            31.7k
            Users

            79.8k
            Topics

            1.3m
            Posts

            3
            4
            2728
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo