Уважаемые коллеги! Помогите, пожалуйста, решить следующую задачу: Необходимо с торговой площадки ЭТП ГПБ вытащить данные по ценовым запросам поставщиков с помощью PQ. Там есть API, которое позволяет работать с JSON. https://etpgpb.ru/files/api_documentation_cz.docx?ver=0
вот такой запрос позволяет вытащить 1 страницу данных со списком предложений:
Доброе время суток. Ну, выдернуть данные по первому запросу для всех страниц, начиная с первой, пока есть отдача, можно так
Код
let
baseUrl = "https://etp.gpb.ru/nsi/kimapi/publicpriceorderlist?limit=1000&page=",
existed = List.Generate(
() => [pageId = 1, url = baseUrl & Text.From(pageId), data = Json.Document(Web.Contents(url))[entries]],
each List.Count([data]) > 0,
each [pageId = [pageId] + 1, url = baseUrl & Text.From(pageId), data = Json.Document(Web.Contents(url))[entries]],
each [data]
),
toTable = Table.FromRecords(List.Combine(existed))
in
toTable
Только, например, id = 230295, в этих данных нет. Соответственно,
Цитата
Ezoptron написал: вытащить все данные по всем ИДшникам
требует детализации - что это? Ну, а по второму вопросу, несмотря на
Цитата
2.6. Один вопрос - одна тема. Не следует в открываемой теме обозначать и задавать сразу несколько вопросов.
Получив первым запросом номера Id на страницах просто подставляете, как и в коде выше, их в запрос 2 и получаете данные, потом только несколько простых трансформаций.
Андрей VG, почему-то по вашему запросу выгружается только 11 страниц, а их там 19 на данный момент. А как подставить несколько ИДшников в один запрос? Вопрос-то один...в идеале хотелось бы получить одну большую простыню, где оба запроса, приведенных мной в качестве примера, будут связаны воедино по ИДшнику.
Я не смотрел это там, да и где тот там не знаю. Поставьте limit=4 и будет у вас 116 страниц Ну, и записей в итоге станет больше - 464, вместо 275. Почему - вопрос не ко мне, а к авторам API.
приблизительно то, что нужно по одному ИДшнику, получается вот таким запросом из рекордера, но он какой-то монструозный
Код
let
Источник = Json.Document(Web.Contents("https://etp.gpb.ru/nsi/kimapi/publicpriceorderinfo?id=" & "230940")),
#"Преобразовано в таблицу" = Record.ToTable(Источник),
#"Транспонированная таблица" = Table.Transpose(#"Преобразовано в таблицу"),
#"Повышенные заголовки" = Table.PromoteHeaders(#"Транспонированная таблица", [PromoteAllScalars=true]),
#"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"id", Int64.Type}, {"title", type text}, {"status", Int64.Type}, {"date_sent", type datetimezone}, {"date_delivery", type date}, {"date_response", type datetimezone}, {"delivery_conditions", type text}, {"delivery_address", type text}, {"use_price_without_nds", type logical}, {"max_price_type", Int64.Type}, {"for_small_business", type logical}, {"for_producer", type logical}, {"for_authorized_dealer", type logical}, {"russian_production", type logical}, {"national_project", type logical}, {"deny_alternative", type logical}, {"allow_edo", type logical}, {"customer_comment", type any}, {"customer_name", type text}, {"customer_inn", type number}, {"customer_kpp", Int64.Type}, {"customer_documents", type any}, {"positions", type any}, {"regions", type any}}),
#"Развернутый элемент positions" = Table.ExpandListColumn(#"Измененный тип", "positions"),
#"Развернутый элемент positions1" = Table.ExpandRecordColumn(#"Развернутый элемент positions", "positions", {"position_name", "quantity", "okei_code", "okei_name", "id", "max_price", "okpd2_name", "okpd2_code", "max_cost", "documents"}, {"positions.position_name", "positions.quantity", "positions.okei_code", "positions.okei_name", "positions.id", "positions.max_price", "positions.okpd2_name", "positions.okpd2_code", "positions.max_cost", "positions.documents"}),
#"Развернутый элемент positions.documents" = Table.ExpandListColumn(#"Развернутый элемент positions1", "positions.documents"),
#"Развернутый элемент regions" = Table.ExpandListColumn(#"Развернутый элемент positions.documents", "regions"),
#"Развернутый элемент regions1" = Table.ExpandRecordColumn(#"Развернутый элемент regions", "regions", {"code", "name"}, {"regions.code", "regions.name"})
in
#"Развернутый элемент regions1"