如何使用 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"
安装依赖项
运行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);
});
.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