Блог Effema
Power BI

Подключение по API

API (англ. application programming interface) – программный интерфейс приложения, с помощью которого одна компьютерная программа может взаимодействовать с другой программой.

Другими словами, с помощью API мы можем из Power BI “стучаться” в сторонние сервисы (если у них такой способ взаимодействия предусмотрен) и с помощью определённым образом сформулированных запросов брать нужные данные и загружать их в Power BI.

Часто для подключения к сервису по API сначала нужно внутри самого сервиса произвести некоторые настройки - например, сгенерировать ключ доступа (access token). Иногда нужно ещё посмотреть внутри самого сервиса некоторые другие данные для подключения.

Разберём пример получения данных через API с портала открытых данных РФ https://data.gov.ru/

Этап 1. Настраиваем доступ в аккаунте на портале открытых данных.

  1. Для начала нужно зарегистрироваться на портале и войти в аккаунт. 



2. На главной странице сверху выбираем “Сервисы” → “Разработчикам”


3. На странице “Разработчикам” (https://data.gov.ru/razrabotchikam) выбираем кнопку “API”:


4. Читаем “Правила и рекомендации” и переходим к получению ключа (access_token) к API по кнопке:


5. Проходим тест, выбираем “Сгенерировать ключ”, получаем сгенерированный ключ:

Сгенерированный ключ появится также в вашем личном кабинете.

6. Полученный ключ (access_token) необходим для использования API. Ключ необходимо прописывать в конце запроса в следующем виде: /?access_token=ваш ключ. Например, для получения списка датасетов полный запрос будет выглядеть следующим образом: http://data.gov.ru/api/dataset/?access_token=ваш ключ

Этап 2. Создаём запрос.

В качестве набора открытых данных рассмотрим Производственный календарь, сам набор можно найти по ссылке: https://data.gov.ru/opendata/7708660670-proizvcalendar. Загрузка этого производственного календаря из .csv есть в этой (ссылка) и в этой (ссылка) статьях.

Для понимания написанного кода рекомендуем изучить краткое руководство по работе с API, назначение и структуру запросов (https://data.gov.ru/pravila-i-rekomendacii). 

Нам нужно получить содержимое файла версии набора открытых данных. Структура запроса выглядит следующим образом: 

/api/<format>/dataset/<dataset>/version/<version>/content


Подразумевается, что в начале запроса необходимо подставить адрес ресурса: 

https://data.gov.ru


Получится вот такая ссылка:

https://data.gov.ru/api/<format>/dataset/<dataset>/version/<version>/content 


А вместе с приписанным токеном вот так:

https://data.gov.ru/api/<format>/dataset/<dataset>/version/<version>/content/?access_token=<ваш ключ>


Кроме того все части запроса в угловых скобках - переменные, зависящие от того, что и как мы собираемся выгружать:
<ваш ключ> – токен, который мы сгенерировали на первом этапе.
<dataset> – уникальное название набора данных, представленное в формате “0000000000-namedataset”.
<version> – версия определенного набора данных, содержащая дату последней версии. Обычно представлена в формате “00000000T0000”.
<format> – формат вывода результатов запроса. API предлагает несколько форматов вывода результатов запроса. На данный момент поддерживаются следующие форматы:
  • JSON – в строке запроса используется название в нижнем регистре «json» (им и воспользуемся)
  • XML – в строке запроса используется название в нижнем регистре «xml»

Откроем паспорт набора на портале https://data.gov.ru/opendata/7708660670-proizvcalendar и найдём там version и format:



Вставив все элементы в запрос, получим следующее:

https://data.gov.ru/api/json/dataset/7708660670-proizvcalendar/version/20191112T1252/content/?access_token=d8...5d


Этап 3. А теперь – самое интересное. Посмотрим, как это работает – загрузим данные в Power BI через API.

  1. Создаём запрос к Интернет-ресурсу:



2. В появившемся диалоге вставляем сформированный запрос в поле URL:


3. Получаем результат выполнения запроса:


Готово! Перед нами Производственный календарь, полученный через API. 

Как обрабатывать эту нестандартную таблицу, мы описали тут и тут

Ряд действий по обработке данных Power Query включил в перечень шагов автоматически. Если мы откроем расширенный редактор, то увидим там вот такой код:

let
    Источник = Json.Document(Web.Contents("http://data.gov.ru/api/json/dataset/7708660670-proizvcalendar/version/20191112T1252/content/?access_token=d8...5d")),
    #"Преобразовано в таблицу" = Table.FromList(Источник, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Развернутый элемент Column1" = Table.ExpandRecordColumn(#"Преобразовано в таблицу", "Column1", {"Год/Месяц", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь", "Всего рабочих дней", "Всего праздничных и выходных дней", "Количество рабочих часов при 40-часовой рабочей неделе", "Количество рабочих часов при 36-часовой рабочей неделе", "Количество рабочих часов при 24-часовой рабочей неделе"}, {"Год/Месяц", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь", "Всего рабочих дней", "Всего праздничных и выходных дней", "Количество рабочих часов при 40-часовой рабочей неделе", "Количество рабочих часов при 36-часовой рабочей неделе", "Количество рабочих часов при 24-часовой рабочей неделе"}),
    #"Измененный тип" = Table.TransformColumnTypes(#"Развернутый элемент Column1",{{"Год/Месяц", Int64.Type}, {"Январь", type text}, {"Февраль", type text}, {"Март", type text}, {"Апрель", type text}, {"Май", type text}, {"Июнь", type text}, {"Июль", type text}, {"Август", type text}, {"Сентябрь", type text}, {"Октябрь", type text}, {"Ноябрь", type text}, {"Декабрь", type text}, {"Всего рабочих дней", Int64.Type}, {"Всего праздничных и выходных дней", Int64.Type}, {"Количество рабочих часов при 40-часовой рабочей неделе", Int64.Type}, {"Количество рабочих часов при 36-часовой рабочей неделе", type text}, {"Количество рабочих часов при 24-часовой рабочей неделе", type text}})
in
    #"Измененный тип"

Интересно рассмотреть детальнее, что делает автоматически добавленный код? Или у вас есть ещё вопросы по работе с API? Оставляйте вопросы в комментариях к статье и следите за нашим блогом! ;)

Comments powered by Agentima