Парсинг валют

Автор kolob204, 21 декабря 2018, 17:41

0 Пользователи и 1 гость просматривают эту тему.

kolob204


Доброго дня, дорогие программисты  O0

Начну с того, что скажуследующее - написал парсер на Delphi, который записывает мне курсы в документ CALC.
Если кому то такое надо - могу дать хоть исходники, хоть готовый exe, и даже могу поправить его под ваши нужды и удобство.

Но мне хочется макрос, чтобы не открывать  лишнюю программу для моей задачи.
Возможно ли это?

Нашёл в гугле макрос для EXCEL (он частично уже переделан, так что не ломайте голову над этим, а именно то место где определяется текущая активная ячейка)

REM  *****  BASIC  *****

Sub Get_USD_BIRGA()
    Dim sURI As String
        Dim oHttp As Object
        Dim htmlcode, outstr As String
    Dim oSheet As Object
  Dim oCell As Object
  Dim oCursor As Object
  Dim aAddress As Variant
           
        sURI = "http://www.forexpf.ru/chart/usdrub/"
        On Error Resume Next
        Set oHttp = CreateObject("MSXML2.XMLHTTP")
        If Err.Number <> 0 Then
            Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
        End If
        On Error GoTo 0
        If oHttp Is Nothing Then
            Exit Sub
    End If
        oHttp.Open "GET", sURI, False
   rem     oHttp.Send()
   rem     htmlcode = oHttp.responseText
   rem     outstr = Mid(htmlcode, InStr(1, htmlcode, "Курс доллара к рублю (USDRUB)") + 44, 6) 'для курса Bid значение 44. Для курса Ask изменить на 61
        Set oHttp = Nothing
         
        outstr = Replace(outstr, ",", ".")
        Doc = ThisComponent
        oSheet = Doc.getCurrentController().ActiveSheet
        oCellRange    = ThisComponent.getCurrentSelection()
        Cell = oCellRange.getCellByPosition(0,0)
        Cell.String = outstr
    End Sub


но не знаю как переделать вот эти строки(они не работают в SCALC)

      oHttp.Send()
      htmlcode = oHttp.responseText
      outstr = Mid(htmlcode, InStr(1, htmlcode, "Курс доллара к рублю (USDRUB)") + 44, 6) 'для курса Bid значение 44. Для курса Ask изменить на 61

если это вообще возможно.

На англоязычных форумах вроде говорят что макросом этого не сделать.
Но как то можно JAVA прикрутить чтоли, я не совсем понял (переводил без переводчика, как мог...)

у ЦБРФ есть такие ссылки:
курсы в формате JSON
https://www.cbr-xml-daily.ru/daily_json.js
https://www.cbr-xml-daily.ru//archive//2018//12//21//daily_json.js

XML
https://www.cbr-xml-daily.ru/daily.xml
https://www.cbr-xml-daily.ru/daily_utf8.xml

может у кого то есть готовое решение?

PS
кнопку к макросом могу связать :-)

JohnSUN

Так ты с Forex'а хочешь брать или ЦБРФ достаточно? В смысле, постоянно мониторить курс или раз в день цифру всосал и хватит?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kolob204

Цитата: JohnSUN от 21 декабря 2018, 18:35брать или ЦБРФ достаточно? В смысле, постоянно мониторить курс или раз в день цифру всосал и хв

раз в день хватит. график не нужно строить....
это просто ссылка форекса была в Экселевском примере....

JohnSUN

Знаешь, я тебе сейчас один умный вещь скажу - только ты не обижайся!
Никогда не понимал XML-формат, не любил его. И если приходилось с ним сталкиваться (например, восстанавливать испорченный ODS) - то старался смотреть на него как на просто сильно замусоренный какими-то угловыми скобочками текст... И раз уж это просто текст, то когда прочитал твой вопрос, решил, что простейшим способом решить твою задачу будет тупо открыть одну из твоих ссылок как текстовый файл. Всё равно ведь твой макрос использует
Mid(htmlcode, InStr(1, htmlcode, "Курс доллара к рублю (USDRUB)")
Так какая ему разница, каким именно образом мы этот текст получим?

И, наверное, на полном серьёзе рекомендовал бы именно такой способ... если бы не вот эта статья в Вики (длинная, оченьмногабукав  ;D )

Попробовал. Скачал. Установил. Одну из твоих XML-ссылок открыл. Открыл как просто файл, открыл как "Вставить лист из файла" - работает, и работает шустро. Так, может быть, ну его, этот макрос?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kolob204

Цитата: JohnSUN от 21 декабря 2018, 19:22к просто файл, открыл как "Вс
насчёт того - как именно получится результат, через текст или через XML - мне не очень важно :-)

попробовал, скачал. открыл.
Я только не понял, это нельзя открывать в той же книге - которая мне нужна , на соседнем листе?
потому что открывается новое окно, как новый файл... а мне надо связать эти курсы с математическими формулами в моей рабочей книге.

И я хотел чтобы обновлялось хотя бы по кнопке, к которой я бы привязал "команду"-"получить курсы".
а такой способ ничем не короче - чем запустить мою программу на делфи с спарсить- то что мне надо.

но если ну макрос, подскажите где попробовать почитать - чтобы научиться уму разуму, только не скидывайте ссылку на Содержание типа "ВСЁ об OPEN OFFICE" )))
хотя бы на главу какую то...типа функции для работы с WEB...

JohnSUN

Цитата: kolob204 от 21 декабря 2018, 19:47
это нельзя открывать в той же книге - которая мне нужна , на соседнем листе?
Можно. Смотри образец - я картинки прямо туда воткнул
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kolob204

Цитата: JohnSUN от 21 декабря 2018, 20:06https://www.cbr-xml-daily.ru/daily.xml

извиняюсь, я сначала не понял, что это за чудо-юдо команда - "Вставить лист из файла"
нашёл. понял. ок, спасибо, сойдёт. если вдруг ещё что "изображу" на эту тему - добавлю сюда, может кому сгодиться :-)

С пятницей вас и хорошего настроения! :-)

JohnSUN

Да, если вдруг все-таки захочешь кнопку нарисовать для обновления (ну, чтобы каждый раз в Правка-Связи-Обновить не лазить), то макрос понадобится. Но это не сложно, во всяком случае проще, чем то, что ты цитировал в первом сообщении:
ThisComponent.SheetLinks.getByName("https://www.cbr-xml-daily.ru/daily.xml").refresh()С наступающими!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kolob204

Цитата: JohnSUN от 21 декабря 2018, 20:32
Да, если вдруг все-таки захочешь кнопку нарисовать для обновления (ну, чтобы каждый раз в Правка-Связи-Обновить не лазить), то макрос понадобится. Но это не сложно, во всяком случае проще, чем то, что ты цитировал в первом сообщении:
ThisComponent.SheetLinks.getByName("https://www.cbr-xml-daily.ru/daily.xml").refresh()С наступающими!

крутотень!
куда вам Новогодний подарок отправить?  помогаете уже не в первой теме :-)

kompilainenn

Цитата: kolob204 от 21 декабря 2018, 20:43куда вам Новогодний подарок отправить?  помогаете уже не в первой теме :-)
в подписи у него варианты расписаны
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

kolob204

Цитата: kompilainenn от 21 декабря 2018, 20:49
Цитата: kolob204 от 21 декабря 2018, 20:43куда вам Новогодний подарок отправить?  помогаете уже не в первой теме :-)
в подписи у него варианты расписаны

не люблю, когда на "приватные" сообщения отвечают другие.
Если хотите сказать - что приватные нужно писать в приват - отвечу, что хотел показать читателям форума, что Благодарить .... ну вообщем там, же в подписи. :-)

а про попытку перевода вот что говорят мне (см рисунок)  (уже пробовал в прошлый раз, но не стал спрашивать )
простите, но я из России :-)

варианты? :)

rami

Цитата: JohnSUN от 21 декабря 2018, 19:22Никогда не понимал XML-формат, не любил его.
Я тоже не люблю этот формат и не понимаю зачем его так напичкали хламом. Но иногда нужно его распарсить.

В примере парсит три столбца для всех валют, но можно сделать вывод любых нужных строк и столбцов:

kompilainenn

Цитата: kolob204 от 21 декабря 2018, 21:02а про попытку перевода вот что говорят мне (см рисунок)  (уже пробовал в прошлый раз, но не стал спрашивать )
простите, но я из России :-)
можете перевести на "наш ресурс", владелец ресурса и Джон договорятся, я вас уверяю
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут