Получение содержимого папки из Yandex Disk API 🔥
После добавления
коннектора к файлам Яндекс Диска для Power Query очень просили получение файлов из папки.
Как в PBI Service обновлять данные из папки без шлюза? 🫣
1) Грузим файлы в папку на Яндекс.Диск.
2) Обращаемся к API Яндекс.Диска с помощью функции ниже и получаем список доступных файлов.
3) На основе
коннектора к файлам пишем запрос по обработке типового файла и превращаем этот запрос в функцию от адреса файла.
Если сразу параметризуете адрес файла в запросе, можно быстро создать функцию, которая будет меняться при изменении запроса. Для этого просто жмём правой кнопкой на запрос с параметром и выбираем создать функцию.
4) Добавляем к списку файлов столбец с вызовом нашей функции от адреса файла и разворачиваем полученные таблицы.
Процесс показал на видео. Как итог - все файлы в папке обработаны одинаково, а при добавлении в папку похожих файлов их данные автоматом попадают в общую таблицу. При этом функцию обработки легко корректировать.
Где это работает?- Power BI Desktop
- Power BI Service
- Power BI Report Server
- Excel
Получение списка файлов из папки тут:let
function = (fileLink as text, token as text)=>
let
headers=[#"Content-Type" = "application/json", #"Authorization" = "OAuth "&token, #"Accept" = "application/json"],
querydata = [#"path" = Text.Replace(fileLink, "\","/"), limit="1000000"],
web = Web.Contents("https://cloud-api.yandex.net/", [RelativePath="v1/disk/resources", Headers = headers, ManualStatusHandling = {404, 400}, Query =querydata]),
result = Json.Document(web),
link = result[_embedded],
items = link[items],
toTable = Table.FromList(items, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expandColumn = Table.ExpandRecordColumn(toTable, "Column1", {"created", "modified", "size","path"}, {"created", "modified","size", "path"}),
pathCorrect = Table.ReplaceValue(expandColumn,"disk:/","",Replacer.ReplaceText,{"path"}),
chType = Table.TransformColumnTypes(pathCorrect,{{"created", type datetime}, {"modified", type datetime}, {"size", type number}})
in
chType,
result = Value.ReplaceType(function, FuncType),
FuncType = type function (fileLink as (type text meta [
Documentation.FieldCaption = "Путь к папке после C:\YandexDisk\:",
Documentation.SampleValues = {"Мои файлы\Лучшие файлы"}]),
token as (type text meta [
Documentation.FieldCaption = "Ваш токен (ссылка на получение ниже):",
Documentation.SampleValues = {"y0_AgAAAMfGA...rBX0d-ZpA5O"}]))
as table meta [
Documentation.Name = "Получаем список сущностей из папки Яндекс.Диска",
Documentation.LongDescription = "",
Documentation.Examples = {[ Description = "Ссылка на получение токена:",
Code = "https://oauth.yandex.ru/authorize?response_type=token&client_id=a363cf6712db45978a012820777fc06a",
Result = "По ссылке вы получите токен" ]}]
in result