在Google App Engine上使用Python构建webhook转换器的最简单方法

时间:2017-02-10 17:31:38

标签: python google-app-engine

我正在构建一个小工具(没有用户界面),它将接受来自多个服务的webhook,重新格式化内容,然后将标准化内容发送到另一个webhook。

示例:Stripes webhook包含大量原始数据,但我想使用摘要ping另一个webhook。所以我想把原始数据条带发送给我,将其重新格式化为一个简单的字符串,然后发送到另一个webhook。

我想这个脚本是这样做的:

# 1. receive webhook sent to URL with ?service=stripe param
# 2. parse URL to get service param
# 3. parse data received in payload
# 4. use some of the data received in new string
# 5. send string to new webhook

我喜欢在GAE上举办此活动。我用Django构建了很多项目,但是因为这并不需要看起来很重的UI或数据库。我喜欢任何帮助。我已经设置了GAE项目,这就是:

import web #using web.py
import logging

urls = (
    "/.*", "hooks",
)

app = web.application(urls, globals())

class hooks:
    # 1. DONE receive webhook sent to URL with ?service=stripe param
    def POST(self):

        # 2. parse URL to get service param        
        # ...
        # service_name = [parsed service name]

        # 3. DONE parse data received in payload
        data = web.data()
        logging.info(data)

        # 4. DONE use some of the data received in new string
        # (I've got the reformatting scripts already written) 
        # data_to_send = reformat(data, service_name)

        # 5. send data_to_send as payload to new webhook
        # new_webhook_url = 'http://example.com/1823123/'
        # CURL for new webhook is: curl -X POST -H 'Content-Type: application/json' 'http://example.com/1823123/' -d '{"text": data_to_send}'

        return 'OK'

app = app.gaerun()

那么在GAE上,是否有一种首选方法(2)解析传入的URL和(5)发送webhook?

1 个答案:

答案 0 :(得分:1)

我不熟悉web.py.许多GAE应用程序都基于webapp2。

要使用webapp2解析网址,请创建routes。这是我为处理PayPal IPN而创建的简单路线:

    (r'/ipn/(\S+)/(\w+)', website.ProcessIPN)

然后我有一个处理这条路线的处理程序:

class ProcessIPN(webapp2.RequestHandler):
    def post(self, user, secret):
        payload = json.loads(self.request.body)
        ...

路由是一个正则表达式,它捕获URL的两个部分,这些部分作为处理程序的两个参数(用户和机密)传递。假设您的有效负载是JSON,那么您可以使用webapp2轻松获取它,如上所示。

要发送webhook,您需要使用urlfetch

鉴于您的用例有多简单,我建议不要使用web.py而是使用webapp2。