omdb-cli
Publicado por Pedro Fernandes (última atualização em 19/04/2022)
[ Hits: 1.404 ]
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 $? # ---------------------------------------------------------------------------- #
Automatizador de instalação para Arch Linux
Retirar o link do download de páginas protetoras
ZFFmpeg - Conversor e editor de vídeos
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
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[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