はじめに
こんにちは!高校生でプログラミング勉強中のCureSabaです。
この記事では、私が作成したYouTube新着動画をリアルタイムでDiscordへ自動通知できる完全無料・広告なしのWebサービス
YouTube通知×Discord Embed編集ツール
の技術的な仕組みと、実際の使い方・導入メリットを解説します。
従来のサービス(RSSポーリング型)の弱点
多くのYouTube通知Botや自作ツールは「定期的にRSSフィードを巡回」して新着を監視しています。
- 例: 5分や10分ごとに
https://www.youtube.com/feeds/videos.xml?channel_id=...
を取得 - Googleサーバーに無駄なリクエスト負荷がかかる
- 投稿から通知まで最大10分以上の遅延が生じる
- 利用者やBotが増えるほど、Google側の負担やレート制限リスクが増大
このサービスの強み:サーバープッシュでリアルタイム通知&Google負荷ゼロ!
本サービスはYouTube公式のPubSubHubbub(WebSub)APIを活用しています。
- 新着動画が投稿された瞬間だけ、Googleサーバーから本サービスのサーバーへ直接通知(HTTP POST)
- サービス側は**「受け取るだけ」**なので、Googleサーバーに一切余計なリクエストを投げません
- 本物のリアルタイム通知(数秒〜十数秒以内でDiscordに通知が届く)
- サーバープッシュ&Webhook連携で、Bot設置・常時稼働も不要
こんな方におすすめ
- YouTube新着をDiscordでリアルタイムに通知したい
- 通知Embedの内容をGUIで細かくカスタマイズしたい
- Bot設置やプログラミングなしで、完全無料・広告なしのサービスを使いたい
- Google APIの仕様やPubSubHubbubの技術を活かしたいエンジニアの方
ご利用方法
-
- メール認証を行なってください!(面倒臭いですが、スパムの防止です🙏)
-
通知したいYouTubeチャンネルのIDを入力
- ID抽出ツールも完備(@ハンドルやURLを貼るだけでOK!)
-
Discord Webhook URLを貼り付け
- Webhookの作成手順:
- 詳細な解説: Discord公式ヘルプ
-
GUIエディタでEmbedメッセージを編集
- タイトル・説明・画像・色・著者・フッター・複数フィールドなどをノーコード&リアルタイムプレビューでカスタマイズ
-
{title}
{channel_name}
{video_url}
などのプレースホルダで動画情報を自動差し込み - アイコン等設定しなければ上で設定したアイコンや名前が使用されます
-
「登録」ボタンを押すだけで完了!
- 登録後は新着動画が投稿された瞬間、Discordサーバーに自動でカスタム通知が届きます!
-
複数チャンネルやWebhookの一括管理・編集も可能
技術的な実装ポイント(リクエスト受信処理)
PubSubHubbub(WebSub)サブスクリプション登録
ユーザーがチャンネルIDを登録すると、下記のようなリクエストをGoogleのPubSubHubbubサーバーに送ります。
$subscriber = new Subscriber(
$hub_url, // "https://pubsubhubbub.appspot.com/subscribe"
$callback_url, // 本サービスのコールバックURL
false,
$secret, // HMAC署名用シークレット
'async',
$verify_token,
$lease_seconds
);
$subscriber->subscribe($topic_url); // "$topic_url = https://www.youtube.com/xml/feeds/videos.xml?channel_id=..."
Googleからの新着通知(POSTリクエスト)の受信・処理
- Googleサーバーから新着動画のXMLデータがPOSTされる
- サーバー側でHMAC署名を検証し、不正リクエストを防ぐ
- XMLから動画ID・タイトル等を抽出し、DBへ記録
- ユーザーが事前にGUIエディタで作ったEmbedテンプレートJSONにYouTube動画情報を自動で差し込み
- Discord Webhook APIへ即時POSTで通知!
// HMAC署名検証
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE'] ?? '';
list($algo, $hash) = explode('=', $signature, 2);
$expected_hash = hash_hmac($algo, $body, $result['secret']);
if (!hash_equals($expected_hash, $hash)) {
request_fail('Invalid signature', 401);
}
// XMLパースと通知送信
$xml = simplexml_load_string($body);
// ...動画情報抽出...
$json = $webhook['embed_json'];
$json = str_replace('{title}', $title, $json);
// 他の変数も同様に置換
$payload = json_decode($json, true);
send_webhook($webhook['url'], $payload);
サービスの詳細・ソース
- サービス本体:https://tool.fixitlater.org/index.php?tool=/youtube/index.php
- PubSubHubbub仕様:
- 技術詳細・実装例:
- Discord Embedエディタ(OSS):https://github.com/CureSaba/Discord-embed-generator
終わりに
もし、この記事が役に立ったと思ったら、ぜひコメントやシェアをお願いします。また、質問や改善点などがあれば気軽にコメントしてください!
それでは、良いプログラミングライフを!
本記事は2025年7月時点のサービス・実装仕様に基づき執筆しています。