Уведомление, когда видео Youtube загружается API

У меня есть бот Discord, и я хочу отправлять сообщение всякий раз, когда определенный пользователь загружает видео. Я просмотрел API Youtube (https://developers.google.com/youtube/v3/docs/videos), но не нашел, как сделать то, что я хочу.


person Community    schedule 30.03.2017    source источник
comment
Вы можете ознакомиться с этой документацией о том, как подписаться на push-уведомления. Здесь указано, что API данных YouTube (v3) поддерживает push-уведомления через PubSubHubbub, серверный протокол публикации/подписки на ресурсы, доступные через Интернет. Уведомления отправляются подписчикам через веб-перехватчики HTTP, что намного эффективнее, чем решения на основе опроса.   -  person KENdi    schedule 11.04.2017


Ответы (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 или базу данных, если вы используете вместо того, как я использовал канал для проверки видео. Он отлично работает.

person Aryan Saini    schedule 02.02.2021