如何使用 Typescript 和 Nodejs 订阅并接收来自 YouTube API 的推送通知

2025-06-08

如何使用 Typescript 和 Nodejs 订阅并接收来自 YouTube API 的推送通知

Youtube 的 API 为开发者提供了一种在 YouTube 频道发生特定变化时获取推送通知的方法。Youtube 的 API 通过 PubSubHubbub webhook 协议发送这些通知。

Webhook 用于向应用程序发送近乎实时的数据。

假设您有一个应用程序会向邮件列表发送电子邮件,并且您希望只在碧昂斯在其频道上发布视频时发送这些电子邮件。为此,您可以使用 Youtube 的 Webhook 订阅碧昂斯频道的推送通知。每当碧昂斯发布视频时,Youtube 都会向您的服务器发送请求,通知您此事件。

为了从 Youtube 的 webhook 获取推送通知,您需要向 Youtube 提供一个 URL,用于接收特定频道上传新视频时的数据。此 URL 称为 webhook 回调 URL。

Youtube 仅针对频道上的以下事件发送推送通知:

  • 新视频已上传
  • 视频标题已更新
  • 视频说明已更新

Youtube 以 xml 格式将推送通知发送到您的回调 URL。

在本教程中,我将向您展示如何使用 typescript 和 nodejs 设置回调服务器以订阅和接收来自 Youtube API 的推送通知。

项目设立

在您的项目文件夹中,npm init -y在终端中运行以创建 package.json 文件

运行npx tsc --init创建一个 tsc 文件。这是一个 TypeScript 配置文件。

在 package.json 的脚本部分中,添加这段代码以运行应用程序。

"dev": "tsc",
"start": "ts-node index"
Enter fullscreen mode Exit fullscreen mode

安装依赖项

运行npm i @types/express, dotenv, express, ts-node, typescript, youtube-notification以安装依赖项。

让我们编写应用程序

创建一个文件并将其命名为index.ts

import express from 'express';
import dotenv from "dotenv";
dotenv.config();

const YouTubeNotifier = require('youtube-notification');
const app = express();
const port = 6050;
const baseUrl = "https://strong-yak-75.loca.lt"
let channelId = process.env.CHANNEL_ID;

export const notifier = new YouTubeNotifier({
    hubCallback: `${baseUrl}/youtube/notifications`,
});

app.use("/youtube/notifications", notifier.listener());

app.listen(port, () => {
    console.log(`App listening at http://localhost:${port}`)

})

notifier.subscribe(channelId);

notifier.on('subscribe', data => {
    console.log('Subscribed');
    console.log(data);
});

notifier.on('notified', data => {
    console.log('New Video');
    console.log(data);
});
Enter fullscreen mode Exit fullscreen mode

.env在项目根目录中创建一个文件,并在其中添加您的 YouTube 频道 ID。

按以下格式添加频道 ID:
CHANNEL_ID="YOUR_CHANNEL_ID_GOES_HERE"

要获取 YouTube 频道的频道 ID,请导航至 YouTube 上的该频道。浏览器地址栏应显示以下格式的 URL。

https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ

UC8butISFwT-Wl7EV0hUK0BQ部分是频道ID。

要接收来自 YouTube 的通知,您的应用程序需要部署并拥有 https 转发 URL。由于我们仍在本地开发,我们将使用名为 Localtunnel 的辅助服务。

Locatunnel 让我们能够轻松地与全世界共享我们本地开发机器上的 Web 服务。

要启动服务器,请转到终端并运行:
npm start

在服务器运行时,打开另一个终端窗口并运行:

npx localtunnel --port "ADD_YOUR_PORT_NUMBER_HERE"

您的终端上将会打印一个 https URL。复制该 URL 并将其作为 baseUrl 添加到 index 文件中。请勿关闭运行 localtunnel 的终端。

重启服务器,使刚才的编辑生效。现在应该有两个终端启动了。

现在,每当有新视频上传到特定的 YouTube 频道时,该视频的详细信息都会记录到您服务当前正在运行的终端。

一些有用的调试技巧

您可能需要诊断您的订阅以确保您已订阅,或者当 Youtube 尝试向您发送推送通知时是否出现错误。

要运行此诊断,请导航至PubSubHubBub 页面

前往页面的“订阅者诊断”部分。添加您的回调 URL 和主题 URL。

主题网址:

https://www.youtube.com/xml/feeds/videos.xml?channel_id=YOUR_CHANNEL_ID

单击“获取信息”即可运行诊断。

最后,附上本文的Github 仓库。欢迎 fork 并 star 该仓库。

感谢您的阅读。

链接:https://dev.to/algodame/how-to-subscribe-to-and-receive-push-notifications-from-youtubes-api-using-typescript-and-nodejs-2gik
PREV
使用 Autocomplete.js 创建多功能栏
NEXT
我们如何让开源 CI 变得更好?