imdb-cli - consultar filmes, séries e atores pelo site IMDB no terminal
Publicado por Pedro Fernandes (última atualização em 31/03/2020)
[ Hits: 1.759 ]
Homepage: https://github.com/PedroF37
Download 1584658296.imdb-cli (versão 2)
Script para consultar filmes, séries e atores pelo site imdb.com e mostrar os dados no terminal.
Baseado na referência na url (tt|nmxxxxx) -- x são números; ou no nome do ator|filme|série.
Usa e precisa do lynx, gawk (gawk porque não sei se funciona tudo no awk), sed e o grep.
Versão 2 - Enviado por Pedro Fernandes em 19/03/2020
Changelog: versao 0.2:
1 - Adicionei a classificação da serie|filme
na mostragem.
Ex: 7.5/10
2 - Removi variavel $LYNX, que claro que
nao dá certo na funcao lista_items:
type $LYNX. Coloquei literal em todo
script - lynx.
3 - Adicionei duas funções para tratar
dos sinais SIGINT E SIGTERM.
#!/bin/bash # # # ------------------------------------------------------------ # # # # imdb-cli Script para consultar filmes|séries|atores # pelo site imdb.com. # Baseado no codigo da url ou no nome dos # atores|filmes|series. # # # requer lynx,gawk,sed,grep # # # funcionamento: # # 1- O imdb referencia os filmes|series com um # (ttxxxx) e os atores com (nmxxxx) na url, # onde x são números. # O script pega a página de acordo com essa # referencia. Se digitar a referencia o script # pega direto a página. Se digitar nome de ator # ou serie|filme, o script baixa o html com as # várias possibilidades e então pega a Primeira # ttxxxx que aparece. Pega a primeira pois na pagina # aparecem todas as ttxxx referentes a todas as # posibilidades e o script não tem como saber # qual é qual então pega a primeira. # Esta forma é mais falivel, pois por exemplo: # Se digitar Quantico, o script em vez de pegar a # série Quantico, pega a série Criminal Minds porque # lá no imdb o Criminal Minds aparece em baixo do # titulo -- aka Quantico e como é mais famosa aparece # primeiro. # Dito isto, a maior parte dos atores e filmes|series # dá para pegar digitando o nome mesmo, que é bem mais # confortavel do que ter que ir procurar a referencia. # # 2- O script tenta ser o mais tolerante possivel # com a escrita. # Ex: se escrever ncis em vez de NCIS o script pega # a serie certa. # Mas se escrever ncis los angeles em vez de # ncis: los angeles, pode ser que falhe. # # 3- Nos filmes|series quando mostra os atores que # participam da serie|filme e os seus papeis, mostra # duas vezes o nome dos atores. Deve ter forma de fazer # mostrar só uma vez, mas não me ocorreu nenhuma então fica # assim. # # 4 - Para os atores não mostra a filmografia toda, # só mostra 4 filmes ou series que aparece no imdb # na parte "Known For". Senão não havia tela para tudo kk. # E mostra a descrição do ator, tipo: # # "Amy Lou Adams was born in Vicenza, Veneto, Italy, # to American parents, Kathryn (Hicken) and Richard Kent Adams, # a U.S. serviceman who was stationed at Caserma Ederle # in Italy at the time. She was raised in a Mormon family of # seven children in Castle Rock, Colorado, and has English, # as well as smaller amounts of Danish, Swiss-German, and Norwegian,..." # # 5- O script usa o gawk -- dizem que há coisas que tem no # gawk que não tem no awk (não sei se é mesmo..), # mas aprendi o gawk, então é ele que uso. # Usa por exemplo a Built-in IGNORECASE e funçao gsub. # # # autor pedro fernandes # email pedrobfernandes@protonmail.com # # # ------------------------------------------------------------ # # # # Constantes # # Base_Url="https://www.imdb.com/" # url imdb Query_Url="${Base_Url}find?q=" # url de consulta Query_Actor="${Base_Url}name/nm" # url para pegar nome de actor Query_Title="${Base_Url}title/tt" # url para pegar filme/serie Actor_Ref="$(mktemp $HOME/actor_refXXXXXX)" # arquivo com a ref nmxxxxx do ator Flix_Ref="$(mktemp $HOME/flix_refXXXXXX)" # arquivo com a ref ttxxxxx do filme/serie Flix="$(mktemp $HOME/flixXXXXXX)" # arquivo com de descricao de serie/filme não filtrado Flix_Resumo="$(mktemp ${HOME}/flix_resumXXXXXX)" # arquivo com o resultado filme/serie filtrado Actor="$(mktemp $HOME/actorXXXXXX)" # arquivo com dados do ator não filtrado Actor_Resumo="$(mktemp $HOME/actor_resumXXXXXX)" # arquivo com dados do ator filtrado LYNX="$(which lynx)" # # # ------------------------------------------------------------ # # # # Funcoes # # limpeza() { rm -f $Actor_Ref $Flix_Ref $Flix $Flix_Resumo \ $Actor $Actor_Resumo } # # erro_padrao() { echo "${0##*/}: ${1:- Erro Desconhecido}" >&2 exit 1 } # # lista_items() { type $LYNX &> /dev/null || \ erro_padrao "Tem que ter o programa lynx instalado." # # type gawk &> /dev/null || erro_padrao "Tem que ter o gawk instalado." } # # actor_relato() # mostra os dados do ator { sed -n '/<meta name="title"/,/$/p' $Actor | sed ' s/<.*="//g s/".*\/>//g s/"/"/g' | fmt -u | sed 's/^ *//g' | sed '2i\\n' > $Actor_Resumo # # sed -n '/Known For/,/if/p' $Actor | \ grep '^title=".*"$' | sed ' s/^.*="//g s/"//g' | \ sed '1i\\nKnown For:\n' >> $Actor_Resumo # # clear cat $Actor_Resumo echo exit 0 } # # flix_relato() # mostra os dados do filme|serie { gawk '/\(BUTTON\) Rate This/,/^Stars/{print $0}' $Flix > $Flix_Resumo sed -n '/^Cast/,/^Plot Keywords/p' $Flix >> $Flix_Resumo # # sed 's/\[[[:alnum:][:punct:]]*\]//g' $Flix_Resumo | sed ' /Episode Guide/,/^$/d /^Stars:/d /See/,/Edit/d /Rate This/d /Plot/,/^Plot/d' | sed '/^Creator/i\\n' | gawk ' BEGIN {IGNORECASE=1} {gsub(".*poster[s]?","",$0)} {gsub(".*video[s]?","",$0)} {gsub(".*image[s]?","",$0)} {gsub(".*trailer[s]?","",$0); print}' # # exit 0 } # # actor_name() # pega a ref do ator xxxxx baseado no nome { clear echo -n "Digite nome de ator|atriz: > " read nome echo "Pegando dados. Aguarde..." # # $LYNX -source "${Query_Url}$nome" > $Actor_Ref $LYNX -source "${Query_Actor}$(grep '/name/[[:alnum:]]*/' $Actor_Ref | \ cut -d '=' -f 4 | cut -d '/' -f 2-3 | cut -c 8-)" > $Actor actor_relato } # # flix_name() # pega a ref do filme|serie xxxx baseado no nome { clear echo -n "Digite nome de filme|serie: > " read nome2 echo "Pegando dados. Aguarde..." # # $LYNX -source "${Query_Url}$nome2" > $Flix_Ref $LYNX -dump "${Query_Title}$(grep 'href="/title' $Flix_Ref | gawk ' BEGIN {RS="> <"} {print $0}' | grep -m 1 'href="/title' | \ cut -d '/' -f 3 | cut -c 3-)" > $Flix flix_relato # # } # # actor_ref() { clear echo "Digite a referencia do ator|atriz sem o nm" echo -n "Ex: original nmxxxxx - digite xxxxx - x são números: > " read actor_num # # local regex="$(echo $actor_num | grep -E '^[[:digit:]]+$')" if [ -z "$regex" ] then erro_padrao "Digite apenas números." else echo "Pegando dados. Aguarde..." $LYNX -source "${Query_Actor}$actor_num" > $Actor fi # # actor_relato } # # flix_ref() { clear echo "Digite a referencia do filme|serie sem o tt" echo -n "Ex: original ttxxxxx - digite xxxxx - x são números: > " read flix_num # # local regex="$(echo $flix_num | grep -E '^[[:digit:]]+$')" if [ -z "$regex" ] then erro_padrao "Digite apenas números." else echo "Pegando dados. Aguarde..." $LYNX -dump "${Query_Title}$flix_num" > $Flix fi # # flix_relato } # # menu() { clear echo echo -e "\t\t\t\t\timdb-cli -- Internet Movie Database - cli\n\n" echo -e "\t\t\t\t\t1. Consultar ator|atriz por nome" echo -e "\t\t\t\t\t2. Consultar ator|atriz por referencia. ex: nmxxxxx" echo -e "\t\t\t\t\t3. Consultar filme|série por nome" echo -e "\t\t\t\t\t4. Consultar filme|série por referencia ex: ttxxxxx" echo -e "\t\t\t\t\t0. Abortar e saír." echo -en "\n\n\t\t\t\t\tDigite a opção: > " read -n 1 opcao # # case $opcao in 1) actor_name ;; 2) actor_ref ;; 3) flix_name ;; 4) flix_ref ;; 0) echo echo "Saíndo do script..." echo exit 0 ;; *) echo erro_padrao "Opção invávlida. Abortando..." ;; esac } # # # ------------------------------------------------------------ # # # # Principal # # trap limpeza SIGINT SIGTERM EXIT # # lista_items menu # # # ------------------------------------------------------------- # # # exit $? # # # ------------------------------------------------------------ #
Script para Conexão Automática com Internet a Rádio
Script iniciante para adm. de usuarios e quotas
Baby Percent - Converte Semanas da Gestação em Porcentagem
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
Excluir banco de dados no xampp (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta