Уведомления о новых видео на ютуб канале через питон

В этом туториале мы создадим небольшое Flask приложение, которое будет принимать через вебхук уведомления о изменениях на канале с ютуба. Через такой вебхук можно получать уведомления практически о (добавлении, удалении,редактировании) видео канала.

К сожелению этот способ не уведомляет о новых ютуб трансляциях :( Уведомляет только пост фактум, когда видео удаляется с канала.

Всё работает очень просто: вы должны отправить ссылку на RSS поток на специальный гугл сервис: pubsubhubbub.appspot.com/subscribe на нём вы должны задать те самые Callback URL, Topic URL, (что делает поле Verify type незнаю, но работает при любом значении).


Нужно создать следующий скрипт app.py  (нужно установить фласк через pip install flask):

from flask import Flask
from flask import request
app = Flask(__name__)
# irrelevant to the question method, just for testing purposes
@app.route("/", methods=['GET', 'POST'])
def ping():
    return 'pong'

@app.route("/feed", methods=['GET', 'POST'])
def feed():
    challenge = request.args.get('hub.challenge')
    if (challenge):
        return challenge
    print(request.data)  # binary literal with xml payload
    return '', 204

Далее нужно сделать flask run и на 5000 порту у вас будет запущен ваш фласк сервер. Теперь нужно сделать так чтобы к вам могли постучатся извне. Для этого нужно так же установить ngrok. Как его установить есть достаточно информации в интернете. После установки нужно сделать ngrok http 4040 и вы получите вывод что-то вроде этого:

 


Далее нам нужно зарегистрировать наш вебхук по этой ссылке: pubsubhubbub.appspot.com/subscribe 

https://www.youtube.com/xml/feeds/videos.xml?channel_id=айди
В этой ссылке вместо айди нужно ввести айди канала. Айди канала в этой ссылке https://www.youtube.com/channel/UCaG4CBbZih6nLzD08bTBGfw - UCaG4CBbZih6nLzD08bTBGfw. 

После нажатия Do it! Будет пустая страница и на веб странице ngrok http://127.0.0.1:4040/inspect/http вы можете посмотреть что происходит.

Первым пришел запрос на регистрацию вебхука. Чтобы всякие нехорошие люди не вставляли ссылки на чужие вебхуки итд сначала проверяется хочет ли этот вебхук подписатся:
Для этого вебхук должен отправить в ответ на запрос рандомно сгенерированное сервисом значение из параметра hub.challenge. Теперь если на канале появится например новое видео, к вам на вебхук придет RSS с новым содержимым.
Для эксперментирования вы можете создать себе канал и создавать видео итд и проверять как и какие уведомления приходят. Так-же подсчитал задержку между изменением и уведомлением, есть задержка в ~2-5 минут!


Я смог найти очень мало информации о этом сервисе гугла, но буду благодарен если вы предложите дополнения в коментариях.

Комментарии

Популярные сообщения из этого блога

DOS атака при помощи Python

Ведем телеграм канал через питон

Django migrations не видит изменения моделей