Страницы: 1
RSS
Запросы в Power Query для получения инфо из Интернета, Импорт котировок с сайта МБ через Power Query
 
   Всем добрый день!

  Столкнулся со следующей проблемой при решении задачи импорта рыночных котировок по финансовым инструментам с сайта Московской Биржи (далее - МБ).

  У МБ есть информационный сервис ISS, в рамках которого они предоставляют шаблонные запросы (iss.moex.com). Их я и решил использовать для получения котировок.
  Но есть одна проблема - выгрузка строк лимитирована МБ (максимум - 100 строк), поэтому возникает необходимость создания дополнительного запроса в виде списка чисел, начинающихся с 1 с шагом 100 (Запрос 1). Естественно, не понимая, сколько строк содержится в выгрузке МБ (применив запрос 1 я выгружаю n кол-во раз последующие 100 строк), при попытке выгрузить запрос на лист Excel  я сталкиваюсь с ошибкой (попробуйте загрузить Запрос 1). Удаляя полученные ошибки, я не дополучаю пару строк (от 1 до 99).
  Я думаю, это связано с несовпадением числа строк по данным МБ и созданным мною списком в соответствии с Запросом 1.
Появилась идея - а что, если сделать список точь-в-точь совпадающий с числом строк по выгрузке МБ. В источнике запроса (CurrentQuotes_Shares) есть таблица history.cursor, в которой как раз указано максимальное число строк выгрузки от МБ. Но, увы, я не понимаю, как отредактировать мой Запрос 1 таким образом, чтобы он формировал числа с шагом 100 и достигнув максимального значения числа строк ( в соответствии с ячейкой из history.cursor) остановился именно на этом значении.
Более того,  т.к. мне нужно делать выгрузки как минимум по двум рынкам - акции и облигации, хотелось бы в Запросе 1 понять, как параметризировать данное условие (чтобы оно ссылалось на значений ячейки из history.cursor).

Всем заранее спасибо за помощь!
Файл с запросами прикрепляю.
 
Как-то так:
Код
let
    MAX_Strings_Shares = Number.From( Xml.Tables(Web.Contents("https://iss.moex.com/iss/history/engines/stock/markets/shares/securities.xml?date=2021-09-14&start=100")){0}[Table]{1}[rows]{0}[row]{0}[#"Attribute:TOTAL"] ),
    Источник = List.Numbers(1,Int64.From( MAX_Strings_Shares / 100 )+1,100),
    #"Преобразовано в таблицу" = Table.FromList(Источник, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Измененный тип" = Table.TransformColumnTypes(#"Преобразовано в таблицу",{{"Column1", type text}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Измененный тип", "Пользовательская", each Xml.Tables(Web.Contents("https://iss.moex.com/iss/history/engines/stock/markets/shares/securities.xml?date=2021-09-14&start="&[Column1])){0}[Table]{0}[rows]{0}[row])
in
    #"Добавлен пользовательский объект"
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Источник = List.Numbers(1,Int64.From( MAX_Strings_Shares / 100 )+1,100)
Так все равно список заканчивается на 601 строке, а в выгрузке МБ их 621..
 
VladNick, так эти строки у вас и выгружаются в последней таблице, вы их разверните и посчитайте, в чем проблема?
Вот горшок пустой, он предмет простой...
 
Благодарю!

Не туда смотрел. Все работает!
Спасибо большое!
 
Добрый день, подскажите такой вопрос.
Импортирую через PQ таблицу. Но на сайте от куда я ее импортирую она большая на 1500 строк, но открывается по 100 или по 50 строк. Чтоб открыть больше, необходимо нажать кнопку "показать еще" и подгружаются следующие 50 строк и тд.. Если открыть все 1500 строк и после этого импортировать таблицу, то все равно импортируется только первые 50 строк. Как быть? как решить задачу, чтоб импортировалась вся таблица в 1500 строк? Хелп плиз.
 
Кирилл Трима, сайт Вы конечно же не покажете
 
whateverlover, сорян)) подумал, что это не сильно важно...  https://coinmarketcap.com/exchanges/binance/  вот такой сайт. хочу в свою таблицу эту таблицу, но целиком. а у меня выходит только первые 100. я вообще хотел данные парсить вот с этой https://www.binance.com/en/trade/RVN_USDT?_from=markets&theme=dark&type=spot страницы, но не хватает мозга ((( может есть возможность подсказать?
 
Кирилл Трима, вариант
Код
let
    f = (num as number) as table =>
        [    url = "https://api.coinmarketcap.com/data-api/v3/exchange/market-pairs/latest?slug=binance&category=spot", //&start=101&limit=100",
            headers = [
                authority = "api.coinmarketcap.com",
                accept = "application/json, text/plain, */*",
                #"accept-language" = "en-US,en;q=0.9",
                #"cache-control" = "no-cache",
                origin = "https://coinmarketcap.com",
                platform = "web",
                referer = "https://coinmarketcap.com/",
                #"sec-ch-ua" = "^\^Chromium^^;v=^\^106^^, ^\^Google"
            ],
            parameters = [
                start=Text.From(num),
                limit="100"
            ],
            response = Web.Contents(url, [
                Query = parameters, //as record
                Headers = headers
            ]),
            json = Json.Document( response ),
            data = json[data],
            marketPairs = Table.FromRecords(data[marketPairs])
        ][marketPairs],
    lst = Table.FromList(List.Numbers(1,15,100), Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    combine = Table.Combine(Table.TransformColumns(lst,{{"Column1", each f(_)}})[Column1])
in
    combine
Страницы: 1
Наверх