Por que ele apareceu aqui?
Recentemente, escrevi um artigo sobre desenvolvimento de php bot usando laravel + botman para telegrama. A primeira coisa que escrevi, cito, é "atirar de um canhão em pardais". Eu concordo com isso, eu até percebi isso durante o desenvolvimento, mas estava interessado em laravel.
Agora, eu estava desenvolvendo um bot em php puro (sem correias) e a API de telegrama. Como existem muitos artigos sobre um tópico semelhante, tocaremos um pouco na API do Google (API do YouTube). Espero que você ache interessante e útil aprender sobre a API do youtube.
Uma pequena digressão. No momento, trabalho como programador front-end e trabalho com php apenas para meu próprio prazer (embora seja um prazer). Pode haver erros estúpidos no lado do servidor, mas funciona e para mim, no momento do treinamento, isso é suficiente.
Declaração do problema
Uma noite, tive a ideia de conectar o bot e o youtube, na época nem suspeitava da existência do api google. Requer um bot que, quando um novo vídeo for lançado no canal do youtube, enviará uma notificação no meu bot.
Em princípio, a funcionalidade é bastante simples, mas como trabalhar com o youtube? Acontece que o próprio Google tem uma solução para esse problema e seu nome é API do Google. Ele permite que você trabalhe com todos os aplicativos da empresa, mas eu estava interessado apenas no youtube.
Personalização e Desenvolvimento
Aconteceu que durante o estudo da API do YouTube, foi encontrada uma solução elegante para o meu problema, que foi oferecida pela própria documentação da API. Mas primeiro sobre a API. Para começar a trabalhar com ele, você precisa ir ao console do Google e selecionar a opção API necessária. Após o qual o caminho está apenas na documentação ou no stackoverflow. Devo dizer imediatamente que não existe uma versão russa da documentação, também não há lições. É aconselhável ter um conhecimento mínimo do idioma inglês ou agir digitando.
Parece assim. Você entra no console do Google, cria seu projeto e seleciona a API desejada.

E agora para resolver o problema. Ao ler a documentação, encontrei (o google me mostrou) o serviço
pubsubhubbub.appspot.com/subscribe, que permite vincular o youtube e seu aplicativo. Como isso funciona? Ele trabalha com o princípio do webhook. Você insere o youtube do canal que deseja ouvir e, a cada ação no canal (adicionar vídeo, excluir, alterar), recebe dados para o seu script.

URL de retorno de chamada - um script que receberá dados do google.
URL do tópico é o canal que você deseja ouvir.
Bem, o campo Modo permite que você escolha o que deseja, assine ou cancele a assinatura da escuta.
Vamos começar a escrever o código, para começar, vamos configurar nosso script para trabalhar com o youtube. Eu escrevi tudo em um arquivo desde foi um código de teste +, realmente não é suficiente. Depois de enviar uma solicitação de inscrição, é necessário confirmá-la. No Google, você pode encontrar a resposta no site favorito de todos, sugere um dos comentários no stackoverflow.
$video = "null"; if (isset($_GET['hub_challenge'])) { echo $_REQUEST['hub_challenge']; } else { $video = parseYoutubeUpdate(file_get_contents('php://input')); } function parseYoutubeUpdate($data) { $xml = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA); $video_id = substr((string)$xml->entry->id, 9); $channel_id = substr((string)$xml->entry->author->uri, 32); $published = (string)$xml->entry->published; return array( 'video_id'=>$video_id, 'channel_id'=>$channel_id, 'published'=>$published ); }
Aqui, criamos por conveniência uma variável na qual precisaremos das informações sobre o vídeo. As próximas duas linhas permitem determinar se é possível confirmar a solicitação do pubsubhubbub; se sim, confirme, se não, significa que os dados vieram do youtube e precisamos processá-los. Na função parseYoutubeUpdate, processamos a resposta, obtemos todas as informações necessárias.
Aqui vale a pena digerir e contar sobre uma forma especial (na minha opinião, posso estar enganada) de dados usados pelo youtube (para obter respostas), que é chamada, como eu a entendo, átomo (não deve ser confundido com o IDE ou este é um xml regular ... houve pouca experiência com ele) . Parece algo assim (um pequeno pedaço da resposta do youtube):
<id>yt:video:eE5mpblYpdY</id> <yt:videoId>eE5mpblYpdY</yt:videoId> <yt:channelId>UCGqKr3O5ub-O7zEKx_qeHUQ</yt:channelId> <title>20b3560a49 1080</title> <link rel="alternate" href="https://www.youtube.com/watch?v=hgCQ378xNus"/> <author> <name>not Epic</name> <uri>https://www.youtube.com/channel/UCGqKr3O5ub-O7zEKx_qeHUQ</uri> </author> <published>2019-07-14T05:10:49+00:00</published> <updated>2019-07-14T05:11:07.600177664+00:00</updated>
Voltar para parseYoutubeUpdate ().
Em uma função, convertemos a resposta no formato xml.
Escrevemos os dados que precisamos nas variáveis.
E então retornamos uma matriz com esses dados.
Passamos ao telegrama. Para começar, quero dizer, é muito mais fácil trabalhar do que com o botman. Se você deseja desenvolver bots apenas para telegrama, não use bibliotecas que permitam desenvolver bots para plataformas diferentes .... não faz sentido ... haverá mais problemas. A API do telegrama é muito clara e simples, mesmo para um iniciante que acabou de conhecer o php e possui um conhecimento mínimo de OOP.
Então, mais perto do ponto, mais perto do código. Precisamos criar um bot e vinculá-lo ao nosso script. Espero que você possa criar um bot. Nós escrevemos um token do bot e criamos uma solicitação
const TOKEN = "6826815*******Yme99*****9kjzgVi*****3S******"; $url = 'https://api.telegram.org/bot' . TOKEN . '/sendMessage';
Agora, precisamos enviar apenas uma solicitação ao servidor de telegrama.
$params = [ 'chat_id' =>712531723, "text" => $linkVideo, ]; $url = $url . '?' . http_build_query($params);
Criamos os parâmetros necessários, para mim é um ID de bate-papo (se ele exibir um bot em produção, é necessário salvar todo o ID do banco de dados em spam) e uma mensagem de texto.
Como você deve ter notado, passo o link como uma mensagem simples, não como um vídeo. Pelo que entendi, um telegrama transmite um vídeo apenas se for carregado no servidor, caso contrário não ... + Preciso ver uma imagem de visualização do vídeo.
Agora, nosso bot receberá notificações de edição de saída / vídeo. Parece algo como isto:

Fim do jogo Eu tenho tudo. A maior desvantagem desse código é que ele está em um único arquivo, mas não fazia sentido separar o código de 10 linhas.
Fontes -
github .