Sistemas operacionaisTutoriais

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

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.

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!

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!