omdb-cli

Publicado por Pedro Fernandes (última atualização em 19/04/2022)

[ Hits: 1.392 ]

Homepage: https://github.com/PedroF37

Download omdb-cli

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

Download 1638553320.omdb-cli


Esconder código-fonte

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

# ---------------------------------------------------------------------------- #

Scripts recomendados

Papéis de parede aleatórios direto da internet

Pendetect

Reduzir mp3 para celular

Instalação do Asterisk no Debian Etch

Filtro para importação de extrato do Banco do Brasil para Kmymoney


  

Comentários
[1] Comentário enviado por maurixnovatrento em 11/12/2021 - 15:39h


Gostei. Se eu tiver tempo dou uma testada nisso.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[2] Comentário enviado por sabe nada em 11/12/2021 - 22:07h


[1] Comentário enviado por mauricio123 em 11/12/2021 - 15:39h


Gostei. Se eu tiver tempo dou uma testada nisso.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]


Obrigado.
Se quiser pode pegar a nova versão no meu GitHub.
Ela está mais limpa e não usa tanto sed e pipes kkk. Se bem que a eficiência aqui deste script, vai depender mais da conexão e do pedido na API.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts