Страницы: 1
RSS
PQ. Передача токена API в http-заголовке., авторизоваться на сайте через ключ для получения данных.
 
Здравствуйте!

Прошу помочь с решением задачи.
Мне необходимо отправить запрос API (пример):
Код
https://api.timepad.ru/v1/events.json?limit=20&skip=0&cities=Москва,Санкт-Петербург&fields=location&sort=+starts_at

Описание: http://dev.timepad.ru/api/first-request/

Чтобы получить ответ, необходимо передать токен "в http-заголовке Authorization". Я так понимаю, что важно использовать подобное:
--header "Authorization: Bearer 2a0bb1047f0d2eb8ea5e84..........................."
Как сделать "Authorization: Bearer" - не пойму.

Описание: http://dev.timepad.ru/api/oauth/#access_token=87107eade7ee4ffc9fc3a73d262e7a3a439aaf19

Я написал следующий запрос:
Код
= Web.Contents("https://api.timepad.ru/v1/events", [ApiKeyName="Authorization"])
Возвращает: "Expression.Error: Доступ к ресурсу запрещен."
Токен корректный. Свежий.

Спасибо!
Скрытый текст


Прикладываю пример файла.Токен: 9bc70cd80a813be59f3ac16b4773f5021edb0bdc
Изменено: ivanka - 24.09.2020 21:21:29
 
Задачу решил.
Прикладываю скриншоты с решением.

Код получился следующим:
Код
Источник = Json.Document(Web.Contents("https://api.timepad.ru/v1/events", [Headers=[Authorization="Bearer 9bc70cd80a813be59f3ac16b4773f5021edb0bdc"]])),





 
Изменено: ivanka - 25.09.2020 08:53:58
 
Предполагаю, что должен быть способ, который позволит убрать Токен из кода. Чтобы его не светить.  
 
ivanka, можно получать его с сервера также запросом, и результат подставлять в ваше решение из поста №2
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
можно получать его с сервера также запросом, и результат подставлять в ваше решение из поста №2
Очень интересно. Получается он будет генериться каждый раз при обновлении данных? Это пожалуй ещё более высокий уровень. Я был бы рад просто убрать токен из кода. Можете подсказать как это реализовать?  
 
ivanka, это должно быть написано в документации API. Как вы получили токен, который опубликовали выше?
Изменено: PooHkrd - 25.09.2020 09:27:41
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Как вы получили токен, который опубликовали выше?
Зарегистрировался тут: https://timepad.ru/
Далее перешёл на страницу: http://dev.timepad.ru/api/oauth/#access_token=87107eade7ee4ffc9fc3a73d262e7a3a439aaf19
Необходимо спуститься вниз страницы, проставить галочки и жаться "Получить токен"
 
PooHkrd, я бы хотел убрать Token из кода запроса.
Применяю решение: https://blog.crossjoin.co.uk/2014/03/26/working-with-web-services-in-power-query/
Код
Web.Contents (
"https://www.regonline.com/api/default.asmx/GetEvents",
[
Query = [# "filter" = "", # "orderBy" = ""],
ApiKeyName = "APIToken"
 ])
Т.е. он выбрал другой способ авторизации.
Когда я реализую аналогичный сценарий:
Код
= Web.Contents("https://api.timepad.ru/v1/events", [ApiKeyName="Authorization"])
А ключ указываю в "Настройки источника данных" - "Править разрешения" - "Изменить" - "Веб-API"
Возвращает: "Expression.Error: Доступ к ресурсу запрещен."

Аналогичная ситуация описывается тут:

2015 г. https://ideas.powerbi.com/ideas/idea/?ideaid=961587c5-c872-41c1-8003-e8d3ee9c42df
2016 г. https://social.technet.microsoft.com/Forums/en-US/48eddbbd-e2c6-4cbe-bfb6-b7a542175fbc/webcontents-a...

Неужели уже 5 лет вопрос не решается?
Изменено: ivanka - 28.09.2020 11:58:07
 
Гипотеза:
1. Можно создать условие, которое будет вытягивать значение ключа API указанного в: "Настройки источника данных" - "Править разрешения" - "Изменить" - "Веб-API".
Что-то вроде: ApiKeyName = "APIkey".

Предположительная функция: Extension.CurrentCredential()[Key]

2. Создать запрос, который передаст ключ в заголовке, а не в URL:
Код
Источник = Json.Document(Web.Contents("https://api.timepad.ru/v1/events", [Headers=[Authorization="Bearer "& #APIkey]])),

Может быть у кого-нибудь есть идеи как реализовать первый пункт?
Изменено: ivanka - 28.09.2020 13:19:10
Страницы: 1
Наверх