Курсы валют для приложений Qlikview

Автор admin, 28 ноября 2014, 10:04:57

« назад - далее »

admin

Несмотря на то, что эта тема прекрасна раскрыта в Интернете, дам несколько ссылок, так сказать, чтобы под рукой было  :)

Получение данных с сайта ЦБ РФ используя XML

Как мы знаем, Qlikview прекрасно работает с XML-источниками, поэтому ничего далее сложного нет.
Формируем необходимые ссылки и подставляем их в качестве источника web-файла Qlikview.
Для котировок всех валют на один день:
http://www.cbr.ru/scripts/XML_daily.asp?date_req=27/11/2014
или для динамики курса , например доллара
http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=01/11/2014&date_req2=27/11/2014&VAL_NM_RQ=R01235
ID валюты (VAL_NM_RQ) можно получить по ссылке http://www.cbr.ru/scripts/XML_val.asp?d=0

admin


admin

#2
Пример скрипта для получения динамики курсов валют с сайта ЦБ РФ на каждый календарный день, включая выходные и праздничные дни с применением функции peek().

let vDateStart = date('01.01.2014','DD/MM/YYYY');
let vDateEnd = date(today(),'DD/MM/YYYY');
set vURLHist='http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=$(vDateStart)&date_req2=$(vDateEnd)&VAL_NM_RQ=';
set vVALID='R01235';

TmpRate:
LOAD Date,
    Id,
    Nominal,
    Value
FROM [$(vURLHist)$(vVALID)] (XmlSimple, Table is [ValCurs/Record]);

MinMaxDate:
Load Min(Date) as MinDate, Max(Date) as MaxDate resident TmpRate;
Let vMinDate = Peek('MinDate',-1,'MinMaxDate')-1;
Let vMaxDate = Peek('MaxDate',-1,'MinMaxDate');
Drop Table MinMaxDate;
Join (TmpRate) Load Date(recno()+$(vMinDate)) as Date Autogenerate vMaxDate - vMinDate;

Rates:
NoConcatenate Load Date,
If(IsNull(Id), Peek(Id), Id) as Id,
If(IsNull(Nominal), Peek(Nominal), Nominal) as Nominal,
if(IsNull(Value), Peek(Value), Value) as Value
Resident TmpRate
Order By Date ;
DROP Table TmpRate;

Работает в Qlikview и в QLIK SENSE (только в устаревшем режиме).

Роман

#3
Всем привет!
Я для ежедневного обновления курсов непосредственно с cbr.ru с накоплением данных в файле использовал следующий скрипт (правда, cbr.ru периодически меряет структуру страницы (есть строки в комментариях от 2015/10/05 например). Вытаскиваются USD и EUR.

PS В конце кода еще формирование строки с праздниками для функций вычисления интервалов дат.

temp_currency1:

load 'USD' as Currency_temp1,
@3 as ExchangeDate_temp1
FROM
[http://www.cbr.ru/]
//(html, utf8, no labels, table is @2)
//(html, utf8, no labels, table is @4) 2015/10/05
(html, utf8, no labels, table is @3)
where len(trim(@1))=0;

left join

load 'USD' as Currency_temp1,
replace(mid(trim(@3),index(trim(@3),chr(32))+2),',','.') as ExchangeRate_temp1
FROM
[http://www.cbr.ru/]
//(html, utf8, no labels, table is @2)
//(html, utf8, no labels, table is @4) 2015/10/05
(html, utf8, no labels, table is @3)
where replace(lower(@1),'доллар','')<>lower(@1);

temp_currency2:

load 'EUR' as Currency_temp2,
@3 as ExchangeDate_temp2
FROM
[http://www.cbr.ru/]
//(html, utf8, no labels, table is @2)
//(html, utf8, no labels, table is @4) 2015/10/05
(html, utf8, no labels, table is @3)
where len(trim(@1))=0;

left join

load 'EUR' as Currency_temp2,
replace(mid(trim(@3),index(trim(@3),chr(32))+2),',','.') as ExchangeRate_temp2
FROM
[http://www.cbr.ru/]
//(html, utf8, no labels, table is @2)
//(html, utf8, no labels, table is @4) 2015/10/05
(html, utf8, no labels, table is @3)
where replace(lower(@1),'евро','')<>lower(@1);

ExchangeRates_tmp:

load Currency_temp1 as Currency_tmp,
ExchangeDate_temp1 as ExchangeDate_tmp,
ExchangeRate_temp1 as ExchangeRate_tmp
resident temp_currency1;

concatenate

load Currency_temp2 as Currency_tmp,
ExchangeDate_temp2 as ExchangeDate_tmp,
ExchangeRate_temp2 as ExchangeRate_tmp
resident temp_currency2;

drop table temp_currency1;
drop table temp_currency2;

let vExchangeRatesFileName2 = 'ExchangeRates_history_'& replace(replace(timestamp(now(), 'YYYY.MM.DD_hh:mm:ss'),':',''),'.','')&'.csv';
store ExchangeRates_tmp into $(vExchangeRatesFileName2) /*ExchangeRates_history2.qvd*/ (txt, delimiter is '\t'); ;

drop table ExchangeRates_tmp;

ExchangeRates_History_tmp:
load * inline [
Currency_tmp, ExchangeDate_tmp, ExchangeRate_tmp
];

FOR Each File in filelist ('ExchangeRates_history_*_*.csv')//(Root&' \*.' &Ext)

ExchangeRates_History_tmp:
add LOAD
Currency_tmp,
    date(ExchangeDate_tmp) as ExchangeDate_tmp,
    ExchangeRate_tmp
FROM
'$(File)'
(txt, utf8, embedded labels, delimiter is '\t', msq);
NEXT File

ExchangeRatesHistory:
load distinct
Currency_tmp as Currency,
    ExchangeDate_tmp as ExchangeDate,
    ExchangeRate_tmp as ExchangeRate
resident ExchangeRates_History_tmp;

drop table ExchangeRates_History_tmp;

FOR Each File in filelist ('ExchangeRates_history_*_*.csv')//(Root&' \*.' &Ext)
execute cmd.exe /c del "$(File)";
NEXT File

let vExchangeRatesFileName2 = 'ExchangeRates_history_'& replace(replace(timestamp(now(), 'YYYY.MM.DD_hh:mm:ss'),':',''),'.','')&'.csv';

store Currency as Currency_tmp,
    ExchangeDate as ExchangeDate_tmp,
    ExchangeRate as ExchangeRate_tmp from ExchangeRatesHistory into $(vExchangeRatesFileName2) /*ExchangeRates_history2.qvd*/ (txt, delimiter is '\t');

Holidays:
LOAD Holidays as HolidayDate
FROM
[holidays.xlsx]
(ooxml, embedded labels, table is Sheet1);

let vHolidays='';

FOR i=0 to NoOfRows('Holidays')-1
vHolidays = vHolidays & ' ' & chr(39) & peek('HolidayDate',$(i),'SumData') & chr(39) & ',';
NEXT i
vHolidays = left(vHolidays,len(vHolidays)-1);



admin

Привет, отлично  :)
Qlikview прекрасно отрабатывает сайты с таблицами, да и не только с ними. Можно по тегам искать данные.
Есть минус - частая смена дизайна на некоторых сайтах, но не критично  :)

Сергей_

Здравствуйте!
большое спасибо за скрипт. очень помог.
К сожалению со вчера перестал работать. Видимо опять что-то поменяли, а я не могу сообразить как модифицировать скрипт и как определяются эти "@1"-"@4".
Можете обновить?

Яндекс.Метрика