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.896 ]
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 Iniciador do PostgreSQL
Baixando e instalando BrOffice 3 no Ubuntu
Data e Hora (Observatório Nacional) usando o "Lynx"
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (4)
Ajuda Pra Melhoria do NFTABLES. (8)
Sinto uma leve lentidão ao arrastar, miniminizar e restauras as janela... (2)
Pastas da raiz foram para a área de trabalho [RESOLVIDO] (7)