У меня есть бот Discord, и я хочу отправлять сообщение всякий раз, когда определенный пользователь загружает видео. Я просмотрел API Youtube (https://developers.google.com/youtube/v3/docs/videos), но не нашел, как сделать то, что я хочу.
Уведомление, когда видео Youtube загружается API
Ответы (1)
Ну ... я делаю это, проверяя видео каждую минуту и проверяя, не совпадает ли ссылка на видео (или идентификатор) с последним видео, а затем публикую видео на том конкретном канале, на который вы хотите опубликовать. Я использую google-api-python-client
Во-первых pip install google-api-python-client
from from googleapiclient.discovery import build
В вашей функции on_ready
@client.event async def on_ready(): youtube=build('youtube','v3',developerKey='Enter your key here') req=youtube.playlistItems().list( playlistId='The Playlist id of the channel you want to post video i.e. the id of video playlist of the channel', part='snippet', maxResults=1 ) res=req.execute() vedioid=res['items'][0]['snippet']['resourceId']['videoId'] link="https://www.youtube.com/watch?v="+vedioid ch=await client.fetch_channel(the channel id from where im checking for the new video) await ch.send(link) yt.start()#Starting tasks loop which is made below for checking every minute if the new video is equal or unequal to old video link
Создание цикла задач для проверки видео
@tasks.loop(seconds=60) async def yt(): youtube=build('youtube','v3',developerKey='Enter your key here') req=youtube.playlistItems().list( playlistId='The Playlist id of the channel you want to post video i.e. the id of video playlist of the channel', part='snippet', maxResults=1 ) res=req.execute() vedioid=res['items'][0]['snippet']['resourceId']['videoId'] link="https://www.youtube.com/watch?v="+vedioid ch=await client.fetch_channel(Fetching same channel from which you are checking for the video link) async for message in ch.history(limit=1):#looping through the channel to get the latest message i can do this using last message also but I prefer using channel.history if str(link) != str(message.content): ch2=await client.fetch_channel(the channel you want to post video to) await ch2.send(f'@everyone,**User** just posted a vedio!Go and check it out!\n{link}') await ch.send(link2)#this is important as after posting the video the link must also be posted to the check channel so that the bot do not send other link else: pass
Итак, в основном то, что я делаю, — это использование частного канала для публикации последнего видео бота, как только оно будет готово, потому что, если случайно бот отключается в промежутке между ними, а затем подключается к сети, он публикует ссылку на этот канал, а затем я делаю как задачи цикл, в котором я каждую минуту проверяю, что если последняя ссылка на видео на этом канале YouTube не совпадает со ссылкой на видео на моем частном канале, это означает, что загрузчик загрузил видео, поэтому опубликуйте видео на канале, который я хочу опубликовать. Если это равным, то ничего не делайте, т.е. pass
Вы можете использовать файл json или базу данных, если вы используете вместо того, как я использовал канал для проверки видео. Он отлично работает.