Assinar notificações push

A API YouTube Data (v3) oferece suporte a notificações push via PubSubHubbub, um protocolo de publicação/inscrição entre servidores para recursos acessíveis pela Web. As notificações são enviadas aos assinantes por webhooks HTTP, que são muito mais eficientes do que soluções baseadas em polling. Com o PubSubHubbub, seu servidor descobre eventos quase em tempo real, sem precisar determinar o intervalo de pesquisa ideal ou buscar repetidamente dados que não mudaram.

Seu servidor de callback do PubSubHubbub recebe notificações de feed Atom quando um canal realiza uma das seguintes atividades:

  • envia um vídeo
  • atualiza o título de um vídeo
  • atualiza a descrição de um vídeo

As etapas a seguir explicam como se inscrever nas notificações:

  1. Configure um servidor de callback que possa processar notificações de feed Atom recebidas.

  2. Use o hub do Google para se inscrever e receber notificações push:

    • Defina o modo como subscribe. Ou defina o modo como unsubscribe para cancelar uma assinatura.

    • Defina o URL de callback como o URL que você configurou na etapa 1.

    • Defina o URL do tópico como https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID, em que CHANNEL_ID é o ID do canal do YouTube para o qual você quer recuperar notificações push.

  3. Processar notificações enviadas ao seu servidor de callback. O formato da notificação é mostrado abaixo. É possível usar o valor do elemento <yt:videoId> para identificar o vídeo adicionado ou atualizado. Também é possível usar o valor do elemento <yt:channelId> para identificar o canal proprietário do vídeo.

    <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/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>