omdb-cli
Publicado por Pedro Fernandes (última atualização em 19/04/2022)
[ Hits: 1.744 ]
Homepage: https://github.com/PedroF37
Download 1638553320.omdb-cli (versão 2)
Script que usa a API do site: 'https://www.omdbapi.com', (Open Movie Database), para pegar os dados dos filmes e séries.
Infelizmente, não pega dados dos atores, pois a API do site não tem essa opção.
Mostra na tela do terminal dados como o nome, classificação, atores, sinopse etc.
O script usa o curl para fazer os pedidos na API, e você tem que pegar a chave da API no site. É gratuita.
Pode mudar o nome do script para o que quiser kk, (não sou muito original nos nomes kk), que não vai quebrar o script.
Alguns exemplos de uso:
Pegando dados da melhor série já feita pelo HOMEM! kk, pelo título da série e mostrando sinópse completa:
$ omdb-cli -T Fringe -p full
Chama pelo pelo id do IMDB pedindo sinópse breve:
$ omdb-cli -i tt0407362 -p short
Chama pelo título, ano, sinópse completa e especifica o tipo (filme ou série), para casos em que tem série e filme com o mesmo nome:
$ omdb-cli -T '12 Monkeys' -t series -y 2015 -p full
As únicas opções obrigatórias são a opção -T título ou -i ID, e estas são mutuamente exclusivas, ou seja, ou usa -T ou usa -i.
Se a série ou filme tiver espaços, tem que colocar entre aspas.
Ano são os 4 digitos apenas, "2008" não aceita 02/05/08, 02-05-2008 etc.
Também a opção -p (sinópse) se não especificar por padrao mostra a sinopse breve. Por exemplo, se digitar:
$ omdb-cli -T Fringe
o script vai agir como se tivesse digitado:
$ omdb-cli -T Fringe -p short
A ordem de chamada das opções não interessa, o script ordena tudo.
Por favor, lêr o cabeçallho que contém mais informações do que aqui (algumas delas importantes para o uso do script!)
Versão 2 - Enviado por Pedro Fernandes em 03/12/2021
Changelog: Versão 2.0 - 10-10-2021
Script recriado quase do zero, para não usar tanto sed e pipes, e para ficar um pouco mais limpo (que nem a função Usage, que parecia um testamento...)
Adicionado mais testes para pegar erros.
#!/bin/bash
# ---------------------------------------------------------------------------- #
# SCRIPT    omdb-cli (ou o que quiser chamar em vez disso..)
# AUTOR     Pedro Fernandes
# E-MAIL    pedrobfernandes37@gmail.com
# DATA      17-06-2021 - Inicio de script
# ---------------------------------------------------------------------------- #
# DESCRIÇÃO:
# Script que usa a API do site 'https://www.omdbapi.com',
# (Open Movie Database), para pegar os dados dos filmes
# e séries.
# O script mostra na tela algo assim:
# Title           Fringe
# Year            2008–2013
# Runtime         46 min
# Genre           Drama, Mystery, Sci-Fi, Thriller
# Director        N/A
# Writer          J.J. Abrams, Alex Kurtzman, Roberto Orci
# Actors          Anna Torv, Joshua Jackson, Jasika Nicole, John Noble
# Language        English
# Country         USA, Canada
# Awards          Nominated for 3 Primetime Emmys. Another 18 wins & 84 nominations.
# Rating          8.4/10,Metascore:N/A
# Rating          8.4,Source:IMDB
# Type            series
# Total Seasons   5
# Plot
# An F.B.I. agent is forced to work with an institutionalized scientist and his son in order to
# rationalize a brewing storm of unexplained phenomena.
# Alguns filmes e séries mostra classificações de outros sites como o
# Rotten Tomatoes e Metacritic, mas não são todos, o único que mostra sempre
# é do imdb.
# ---------------------------------------------------------------------------- #
# COMO USAR:
# A API tem MUITAS opções para se fazer os pedidos, mas o script
# só usa umas poucas. Nem todas as 'flags' no script correspondem
# ás 'flags' oficiais na API.
# Elas são:
# -T Título     - Especifica o título do filme ou série
# -t tipo       - Especifica se procura por filme ou série. Aceita:
#                 'movie|MOVIE|series|SERIES' apenas, (INGLÊS).
# -i ID         - Especifica o id (ttxxxxxxx) do filme ou série do imdb
# -y ano        - Especifica o ano. No formato '2008'. Não aceita '22/05/2008'
#                 '22-05-2008' '22 05 2008' '22-05-08' etc.
# -p full|short - Especifica se a sinopse é completa ou breve. Aceita
#                 'full|FULL|Full ou short|SHORT|Short' apenas.
# Exemplos de uso:
# Pegando pelo título, ano e especificando sinopse completa:
# $ omdb-cli -T Fringe -y 2008 -p FULL
# Pelo id do IMDB e sinópse breve:
# $ omdb-cli -i tt0407362 -p short
# Série com espaços:
# $ omdb-cli -T 'Sons of Anarchy'
# Especificando o tipo (série ou filme)
# $ omdb-cli -T '12 Monkeys' -t series -p full
# De todas as opções, as únicas obrigatórias são -T e -i, e estas
# são mutuamente exclusivas. Ou seja, ou usa -T Título ou usa -i ID.
# O ID é o método mais 'infalivel' de pegar o filme/série certo, mas,
# também é o mais chato e que faz menos sentido de usar. Se eu tenho
# que ir procurar o ID, então abro logo o navegador e vou ver o filme
# direto no site do imdb! O ID está incuido no sript apenas porque a
# API tem essa opção e para deixar o script mais completo, (que nem
# no meu script 'imdb-cli').
# Também, como nos dois últimos exemplos, se o filme ou série tiver
# espaços, tem que colocar entre aspas.
# A ordem não interessa, o script ordena as opções por si, então,
# pode colocar '-T titulo -p full -y ano', ou '-p full -T titulo -y ano',
# que vai tudo dar no mesmo..
# Por fim, a sinopse, (opção -p), se não especificar a opção, por padrão
# usa '-p short'. Ou seja, se digitar: 'omdb-cli -T fringe' vai mostrar como
# se tivesse digitado: 'omdb-cli -T fringe -p short'.
# ---------------------------------------------------------------------------- #
# NOTAS:
# 1 - Pode acontecer de chamar o script e não funcionar por https.
#     Nesse caso tente chamar o script assim: 'Proto=http omdb-cli ...'
# 2 - O script usa o comando fold, com as opções (-w|--width) e (-s|--space).
#     No meu monitor a largura (opção -w) de 160 fica perfeito e é a largura
#     padrão no script. Tem a variável 'FoldWidth=${FoldWidth:=160}' no inicio
#     do script. Você pode chamar o script: 'FoldWidth=xxx omdb-cli ...' ou,
#     pode mudar o número aqui no script.
# 3 - Pode acontecer de você pedir dados de uma série ou filme e receber o errado.
#     Por exemplo, se você digitar: 'omdb-cli -T MacGyver', vai receber qual?
#     A série antiga ou a nova série que tem o mesmo nome?
#     Nestes casos tem 3 opções:
#     Chamar pelo id do imdb
#     $ omdb-cli -i ttxxxxxxx
#     Especificar o ano
#     $ omdb-cli -T MacGyver -y ano
#     Ou, se uma for série e o outro for filme, como no caso do '12 Monkeys',
#     especificar a opção -t tipo:
#     $ omdb-cli -T '12 Monkeys' -t series
# 4 - O script usa o curl para fazer o pedido na API, então tem que instalar
# 5 - Por fim, você precisa pegar a chave da API no site:
#     'https://www.omdbapi.com'. Tem a opção de chave paga, MAS, tem
#     também a opção de chave gratuita. Basta dar o nome, e-mail e
#     dizer para que quer usar a API.
#     Você coloca a chave na variável: 'Key'
# ---------------------------------------------------------------------------- #
# VERSÃO/CHANGELOG:
# 1.0 - 27-06-2021
### Script completado e testado o melhor possível.
### Caracteres estranhos como '\"..\" e &'
### que aparecem na sinópse para escapar '"' etc,
### detectados e substituídos. Mais caracteres
### que venham a ser achados serão removidos em
### futuras versões se/caso aparecam.
# ---------------------------------------------------------------------------- #
##### PARÂMETROS #####
## Sua chave da API aqui
Key=''
## Aqui você coloca a largura para o comando fold
## para a opção -w. Basta trocar o número.
FoldWidth=${FoldWidth:=160}
## A partir daqui não precisa mexer mais.
ApiKey='&apikey='
UserAgent=$(type -p curl)
Proto=${Proto:-https}
QueryDatabase='://www.omdbapi.com/?'
TitleQuery='t='
IdQuery='i='
StoryLine='&plot='
ReleasedYear='&y='
Category='&type='
Plot=${Plot:-short}
CommandLine=${ApiKey}${Key}
# ---------------------------------------------------------------------------- #
##### FUNÇÕES #####
function ErrorExit {
echo ${0##*/}: $@ >&2
exit 1
}
function Usage {
clear
cat <<EOF
Uso: ${0##*/} -T TÍTULO | -i ID [OPÇÕES...]
ONDE OPÇÕES SÃO:
-T TÍTULO      Procura pelo Título do filme ou série.
-t tipo        Especifica se procura por filme ou série
               aceita: -t movie | -t series
-i ID          Procura pelo ID do imdb (ttxxxxxxx).
               ID é tt seguido de entre 7 a 8 digitos.
-y ano         Permite especificar o ano do filme ou série.
-p short|full  Especifica se mostra sinopse completa ou breve.
               Por padrão, se opção -p não for usada, a sinopse
               é breve.
Exemplos de Uso:
Consultando pelo título apenas:
$ ${0##*/} -T Fringe
Usando o ID do imdb e a opção -p para especificar sinopse breve:
$ ${0##*/} -i tt0407362 -p short
Especificando título da série, ano e sinopse completa:
$ ${0##*/} -T 'Sons of Anarchy' -y 2008 -p full
Especificando o tipo:
$ ${0##*/} -T '12 Monkeys' -t series
NOTAS:
1 - De todas as opções, as únicas obrigatórias são
    as opções -T ou -i e elas são mutuamente exclusivas.
    Ou seja, ou usa a opção -T ou usa a opção -i,
    mas não as duas juntas.
2 - Se filme ou série tiver espaços, como nos últimos
    exemplos, tem que colocar entre aspas.
3 - Ano do filme ou série são os 4 dígitos (2008), não
    aceita (01-03-2008)|(01/03/2008)|(01 03 2008) nem
    (01 03 08).
4 - Se não funcionar o script, pode ser que o site
    'https://www.omdbapi.com', não esteja aceitando pedidos
    por https. Neste caso, tente chamar o script assim:
    $ Proto=http ${0##*/} ...
5 - Se existir dois filmes ou séries com o mesmo nome,
    possivelmente receberá o filme ou série errado.
    Para resolver esse caso você pode usar um destes
    três métodos:
    1 - Chamar o script usando o ID:
        $ ${0##*/} -i ttxxxxxxxx
    2 - Chamar o script passando o ano do filme ou série:
        $ ${0##*/} -T fringe -y 2008
    3 - Se for o caso de o nome corresponder a uma série e a
        um filme, então pode especificar a opção -t tipo:
        $ ${0##*/} -T '12 Monkeys' -t series
EOF
exit
}
function Parser {
# Limpamos o retorno do pedido.
# Com Kilos atrás de Kilos de sed pipes e gawks...
# Claro que tem os módulos dos tais de pythons
# e esse tal de 'jq', mas não sei usar nenhum dos
# dois, isso é coisa pra programador..
#
clear
sed '
s!\("\)\(,\)\("\)!\1\n\3!g
s/[]{}[]//g
/"Writer"/s/([^)]*)//g
s!\(\\"\)\([^\\"]*\)\(\\"\)!\2!g' |
gawk -v fs='"' '
BEGIN {
    FS=fs
    OFS="<=>"
}
/"Title":/{print $2,$4};
/"Year":/{print $2,$4};
/"Released":/{print $2,$4};
/"Runtime":/{print $2,$4};
/"Genre":/{print $2,$4};
/"Director":/{print $2,$4};
/"Writer":/{print $2,$4};
/"Actors":/{print $2,$4};
/"Language":/{print $2,$4};
/"Country":/{print $2,$4};
/"Awards":/{print $2,$4};
/"Value":/{print "Rating",$0};
/"imdbRating":/{print "Rating",$4",Source:IMDB"};
/"Type":/{print $2,$4};
/"totalSeasons":/{print "Total Seasons",$4};
/"Plot"/{print $2,$4}
' |
sed -n '{
/Plot/{h ; n}
$G ; p}' |
sed '
s/"Value"://g
s!\(Plot\)\(<=>\)!\n\n\1\n\n!
s/"//g
s/"/"/g
s!\(&\)\(amp;\)!\1!g' |
sed '/^\n*$/{N; D}' |
gawk -F"<=>" '{printf "\n%-8s\t\t%-8s\n", $1,$2}' |
fold -w $FoldWidth -s
echo
}
# ---------------------------------------------------------------------------- #
##### VERIFICAÇÕES #####
# Tem que ter pelo menos -T ou -i
[ $# -eq 0 ] && {
ErrorExit Não passou parâmetro/argumento nenhum. Use: ${0##*/} -h para ajuda.
}
# Tem que ter a chave da API
[ -z "$Key" ] &&  {
ErrorExit Não tem chave de API.
}
# Precisamos do curl
[ -z "$UserAgent" ] && {
ErrorExit Necessita do programa curl.
}
# ---------------------------------------------------------------------------- #
##### PEGANDO PARÂMETROS E ARGUMENTOS #####
while getopts :t:i:y:T:p:h Opt
do
    # Dependendo da opção, vai montando o comando.
    # O Título e o ID, são mutuamente exclusivos.
    # Para além disso, ambos têm que vir primeiro na
    # URL: 'https://www.omdbapi.com/?[Ti]='; então eles
    # são inseridos no comando no final do script apenas.
    # Também, a chave da API é o último argumento da URL,
    # então o comando é composto da direta para a esquerda:
    # 'CommandLine=${ChaveAPI}; CommandLine=${Var1}${ChaveAPI}..'
    case "$Opt" in
    T)
        Title=$OPTARG
        # Não pode ter espaços na URL, então, John Wick Chapter 2
        # não passa, mas passa John+Wick+Chapter+2. Atenção,
        # que aqui está contando com que o nome da serie ou filme
        # seja inserido entre aspas. Se não não vai servir de nada!!
        Title=${Title// /+}
        ;;
    i)
        ID=$OPTARG
        # ID tem que ser ttxxxxxxx|ttxxxxxxxx (7 ou 8 digitos)
        [[ "$ID" =~ ^tt[0-9]{7,8}$ ]] && : || {
        ErrorExit ID especificado errado. Use ${0##*/} -h para ajuda.
        }
        ;;
    t)
        Type=$OPTARG
        # Type, tem que ser 'movie|MOVIE|series|SERIES' em Inglês...
        case $Type in
        series|SERIES|movie|MOVIE)
            :
            ;;
       # Vocês aqui no Brasil falam Seriado né?...
        séries|SÉRIES|série|SÉRIE|seriados|SERIADOS|seriado|SERIADO)
            Type='series'
            ;;
        filmes|FILMES|filme|FILME)
            Type='movie'
            ;;
        *)
            ErrorExit Opção -t é 'movie|MOVIE|series|SERIES'
            ;;
        esac
        CommandLine=${Category}${Type}${CommandLine}
        ;;
    y)
        Year=$OPTARG
        # Ano, tem que ser os 4 dígitos apenas do ano (2008),
        # não pode ser '22-01-2008' ou '22/01/2008'. Atenção,
        # que a expressão pega os casos de '22-01-2008' ou
        # '22/01/2008', mas não pega casos de '22-02-08' ou
        # '22 01 2008'.
        Year=${Year//[[:digit:]][[:digit:]][\-\/:]}
        CommandLine=${ReleasedYear}${Year}${CommandLine}
        ;;
    p)
        Plot=$OPTARG
        # Plot (sinopse) suporta 'full|FULL|Full ou |short|SHORT|Short' apenas.
        [[ "$Plot" =~ ^(full|FULL|Full|short|SHORT|Short)$ ]] && : || {
        ErrorExit Opção é: -p 'full|FULL|Full ou short|SHORT|Short'
        }
        CommandLine=${StoryLine}${Plot}${CommandLine}
        ;;
    h)
        Usage
        ;;
    *)
        ErrorExit Opção desconhecida: $Opt Use: ${0##*/} -h para ajuda.
        ;;
    esac
done
# Não pode pegar pelo título e id ao mesmo tempo.
[ -n "$Title" ] && [ -n "$ID" ] && {
ErrorExit Não pode usar -T título e -i ID no mesmo comando.
}
# ---------------------------------------------------------------------------- #
##### EXECUTAMOS O PEDIDO #####
# Se não der certo, tente: $ Proto=http omdb-cli ...
if [ -n "$Title" ]
then
    $UserAgent -s \
    ${Proto}${QueryDatabase}${TitleQuery}${Title}${CommandLine} \
    | Parser
elif [ -n "$ID" ]
then
    $UserAgent -s \
    ${Proto}${QueryDatabase}${IdQuery}${ID}${CommandLine} \
    | Parser
else
    ErrorExit Erro desconhecido.
fi
exit $?
# ---------------------------------------------------------------------------- #
Ajuste de data e hora automática
Aprenda a falar os números de 0 a 99 em Inglês
verificar acessos indevidos automaticamente squid
Instalação de servidor Squid rápido e fácil
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









