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.612 ]

Homepage: https://github.com/PedroF37

Download imdb-cli

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ões atualizadas deste script

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.

Download 1584658296.imdb-cli


Esconder código-fonte

#!/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/&quot;/"/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 $?
#
#
# ------------------------------------------------------------ #

Scripts recomendados

Make ISO OpenBSD

Remoção de arquivos pela data

Codecs Win32

VIM Colorido

Colocar palavras em maiúsculas


  

Comentários
[1] Comentário enviado por fabio em 18/03/2020 - 16:26h

Legal! Salvei aqui no meu diretório de scripts, vai ser útil. Só faltou trazer a nota do filme ou seriado, que é uma das infos mais uteis pra quem está decidindo assistir ou não kkk

[2] Comentário enviado por sabe nada em 19/03/2020 - 19:55h


[1] Comentário enviado por fabio em 18/03/2020 - 16:26h

Legal! Salvei aqui no meu diretório de scripts, vai ser útil. Só faltou trazer a nota do filme ou seriado, que é uma das infos mais uteis pra quem está decidindo assistir ou não kkk


Boa noite fabio. Que bom que gostou.
Quanto a classificação tem razao. Pouco depois de ter enviado o script vi que faltava a classificação e adicionei. Mas como temos que esperar para ser aprovado e publicado não podia fazer nada kk.
Acabei de enviar a versão atualizada que mostra a classificação dos filmes e séries.

[3] Comentário enviado por SnwMds em 14/04/2020 - 16:51h

Gostei.

[4] Comentário enviado por kdantas em 02/10/2020 - 23:42h

Olá, por acaso teria algo similar pro Windows, pois gostaria de automatizar a criação de bbcodes usando os dados do IMDB?

[5] Comentário enviado por Sunflower em 07/12/2021 - 18:27h


[1] Comentário enviado por fabio em 18/03/2020 - 16:26h

Legal! Salvei aqui no meu diretório de scripts, vai ser útil. Só faltou trazer a nota do filme ou seriado, que é uma das infos mais uteis pra quem está decidindo assistir ou não kkk


Dando erro 503

[6] Comentário enviado por sabe nada em 07/12/2021 - 19:19h


[5] Comentário enviado por Sunflower em 07/12/2021 - 18:27h


[1] Comentário enviado por fabio em 18/03/2020 - 16:26h

Legal! Salvei aqui no meu diretório de scripts, vai ser útil. Só faltou trazer a nota do filme ou seriado, que é uma das infos mais uteis pra quem está decidindo assistir ou não kkk


Dando erro 503


Sunflower.
Este script faz séculos que não tem manutenção minha. kkk. Provavelmente está todo quebrado mesmo. Eu fiz o script quando estava aprendendo um pouco de shell script e expressões regulares; antes de entender que tratar html e essas coisas com expressões regulares pode ser um pé no saco. Para além disso, o site do imdb, no arquivo robots.txt tem um monte de restrições que se não estou em erro, impede o script de pegar muitos dos dados que são pedidos.
Eu tenho outro script que usa a API do site omdbapi.com, que se chama omdb-cli. O script funciona perfeitamente, apenas tem que pegar a chave gratuita no site "https://www.omdbapi.com/" e colocar dentro do script na variável "Key".


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts