Парсим курсы валют с сайта ЦБ РФ
Скрипт получает актуальный курсы валют с сайта ЦБ РФ. На текущий момент я написал адаптер 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;
}
}
});
}
=IMPORTXML(«http://www.cbr.ru/scripts/XML_daily.asp»; «//ValCurs/Valute[CharCode=»»USD»»]/Value»)
в ячейке таблицы Гугли
Не понял
ПАРСИМ КУРСЫ ВАЛЮТ С САЙТА ЦБ РФ
Гугль почти все сделает за нас!
Надо только:
1. создать таблицу на диске Гугли
2. выделить ячейку
3. скопировать формулу в ячейку =IMPORTXML(«http://www.cbr.ru/scripts/XML_daily.asp»; «//ValCurs/Valute[CharCode=»»USD»»]/Value»)
— после чего таблица запросит с сайта ЦБ РФ информацию о курсах валют, обработает и выведет в ячейку значение (в нашем случае, USD) .
Примечание. Кавычки в формуле должны быть верхними.
Это все замечательно конечно, но этот скрипт парсит курсы в системе ‘умный дом’.