2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Youtubeの動画更新をdiscordに通知

Posted at

はじめに

 Twitterを辞め、YOUTUBEアプリの通知では要らないものがたくさんくるため実際にYouTubeを開く以外で確認することが困難になっていたので作成しようとしました。

1 Youtube APIの取得

 Google Cloud ConsoleでYouTube Data API v3を生成し取得

2 discord BOTの作成

 
Discord Developer PortalでBOTを作成し使用するチャンネルに招待してください
参考:

3 ライブラリのインストール

pip install discord.py google-api-python-client

4 コード

チャンネルIDはYOUTUBE URLの末尾から取得できます。
@YOUTUBEみたいになっている場合は変換サイトやプログラムでIDを取得してください。
ディスコードチャンネルIDはサーバーではなく、チャンネルを右クリックしてください。

code
import discord
from discord.ext import tasks
from googleapiclient.discovery import build
import os

#  API keys 
YOUTUBE_API_KEY = 'YOUR_YOUTUBE_API_KEY'
DISCORD_TOKEN = 'YOUR_DISCORD_BOT_TOKEN'
CHANNEL_ID = 'DISCORD_CHANNEL_ID'  # 使用するディスコードチャンネルで右クリックするとコピーできます
YOUTUBE_CHANNEL_ID = 'YOUTUBE_CHANNEL_ID'  # チャンネルIDはYOUTUBE URLの末尾です。@何々ではありません。変換する必要があります

# Initialize YouTube API
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)

# Initialize Discord bot
intents = discord.Intents.default()
client = discord.Client(intents=intents)

# Save the latest video ID to avoid duplicate notifications
latest_video_id = None

@tasks.loop(minutes=60)  # Check every 60 minutes
async def check_new_videos():
    global latest_video_id
    try:
        # Fetch the latest video from the YouTube channel
        response = youtube.search().list(
            part="snippet",
            channelId=YOUTUBE_CHANNEL_ID,
            order="date",
            maxResults=1,
            type="video"
        ).execute()

        video_id = response['items'][0]['id']['videoId']
        video_title = response['items'][0]['snippet']['title']
        video_url = f"https://www.youtube.com/watch?v={video_id}"

        # Check if new video
        if video_id != latest_video_id:
            # Send a message to Discord
            channel = client.get_channel(int(CHANNEL_ID))
            await channel.send(f"新しい動画が公開されました: **{video_title}**\n{video_url}")
            latest_video_id = video_id

    except Exception as e:
        print(f"エラーが発生しました: {e}")

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')
    check_new_videos.start() 

# Run the bot
client.run(DISCORD_TOKEN)

5 結果

毎日投稿されている方が確認しやすいのでジャルジャルさんの動画を取得しました。
実際にdiscordにメッセージが送信されているのが確認できました。
SnapCrab_NoName_2024-11-13_16-57-27_No-00.png

6 最後に

X(旧Twitter )を願掛けのために辞めたのでディスコードで通知を受け取れるのは便利です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?