通过 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')
我已经为 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')