Уважаемые форумчане, приветствую! Прошу помощи в решении возникшей трудности при парсинге посредством Power Query. С сайта-источнике отдача происходит по 100 строк на странице, максимум 20 страниц (максимум 2000 строк). Но бывает, что в источнике страниц меньше, чем фиксированного в Power Query. В этом случае возникает ошибка. Изучил у предложенный им "API в Power Query часть 2: пагинация", попробовал перенести на свою задачу, но не получил требуемого результата. Код выводит в итог запроса только первые 100 строк, а на 101 строке во всех столбцах фиксирует ошибку. Если кто-то сможет помочь в решении данной задачи, буду крайне благодарен. При текущем указанном url в источнике содержится в районе 450 строк.
| Код |
|---|
let
url = "https://api.hh.ru/vacancies?text=агроном",
parameters = [
per_page = "100"
],
getPage = ( optional page ) => let
response = Web.Contents(url, [
Query = parameters & [ page = Text.From( page ?? 0 ) ], //as record
// page ?? 0 === if page = null then 0 else page
ManualStatusHandling = { 400, 403, 406, 409 }
]),
metadata = Value.Metadata(response),
buffer = Binary.Buffer( response ),
status = metadata[Response.Status],
json = try Json.Document( buffer ),
result = if not json[HasError] and status >=200 and status < 300
then json[Value][items]
else error Error.Record(json[Value][error],json[Value][description],json[Value][message])
in result,
getNextPage = ( previousPage ) => let
metadata = Value.Metadata( previousPage ),
page = metadata[page],
nextPage = Function.InvokeAfter( () => getPage( page + 1 ), #duration(0,0,0,1/5) )
in nextPage,
pages = List.Generate(
() => getPage(),
each _ <> {},
each getNextPage ( _ )
),
result = Table.FromRecords( List.Combine( pages ) )
in
result |