Como extrair informações de um vídeo do YouTube usando Shell Script - Diolinux - O modo Linux e Open Source de ver o Mundo

Responsive Ad Slot

Como extrair informações de um vídeo do YouTube usando Shell Script

Você sabia que é possível usar Shell Script para extrair informações de um vídeo do YouTube?

sábado, 8 de setembro de 2018

/ por Dionatan Simioni
O Shell Script pode ser utilizado em lugares muito diferentes e pode servir para automatizar qualquer tarefa que você poderia fazer passo a passo usando a sua distro Linux, hoje vamos aprender a extrair alguns dados do seu canal favorito do YouTube.

Shell Script no YouTube













Para aqueles que são Produtores de Conteúdo com Linux e vivem querendo saber a repercussão do vídeo que acabou de lançar no Youtube , mas está cansado de ficar abrindo toda hora o vídeo pelo navegador, esperando carregar para obter os dados do vídeo como:
  • Inscritos;
  • Gosteis/Likes;
  • Não gosteis/dislikes;
  • Comentários.
Sem dizer também aqueles que acompanham um vídeo que ele gostou e/ou comentou e deseja acompanhar se há novos comentários e etc. Vamos criar um Shell Script que irá nos passar esses dados com um simples comando no terminal linux! Esse exercício faz parte da série Não é magia, é Shell Script! .

Antes de mais nada precisamos criar um cabeçalho, além da Shebang (#!), o cabeçalho precisa de dados do autor, link ou e-mail, licença e a versão do software, logo ficaria assim:

#!/bin/bash
# author:  Marcos Oliveira <diolinux.com.br>
# license: MIT
# version: 1.0

Após isso precisamos criar uma função para pegar os dados do youtube, criamos um arquivo temporário em /tmp com o comando mktemp baixamos a página do youtube relativa a qualquer vídeo e jogamos a saída do wget no nosso arquivo temporário que armazenamos numa variável, leia as linhas que começam com # (comentários):


# Rodamos o comando mktempo numa subshell, logo seu conteúdo 
será armazenado em page_video_youtube 
page_video_youtube=$(mktemp)

# Com a linha abaixo o conteúdo da paǵina HTML será guardado no
arquivo referenciado pela variável
wget "https://www.youtube.com/watch?v=hj-aDdRasGY" -O
$page_video_youtube


Próximo passo agora é filtrar o conteúdo dos dados que baixamos, após abrirmos o arquivo no editor de texto, verificamos que a linha que mostra o ID do canal, possui uma string única na página que pode nos ajudar para pegar dados do canal como: Título e inscritos.

Como o Youtube utiliza um padrão para endereços canais, então podemos filtrar os dados utilizando o Sed e baixando a página principal do canal que há as informações mais precisas e já armezarmos em variáveis o conteúdo que desejamos, para não poluir nosso ambiente, criaremos novamente arquivos temporários e jogaremos os dados nas variáveis referenciadas.

Leia os comentários no código


# Pega o id do canal e armazena na variável, rodando numa 
subshell id_do_canal=$(cat "$page_video_youtube" | grep 
'channelId' | sed 's/.*\=\"//' | sed 's/\".*//')

# Criamos outro arquivo temporário na pasta /tmp que será nosso 
canal page_canal=$(mktemp)

# Sabemos que o Youtube tem esse padrão, então passamos o ID que
 pegamos e adicionamos ao padrão de url do Youtube
# Fizemos o wget rodar "silenciosamente" jogando a saída para o 
vazio, podemos fazer no anterior também
wget "https://www.youtube.com/channel/$id_do_canal" -O 
"$page_canal" 2>/dev/null


Pronto, já possuímos todos os arquivos que precisamos, logo agora só resta filtrar os conteúdos e armazená-los numa variável para exibirmos numa próxima função que levaremos a ela via array, leia os comentários para entender as linhas, verifique que agora estamos passando a url via parâmetro pra função, pois iremos enviá-la pelo prompt:

function get_dados_youtube() {

# Filtramos o número de inscritos, título do víde, visualizações e gosteis ou não com sed e awk
num_inscritos=$(cat "$page_canal" | grep yt-subscription-button-subscriber-count-branded-horizontal | sed 's/<[^>]*>/ /g' | awk '{print $NF}')
titulo_video=$(cat $page_video_youtube | sed '/title/{p; q;}' | grep title | sed 's/<[^>]*>//g' | uniq | sed 's/...YouTube.*//')
views_video=$(cat $page_video_youtube | grep watch-view-count | sed 's/<[^>]*>//g')
likes=$(cat $page_video_youtube | grep like-button-renderer-like-button-unclicked | sed 's/<[^>]*>//g ;s/ //g')
dislikes=$(cat $page_video_youtube | grep like-button-renderer-dislike-button-unclicked | sed 's/<[^>]*>//g ;s/ //g')

echo "Nome do canal: $titulo_do_canal"
echo "Número de inscritos: $num_inscritos"
echo "Título do vídeo: $titulo_video"
echo "Visualizações: $views_video"
echo "Gosteis: $likes"
echo "Não gosteis: $dislikes"
}

Agora é só criar uma condição que obriga o usuário a informar o vídeo e pronto, veja o script pronto abaixo, copie o código, cole num arquivo, dê permissão de execução e rode:


Shell Script YouTube

No próximo artigo da série vamos adicionar nº de comentários, cores e uma condição para quando não houver URL, nosso script pegar os dados do vídeo mais recente! E depois para finalizarmos essa série, teremos uma surpresinha 😎 !

Se você ainda não tem muitos conhecimentos em Shell Script e está procurando uma forma eficaz de aprender do zero? Ou quem sabe você já possui conhecimentos em Shell mas quer evoluir e aprender a criar manuais, processos, games, animações, instaladores e muito mais?

Então não deixe passar a oportunidade de conhecer o "Curso Extremamente Avançado de Shell Script" que oferecemos junto com a galera do Terminal Root, são 3 cursos pelo preço de um, conheça aqui.

Até a próxima e bons estudos! linha de espaço Fim do texto
_____________________________________________________________________________
Viu algum erro ou gostaria de adicionar alguma sugestão a essa matéria? Colabore, clique aqui.

Blog Diolinux © all rights reserved
made with by templateszoo