在NodeJS中刷新Youtube API的PubSubHubbub订阅

izkcnapc  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(166)

我设法通过网页浏览器上的https://pubsubhubbub.appspot.com/subscribe订阅了Youtube Feed,我一直试图通过NodeJS上的Fetch刷新我对PubSubHubbub的订阅,我使用的代码如下

const details = {
  'hub.mode': 'subscribe',
  'hub.topic': 'https://www.youtube.com/xml/feeds/videos.xml?channel_id=${process.env.ID}',
  'hub.callback': process.env.callback,
  'hub.secret': process.env.secret
};
const endpoint = 'http://pubsubhubbub.appspot.com/subscribe'

var formBody = [];
for (const property in details) {
  const encodedKey = encodeURIComponent(property);
  const encodedValue = encodeURIComponent(details[property]);
  formBody.push(encodedKey + "=" + encodedValue);
}

formBody = formBody.join("&");
const result = await fetch(endpoint, { method: "POST", body: formBody, 'Content-Type': 'application/x-www-form-urlencoded'})

console.log(result.status, await result.text())

预期:状态204
实际:状态400,内容:“无效的集线器值。模式:“
我希望内容至少能告诉我无效值是什么,但它最终是空白的,在我看来,它根本没有设法读取发布的内容。我正在寻找改进代码的方法,以便我不会遇到这个问题。

ykejflvf

ykejflvf1#

我意识到我应该在内容类型头中指定charset=UTF-8 .我还不是很精通发送请求,所以这对我来说绝对是一个大开眼界.在将其添加到服务器中后,如预期的那样,服务器响应204,所以我将结束我的问题.
我尝试过从child_process模块中导入exec()函数来运行cURL并提交请求,但是我建议坚持使用一种语言来提高可读性,使用exec()直接从shell运行命令可能会产生不良影响。

相关问题