Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

7 Декабрь 2021, 17:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Получение данных с Мосбиржи  (Прочитано 1108 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mak
Участник
**
Offline Offline

Сообщений: 6


« Стартовое сообщение: 26 Август 2021, 08:56 »

Добрый день,
Хочу сделать скрипты для вытягивания данных с Мосбиржи.
Может быть кто-то уже делал или знает где есть?
(чтобы свой велосипед не изобретать)
Записан
sokol92
Форумчанин
***
Online Online

Пол: Мужской
Сообщений: 625


WWW
« Ответ #1: 26 Август 2021, 12:36 »

Сначала нужно определиться, какой информационный продукт биржи Вы собираетесь использовать.
Записан

Владимир.
Mak
Участник
**
Offline Offline

Сообщений: 6


« Ответ #2: 26 Август 2021, 13:18 »

Интерфейс ISS
Описание - https://iss.moex.com/iss/reference/

Получение состава индекса Мосбиржи:
https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics/IMOEX.json?iss.meta=off&limitt=100

Запрос данных по нескольким бумагам, типа:
https://iss.moex.com/iss/securities/GMKN.json?iss.meta=off
https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.json?iss.meta=off&iss.only=securities
https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.json?iss.meta=off&iss.only=marketdata
https://iss.moex.com/iss/engines/stock/markets/shares/securities/GMKN/candles.json?iss.meta=off&iss.reverse=true&interval=4&from=2021-01-01
(json в запросах можно заменить на xml)

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

Цель - отслеживать состояние своего портфеля.

Можно это делать формулами в ячейках, но это неудобно, громоздко, и сайт Мосбиржи не любит, когда его сильно нагружают запросами. Поэтому хотелось бы это сделать в виде скриптов - несколько функций для вывода отдельных параметров бумаги, у функций параметр - тикер бумаги (типа "GMKN").
Записан
sokol92
Форумчанин
***
Online Online

Пол: Мужской
Сообщений: 625


WWW
« Ответ #3: 26 Август 2021, 15:24 »

Это, вероятно, к герпетологам. На форуме есть большие любители Python.  Улыбка
Записан

Владимир.
Mak
Участник
**
Offline Offline

Сообщений: 6


« Ответ #4: 26 Август 2021, 15:45 »

Хорошо,
а как хотя бы импортировать данные с сайта без скриптов, например такие
https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics/IMOEX.xml?iss.meta=off&limitt=100

Как-то можно вроде бы, но порылся по менюшкам и не нашел.
Записан
Mak
Участник
**
Offline Offline

Сообщений: 6


« Ответ #5: 26 Август 2021, 16:52 »

Похоже это слишком громоздкое решение.
Попробую формулами, только разделю загрузку с сайта и парсинг,
чтобы меньше запросов на сайт было.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 117


iMac, LibreOffice и Apache OpenOffice


« Ответ #6: 26 Август 2021, 18:05 »

Это, вероятно, к герпетологам. На форуме есть большие любители Python.  Улыбка
С помощью Basic можно делать почти что всё, а с Python всё остальное.


Данные с "причудами" (пробелы в именах), но обработать можно, смотрите:

* moex1.ods (11.29 Кб - загружено 12 раз.)
Записан

sokol92
Форумчанин
***
Online Online

Пол: Мужской
Сообщений: 625


WWW
« Ответ #7: 26 Август 2021, 21:00 »

@rami, здравствуйте, спасибо за содержательный пример.
XML можно обрабатывать и "честно". Улыбка
В условиях примера @rami:
Код:
Sub GetValuta2
  Dim xDoc, xRows, xAttribs, xAttrib, i As Long, j As Long
  xDoc=GetXDocByUri(URL)
 
  ' Разбираем XML стандартными средствами
  xRows=xDoc.getElementsByTagName("row")  ' список тегов row
  For i=0 To xRows.Length-1
    xAttribs=xRows.item(i).Attributes
    For j=0 To xAttribs.Length-1
      xAttrib=xAttribs.item(j)
      Select Case xAttrib.Name
        ' Обработка атрибутов как в функции GetValuta
        Case "tradedate"   ' получаем Дату. Значение: xAttrib.Value
        ' Обработка других атрибутов
      End Select
    Next j
  Next i
  ' Обработка XDoc завершена.
End Sub

' Returns XDocument by Uri
Function GetXDocByUri(ByVal Uri As String) As Object
  GetXDocByUri=createUnoService("com.sun.star.xml.dom.DocumentBuilder").parseURI(Uri)
End Function
Записан

Владимир.
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 117


iMac, LibreOffice и Apache OpenOffice


« Ответ #8: 27 Август 2021, 08:22 »

@sokol92, здравствуйте. Ваш вариант лучше подходит для работы с XML и для данного случая. Мой вариант более универсальный для любого текста.
Записан

economist
Форумчанин
***
Offline Offline

Сообщений: 1 568


« Ответ #9: 27 Август 2021, 09:55 »

У Мосбиржи есть API и обертка под Python https://pypi.org/project/apimoex/

Большие данные логично обрабатывать в Pandas и возвращать в Calc, тонны кода есть в Сети.

Pandas  дружится с LibreOffice Calc по данному мануалу: https://forumooo.ru/index.php/topic,8696.0.html
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Mak
Участник
**
Offline Offline

Сообщений: 6


« Ответ #10: 27 Август 2021, 10:57 »

Спасибо!
Почитаю, попробую разобраться.
Записан
Mak
Участник
**
Offline Offline

Сообщений: 6


« Ответ #11: 27 Август 2021, 14:59 »

Пока остановился просто на формулах, без скриптов.
Разделил обработку на две фазы - запрос данных с Мосбиржи и отдельно парсинг по полям.
Полей много, а запросов немного.

Если кому интересно будет, см. вложение.

* MOEX.ods (177.75 Кб - загружено 11 раз.)
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!