通过 Webhooks 和 PubSubHubbub (Python3) 的 YouTube 推送通知在订阅时返回 200,但在视频上传时没有返回

YouTube Push Notifications via Webhooks & PubSubHubbub (Python3) returning 200 on subscription, but nothing on video upload

我已经为 Discord 机器人添加了一个 Webhooks 侦听器,我正在尝试使用它来 post 在上传新视频时向文本频道发送通知(试图消除我对 MEE6 的依赖).当我在 https://pubsubhubbub.appspot.com/subscribe 订阅通知时,我收到 200 响应,并且我的服务器的控制台打印

66.249.84.174 - - [27/Apr/2021 05:23:51] "GET /webhooks?hub.topic=https://www.youtube.com/xml/feeds/videos.xml%3Fchannel_id%<THE_CHANNEL_ID_I_WANT_NOTIFICATIONS_FOR>&hub.challenge=<A_BUNCH_OF_NUMBERS>&hub.mode=subscribe&hub.lease_seconds=432000 HTTP/1.1" 200 -

但是,上传视频时没有任何反应。

我已经尝试手动触发从 PostMan 到同一端点的 POST 请求(这里 XML 正文 https://developers.google.com/youtube/v3/guides/push_notifications 作为 raw->xml正文),这似乎击中了我的控制台和 return a 200,但我不知道为什么在上传时我没有得到任何指示。代码如下:

from flask import Flask, Response, request

app = Flask(__name__)

@app.route('/webhooks', methods=['POST'])
def respond():
    print(request.json);
    return Response(status=200)

@app.route('/webhooks')
def index():
    print(('request', request))
    print('args:', request.args)  # display text in console
    print('form:', request.form)
    print('data:', request.data)
    print('json:', request.json)
    print('files:', request.files)
    
    return request.args.get('data', 'none')  # send text to web browser

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=<MY_PORT>)

我在 PebbleHost 上托管,这就是主机设置为 0.0.0.0 的原因;我为订阅连接了一个单独的 IP,映射到一个专用端口。我对 Webhooks 还很陌生,这是我第一次与 YouTube 互动 API,所以我确定我忽略了一些非常明显的东西。

您必须 return hub.challenge 确认订阅。

我之前制作的一个工作示例。

from flask import Flask, request
import xmltodict

app = Flask(__name__)


@app.route("/callback", methods=['POST', 'GET'])
def callback():
    if request.method == 'POST':
        data = xmltodict.parse(request.data)
        print(data)
        return request.data
    else:
        return request.args.get('hub.challenge')



app.run('0.0.0.0')