使用AWS Lambda和API Gateway消费RSS订阅源

问题描述:

我是一位新手rails程序员,而且我对AWS产品的使用经验也较少。我正在尝试使用lambda来订阅并使用来自YouTube的rss订阅源。我能够从我的本地托管Rails应用程序发送订阅请求只是HTTParty罚款:使用AWS Lambda和API Gateway消费RSS订阅源

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) 

,它会用ping命令GET请求lambda函数。我知道我需要回显hub.challenge字符串,但我不知道如何。 lambda事件是空的,我没有看到任何有用的上下文。我尝试在API网关中格式化响应,但这也不起作用。所以现在当我尝试订阅时,我会回到“挑战不匹配”错误。

我知道这个:https://pubsubhubbub.googlecode.come/git/pubsubhubbub-core-0.3.html#subscribing解释了我想要做的比我刚刚做的更好,6.2.1节是故障发生的地方。如何设置AWS Lambda函数和/或API网关以反映“hub.challenge”验证令牌字符串?

+0

在问题的链接断开。有谁知道这个信息的替代来源? – rofls

+1

有这个https://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.3.html#subscribeing – vulcanluver

您需要使用API​​网关的参数映射功能将来自传入查询字符串的参数映射到传递给您的Lambda函数的参数。从您提供的文档链接看来,您至少需要映射hub.challenge查询字符串参数,但您可能还需要其他参数(hub.mode,hub.topic和hub.verify_token),具体取决于你正在执行什么验证逻辑(如果有的话)。

第一步是在方法请求页面中声明您的查询字符串参数。声明参数后,打开集成请求页面(指定哪个Lambda函数API网关应调用该页面),并使用“+”图标添加新模板。在模板中,您必须指定内容类型(application/json),然后指定要发送到Lambda的主体。您可以使用params()函数读取查询字符串和标头参数。在该输入映射字段中,您将创建发布到AWS Lambda的事件主体。例如:{ “挑战”: “$ input.params( 'hub.challenge')”}

Documentation for mapping query string parameters

+0

非常感谢你! – vulcanluver