10.12.2010, 09:11 | #1 |
Участник
|
Загрузка курсов валют с сайта НБУ
Всем привет!
Кто-нибудь сталкивался с импортом валют с сайта ЦБ Украины (НБУ)? В принципе есть сама ссылка на сайт откуда качать "http://fin.1c.ua" но как запрос сформировать, мне не понятно. Пробовал сделать по аналогии загрузки курсов с сайта ЦБ России, не получилось. |
|
10.12.2010, 15:33 | #2 |
Участник
|
В прикрепленном файле часть нашей процедуры загрузки курсов валют (к нас загрузка идет по нескольким странам, в классе то, что касается именно НБУ).
Это не полный функционал нашего механизма загрузки, но по нему можно понять как идет загрузка с www.bank.gov.ua Вкратце: читаем страничку сайта и парсим её (в вызывающих классах идет разбор результатов, приводить их не буду). Можете что-то на основе этого реализовать свое. Загружать нужно после 19-00 по Московскому времени курсы на следующий день. Следует учесть, что на Российском ЦБ в пятницу курс устанавливается на субботу и действует в субботу, воскресенье, понедельник. ЦБУ же в пятницу (после закрытия торгов) устанавливает курс на понедельник, поэтому на субботу и воскресенье действует курс пятницы. |
|
10.12.2010, 17:54 | #3 |
Участник
|
Спасибо. Посмотрю на выходных. Думаю можно будет что-то придумать, в любом случае на клиенте еще и Proxy лочит коннект к сайту.
|
|
10.12.2010, 18:11 | #4 |
Участник
|
Ну прокси можно настроить. А насчет клиента, хорошее замечание. Данный класс будет работать только на клиенте. Возможно, winInet.internetOpenUrl можно настроить на работу на сервере, но нам это не удалось (для России, Беларусии загрузка из XML спокойно работает на сервере, а вот для HTTP работа на сервере нам не удалась).
|
|
10.12.2010, 22:24 | #5 |
Участник
|
Слушай, а можно поподробней. Я имел в виду (клиента) это компания на которую я сейчас работаю. У них админы не могут дать права службе (NETWORK_SERVICE). Я пытаюсь добиться от них этого путем убеждения, что в тупую прописать адреса на доступ к инету для админа (исключения на Proxy при передаче IP) - недостаточно. Они же утверждают, что доступ к интернету из терминала есть у всех пользователей, но не у всех служб.
Теперь, ты пишешь, что "winInet.internetOpenUrl можно настроить на работу на сервере, но нам это не удалось (для России, Беларусии загрузка из XML спокойно работает на сервере, а вот для HTTP работа на сервере нам не удалась)." Что такое winInet.internetOpenUrl? И что такое настройки для HTTP, и почему настройки на сервере у Вас не получились? Походу я чего-то не понимаю. |
|
11.12.2010, 19:38 | #6 |
Участник
|
Не ты один, я тоже не понимаю. В админских делах я полный профан.
Единственное, знаю, что разрешения давались не на конкретный логин, а на машины. То есть, для всех серверов AOS, с которых нужен был выход за курсами валют и списками банков, был дан доступ на определенные сайты. Так же, был дан доступ для машины, на которой крутится пакетный сервер (у нас DAX4, поэтому пакетник работает в клиенте). Как это было сделано не имею ни малейшего представления, нужно спрашивать админов. В любом случая, я знаю, что доступ давался не пользователям, а машинам. |
|
13.12.2010, 01:14 | #7 |
Участник
|
ОК.
В любом случае, огромное спасибо! |
|
13.12.2010, 11:45 | #8 |
Участник
|
Сайт http://fin.1c.ua не работает, ну или не так как мне это надо.
Есть украинский сайт, который предоставляет информацию о курсах валют с сайта НБУ в xml формате. Собственно сам сайт: http://pfsoft.com.ua/services/kursy-...bu/export.html Параметры запроса: http://www.pfsoft.com.ua/service/currency/?date=%1, где %1 - дата в формате дд:мм:гггг без разделителей (например 10122010). Пробовал разобраться с парсингом сайта в HTML, но это долгий вариант и мне не совсем подходит, да и класса WinInet в АХ2009 я не нашел. Зато нашел, как это делается через .Net. Вот ссылка на статью, в которой рассказывается, как считать сайт в HTML формате. Надеюсь, кому-нибудь пригодится. |
|
13.12.2010, 13:17 | #9 |
Участник
|
Цитата:
Только, во первых, это неофициальный сайт. А во вторых, нужно учесть, что информация на нем появляется позже, чем на сайте НБУ (на НБУ всегда около 19-00 Московского времени есть данные на следующий день, а на Pfsoft несколько раз бывало, что курсы появляются только утром нужного дня). |
|
14.12.2010, 13:23 | #10 |
Участник
|
Можно использовать такой вариант.
Курсы забираются с www.bank.gov.ua через объект XMLHTTP. На выходе получаем контейнер с курсами валют (данные соответствуют таблице на странице с курсами) Метод работает как на клиенте, так и на сервере. Настройки для прокси берутся из IE, так что, в случае необходимости, надо будет настроить его для пользователя, под которым запускается AOS X++: static server container GetExchRate(TransDate _exchDate = systemDateGet()) { Com xmlhttp; InteropPermission InteropPermission; TextBuffer tb = new TextBuffer(); container rows; void GetRows(str _class) { int pos; str s; int pos1; int len; int posRowStart; int posRowEnd; container row; TextBuffer tbRow = new TextBuffer(); ; while (tb.find(strfmt(@'\<tr class="%1"', _class), pos)) { pos1 = tb.matchPos(); len = tb.matchLen(); if (tb.find(@"\<td", pos1)) { posRowStart = tb.matchPos(); if (tb.find(@"\</tr\>", posRowStart)) { posRowEnd = tb.matchPos(); s = tb.subStr(posRowStart, posRowEnd - posRowStart); s = StrReplace(s, '\r\n', ""); s = StrReplace(s, '\t', ""); tbRow.setText(s); pos1 = 1; row = connull(); while (tbRow.find(@'\>[^\<]*\</td\>', pos1)) { s = tbRow.subStr(tbRow.matchPos()+1, tbRow.matchLen()-6); row += [s]; pos1 = tbRow.matchPos()+tbRow.matchLen(); } rows += [row]; pos = tb.matchPos() + tb.matchLen(); } else pos = pos1+len; } else pos = pos1+len; } } ; InteropPermission = new InteropPermission(InteropKind::ComInterop); InteropPermission.assert(); xmlhttp = new Com(@"Msxml2.XMLHTTP.3.0"); xmlhttp.open(@"GET", strfmt(@"http://www.bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx?Text1=%1&__EVENTTARGET=Gr1", date2str(_exchDate, 123, 2, 2, 2, 2, 4)), false); xmlhttp.setRequestHeader(@"Accept", @"*/*"); xmlhttp.setRequestHeader(@"Accept-Language", @"ru-RU"); xmlhttp.setRequestHeader(@"User-Agent", @"Axapta"); xmlhttp.setRequestHeader(@"Connection", @"Keep-Alive"); xmlhttp.setRequestHeader(@"Content-Type", @"application/x-www-form-urlencoded"); xmlhttp.setRequestHeader(@"If-Modified-Since", @"Sat, 1 Jan 2000 00:00:00 GMT"); // Для отключения кэша xmlhttp.send(); if (xmlhttp.status() == 200) { tb.setText(xmlhttp.responseText()); GetRows(@"G1"); GetRows(@"w1"); } CodeAccessPermission::revertAssert(); return rows; }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: NeveB (1). |
14.12.2010, 13:36 | #11 |
Участник
|
Цитата:
При вызове ее на сервере требуется, при отсутствии прокси, передавать не пустую строку, а null, в качестве имени прокси-сервера В class declaration добавил X++: DLLFunction _internetOpenProxy; X++: ... _internetOpen = new DLLFunction(_winInet,'InternetOpenA'); _internetOpen.returns(ExtTypes::DWORD); _internetOpen.arg(ExtTypes::STRING); _internetOpen.arg(ExtTypes::DWORD); _internetOpen.arg(ExtTypes::DWORD); _internetOpen.arg(ExtTypes::DWORD); _internetOpen.arg(ExtTypes::DWORD); _internetOpenProxy = new DLLFunction(_winInet,'InternetOpenA'); _internetOpenProxy.returns(ExtTypes::DWORD); _internetOpenProxy.arg(ExtTypes::STRING); _internetOpenProxy.arg(ExtTypes::DWORD); _internetOpenProxy.arg(ExtTypes::STRING); _internetOpenProxy.arg(ExtTypes::STRING); _internetOpenProxy.arg(ExtTypes::DWORD); ... _handle = this.internetOpen('Axapta',0,_proxy,_bypassProxy,0); X++: int internetOpen(str 255 agent,int accessType,str 255 proxyName,str 255 proxyByPass,int flags) { ; if (!proxyName) return _internetOpen.call(agent,accessType,0,0,flags); else return _internetOpenProxy.call(agent,accessType,proxyName,proxyByPass,flags); }
__________________
Axapta v.3.0 sp5 kr2 |
|
20.05.2011, 18:44 | #12 |
Участник
|
Цитата:
не подскажете как сделать так чтобы можно было загружать помесячные ? |
|
14.04.2013, 19:13 | #13 |
Участник
|
Импорт курсов валют с сайта НБУ
Здесь есть готовая UDF функция для импорта курсов валют с сайта НБУ:
http://moonexcel.ho.ua/index.php?page=tip_kursNBU_ua |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Загрузка валют с сайта ЦБ | 31 | |||
Еще один импорт курсов валют | 24 | |||
Загрузка курсов валют | 5 | |||
загрузка валют с сайта ЦБ в Axapta 4.0 | 3 | |||
Кэширование курсов валют | 8 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|