Как подписаться на push-уведомления

YouTube Data API (v3) поддерживает push-уведомления через PubSubHubbub – протокол публикации и подписки для ресурсов, доступных через интернет. Уведомления отправляются подписчикам с помощью веб-перехватчиков HTTP, что гораздо эффективнее, чем решения на основе опросов. Благодаря PubSubHubbub ваш сервер узнает о событиях почти в реальном времени, не определяя оптимальный интервал опроса и не запрашивая повторно данные, которые не изменились.

Ваш сервер обратного вызова PubSubHubbub получает уведомления о фиде Atom, когда на канале происходят следующие действия:

  • загружает видео;
  • изменяет название видео;
  • изменяет описание видео;

Чтобы подписаться на уведомления, выполните следующие действия:

  1. Настройте сервер обратного вызова, который может обрабатывать входящие уведомления фида Atom.

  2. Чтобы подписаться на push-уведомления, используйте центр Google:

    • Задайте для параметра mode значение subscribe. (Или задайте режим unsubscribe, чтобы отменить подписку.)

    • Установите для URL обратного вызова URL, который вы настроили на шаге 1.

    • Установите для параметра topic URL значение https://www.youtube.com/xml/feeds/videos.xml?channel_id=CHANNEL_ID, где CHANNEL_ID – идентификатор канала YouTube, для которого вы хотите получать push-уведомления.

  3. Обрабатывайте уведомления, отправленные на ваш сервер обратного вызова. Ниже показан формат уведомления. Обратите внимание, что значение элемента <yt:videoId> можно использовать для идентификации добавленного или обновленного видео. Значение элемента <yt:channelId> также позволяет определить канал, на котором размещено видео.

    <feed xmlns:yt="http://www.youtube.com/xml/schemas/2015"
             xmlns="http://www.w3.org/2005/Atom">
      <link rel="hub" href="https://pubsubhubbub.appspot.com"/>
      <link rel="self" href="https://www.youtube.com/xml/feeds/videos.xml?channel_id=CHANNEL_ID"/>
      <title>YouTube video feed</title>
      <updated>2015-04-01T19:05:24.552394234+00:00</updated>
      <entry>
        <id>yt:video:VIDEO_ID</id>
        <yt:videoId>VIDEO_ID</yt:videoId>
        <yt:channelId>CHANNEL_ID</yt:channelId>
        <title>Video title</title>
        <link rel="alternate" href="http://www.youtube.com/watch?v=VIDEO_ID"/>
        <author>
         <name>Channel title</name>
         <uri>http://www.youtube.com/channel/CHANNEL_ID</uri>
        </author>
        <published>2015-03-06T21:40:57+00:00</published>
        <updated>2015-03-09T19:05:24.552394234+00:00</updated>
      </entry>
    </feed>