Парсим курсы валют с сайта ЦБ РФ

Скрипт получает актуальный курсы валют с сайта ЦБ РФ. На текущий момент я написал адаптер exchangerates для iobroker, который получает курсы ЦБ РФ и European Central Bank.

var url = 'http://www.cbr.ru/scripts/XML_daily.asp';
var request = require('request');
 
schedule("10 17 * * *", 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)));
                 
            }
        }
    });
}

Обновленная версия скрипта:

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;
            }
        }
    });
}
Подписаться
Уведомлять
guest

4 комментариев
Старые вначале
Новые вначале По голосам
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
Сергей
7 лет назад

=IMPORTXML(«http://www.cbr.ru/scripts/XML_daily.asp»; «//ValCurs/Valute[CharCode=»»USD»»]/Value»)

в ячейке таблицы Гугли

Сергей
Сергей
7 лет назад
Ответить на  instalator

ПАРСИМ КУРСЫ ВАЛЮТ С САЙТА ЦБ РФ

Гугль почти все сделает за нас!
Надо только:
1. создать таблицу на диске Гугли
2. выделить ячейку
3. скопировать формулу в ячейку =IMPORTXML(«http://www.cbr.ru/scripts/XML_daily.asp»; «//ValCurs/Valute[CharCode=»»USD»»]/Value»)
— после чего таблица запросит с сайта ЦБ РФ информацию о курсах валют, обработает и выведет в ячейку значение (в нашем случае, USD) .
Примечание. Кавычки в формуле должны быть верхними.

4
0
Поделиться своими мыслямиx