Использование RSS-канала с помощью AWS Lambda и API Gateway

Я начинающий программист рельсов, и у меня еще меньше опыта работы со всеми продуктами AWS. Я пытаюсь использовать лямбду, чтобы подписаться и использовать RSS-канал с YouTube. Я могу отправить запрос на подписку с HTTParty из моего локально размещенного приложения rails:

query = {'hub.mode':'subscribe', 'hub.verify':'sync', 'hub.topic': 'https://www.youtube.com/feeds/videos.xml?channel_id=CHANNELID', 'hub.callback':'API Endpoint for Lambda'}
subscribe = 'HTTParty.post(https://pubsubhubbub.appspot.com/subscribe, :query=>query)

и он будет пинговать лямбда-функцию с запросом get. Я знаю, что мне нужно вернуть строку hub.challenge, но я не знаю как. Лямбда-событие пустое, я не увидел ничего полезного в контексте. Я попытался отформатировать ответ в шлюзе API, но это тоже не сработало. Поэтому прямо сейчас, когда я пытаюсь подписаться, я получаю сообщение об ошибке "Несовпадение по запросу".

Я знаю это: https://pubsubhubbub.googlecode.come/git/pubsubhubbub-core-0.3.html объясняет, что я пытаюсь сделать лучше, чем я только что сделал, и в разделе 6.2.1, где разбивка, Как настроить функцию AWS Lambda и / или шлюз API для отображения строки токена проверки hub.challenge?

1 ответ

Решение

Вам необходимо использовать функцию сопоставления параметров API Gateway, чтобы сопоставить параметры из входящей строки запроса с параметром, передаваемым в вашу функцию Lambda. Из предоставленной вами ссылки на документацию, похоже, вам по крайней мере потребуется сопоставить параметр строки запроса hub.challenge, но вам также могут понадобиться другие параметры (hub.mode, hub.topic и hub.verify_token) в зависимости от какую логику проверки (если есть) вы реализуете.

Первый шаг - объявить параметры строки запроса на странице запроса метода. После того, как вы объявили параметры, откройте страницу запроса интеграции (где вы указываете, какую функцию Lambda должен вызывать API-шлюз) и используйте значок "+" для добавления нового шаблона. В шаблоне вам нужно будет указать тип контента (application/json), а затем тело, которое вы хотите отправить в Lambda. Вы можете прочитать как строку запроса, так и параметры заголовка, используя функцию params(). В этом поле отображения ввода вы создаете тело события, которое публикуется в AWS Lambda. Например: { "challenge": "$input.params('hub.challenge')" }

Документация для отображения параметров строки запроса

Другие вопросы по тегам